18 using MathNet.Numerics.Statistics;
45 private Symbol _referenceSymbol;
50 private Symbol _targetSymbol;
65 private decimal _beta;
91 throw new Exception($
"Period parameter for Beta indicator must be greater than 2 but was {period}");
95 _referenceSymbol = referenceSymbol;
96 _targetSymbol = targetSymbol;
119 var inputSymbol = input.
Symbol;
120 if (inputSymbol == _targetSymbol)
124 else if(inputSymbol == _referenceSymbol)
126 _referenceDataPoints.
Add(input.
Close);
129 throw new Exception(
"The given symbol was not target or reference symbol");
132 if (_targetDataPoints.
Samples == _referenceDataPoints.
Samples && _referenceDataPoints.
Count > 1)
134 _targetReturns.
Add(GetNewReturn(_targetDataPoints));
135 _referenceReturns.
Add(GetNewReturn(_referenceDataPoints));
150 return (
double) ((rollingWindow[0] / rollingWindow[1]) - 1);
157 private void ComputeBeta()
159 var varianceComputed = _referenceReturns.Variance();
160 var covarianceComputed = _targetReturns.Covariance(_referenceReturns);
163 var variance = !varianceComputed.IsNaNOrZero() ? varianceComputed : 1;
164 var covariance = !covarianceComputed.IsNaNOrZero() ? covarianceComputed : 0;
165 _beta = (decimal) (covariance / variance);
173 _targetDataPoints.
Reset();
174 _referenceDataPoints.
Reset();
176 _targetReturns.
Reset();
177 _referenceReturns.
Reset();