diff --git a/Indicators/Beta.cs b/Indicators/Beta.cs
index 39484b628a8e..a40baaf2b096 100644
--- a/Indicators/Beta.cs
+++ b/Indicators/Beta.cs
@@ -99,7 +99,7 @@ public class Beta : BarIndicator, IIndicatorWarmUpPeriodProvider
///
/// Gets a flag indicating when the indicator is ready and fully initialized
///
- public override bool IsReady => (_targetReturns.Samples >= WarmUpPeriod - 1) && (_referenceReturns.Samples >= WarmUpPeriod - 1);
+ public override bool IsReady => _targetReturns.IsReady && _referenceReturns.IsReady;
///
/// Creates a new Beta indicator with the specified name, target, reference,
@@ -128,11 +128,9 @@ public Beta(string name, Symbol targetSymbol, Symbol referenceSymbol, int period
_targetReturns = new RollingWindow(period);
_referenceReturns = new RollingWindow(period);
_beta = 0;
-
- _targetTimeZone = MarketHoursDatabase.FromDataFolder()
- .GetExchangeHours(_targetSymbol.ID.Market, _targetSymbol, _targetSymbol.ID.SecurityType).TimeZone;
- _referenceTimeZone = MarketHoursDatabase.FromDataFolder()
- .GetExchangeHours(_referenceSymbol.ID.Market, _referenceSymbol, _referenceSymbol.ID.SecurityType).TimeZone;
+ var dataFolder = MarketHoursDatabase.FromDataFolder();
+ _targetTimeZone = dataFolder.GetExchangeHours(_targetSymbol.ID.Market, _targetSymbol, _targetSymbol.ID.SecurityType).TimeZone;
+ _referenceTimeZone = dataFolder.GetExchangeHours(_referenceSymbol.ID.Market, _referenceSymbol, _referenceSymbol.ID.SecurityType).TimeZone;
_isTimezoneDifferent = _targetTimeZone != _referenceTimeZone;
}
@@ -175,11 +173,6 @@ public Beta(string name, int period, Symbol targetSymbol, Symbol referenceSymbol
/// The beta value of the target used in relation with the reference
protected override decimal ComputeNextValue(IBaseDataBar input)
{
- if (input.Symbol != _targetSymbol && input.Symbol != _referenceSymbol)
- {
- throw new ArgumentException($"The given symbol {input.Symbol} was not {_targetSymbol} or {_referenceSymbol} symbol");
- }
-
if (_previousInput == null)
{
_previousInput = input;
@@ -202,12 +195,7 @@ protected override decimal ComputeNextValue(IBaseDataBar input)
{
AddDataPoint(input);
AddDataPoint(_previousInput);
-
- // Compute beta when both have at least "period" data points
- if (IsReady)
- {
- ComputeBeta();
- }
+ ComputeBeta();
}
_previousInput = input;
return _beta;
@@ -258,6 +246,10 @@ private void AddDataPoint(IBaseDataBar input)
_referenceReturns.Add(GetNewReturn(_referenceDataPoints));
}
}
+ else
+ {
+ throw new ArgumentException($"The given symbol {input.Symbol} was not {_targetSymbol} or {_referenceSymbol} symbol");
+ }
}
///
@@ -291,9 +283,9 @@ private void ComputeBeta()
///
public override void Reset()
{
+ _previousInput = null;
_targetDataPoints.Reset();
_referenceDataPoints.Reset();
-
_targetReturns.Reset();
_referenceReturns.Reset();
_beta = 0;
diff --git a/Tests/Indicators/BetaIndicatorTests.cs b/Tests/Indicators/BetaIndicatorTests.cs
index e7a5c81b58b4..80d1cf804241 100644
--- a/Tests/Indicators/BetaIndicatorTests.cs
+++ b/Tests/Indicators/BetaIndicatorTests.cs
@@ -177,11 +177,13 @@ public void EqualBetaValue()
for (int i = 0; i < 3; i++)
{
- indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = i + 1, Time = _reference.AddDays(1 + i) });
- indicator.Update(new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = i + 1, Time = _reference.AddDays(1 + i) });
+ var startTime = _reference.AddDays(1 + i);
+ var endTime = startTime.AddDays(1);
+ indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = i + 1, Time = startTime, EndTime = endTime });
+ indicator.Update(new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = i + 1, Time = startTime, EndTime = endTime });
}
- Assert.AreEqual(0, (double)indicator.Current.Value, 0.0001);
+ Assert.AreEqual(1, (double)indicator.Current.Value, 0.0001);
}
[Test]