Ejemplo n.º 1
0
            public void Calc()
            {
                // we abstracted Tony Finch's code for covariance
                // see Tony Finch, Incremental calculation of mean and variance
                // https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

                //--- average & variance for series
                double seriesNew  = _series.LogReturn()[0];
                double seriesDiff = seriesNew - _avgSeries;
                double seriesIncr = _alpha * seriesDiff;

                _avgSeries = _avgSeries + seriesIncr;
                _varSeries = (1.0 - _alpha) * (_varSeries + seriesDiff * seriesIncr);

                //--- average & variance for benchmark
                double benchNew  = _benchmark.LogReturn()[0];
                double benchDiff = benchNew - _avgBench;
                double benchIncr = _alpha * benchDiff;

                _avgBench = _avgBench + benchIncr;
                _varBench = (1.0 - _alpha) * (_varBench + benchDiff * benchIncr);

                //--- covariance
                _cov = (1.0 - _alpha) * (_cov + seriesDiff * benchIncr);

                //--- CAPM
                (Beta as TimeSeries <double>).Value  = _cov / Math.Max(1e-10, _varBench);
                (Alpha as TimeSeries <double>).Value = _avgSeries - Beta[0] * _avgBench;
            }
Ejemplo n.º 2
0
            public void Calc()
            {
                //--- average & variance for series
                double seriesNew  = _series.LogReturn()[0];
                double seriesDiff = seriesNew - _avgSeries;
                double seriesIncr = _alpha * seriesDiff;

                _avgSeries = _avgSeries + seriesIncr;
                _varSeries = (1.0 - _alpha) * (_varSeries + seriesDiff * seriesIncr);

                //--- average & variance for benchmark
                double benchNew  = _benchmark.LogReturn()[0];
                double benchDiff = benchNew - _avgBench;
                double benchIncr = _alpha * benchDiff;

                _avgBench = _avgBench + benchIncr;
                _varBench = (1.0 - _alpha) * (_varBench + benchDiff * benchIncr);

                //--- covariance
                _cov = (1.0 - _alpha) * (_cov + seriesDiff * benchIncr);

                //--- CAPM
                (Beta as TimeSeries <double>).Value  = _cov / Math.Max(1e-10, _varBench);
                (Alpha as TimeSeries <double>).Value = _avgSeries - Beta[0] * _avgBench;
            }
Ejemplo n.º 3
0
        /// <summary>
        /// Calculate historical volatility, based on log-returns.
        /// </summary>
        /// <param name="series">input time series</param>
        /// <param name="n">length</param>
        /// <param name="parentId">caller cache id, optional</param>
        /// <param name="memberName">caller's member name, optional</param>
        /// <param name="lineNumber">caller line number, optional</param>
        /// <returns>volatility as time series</returns>
        public static ITimeSeries <double> Volatility(this ITimeSeries <double> series, int n = 10,
                                                      CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode(), n);

            return(series
                   .LogReturn(cacheId)
                   .StandardDeviation(n, cacheId));
        }