public void ResetsProperly() { var inner = new SimpleMovingAverage(2); var func = new FunctionalIndicator("f", (time, data) => { inner.Update(time, data); return(inner.Current.Value * 2); }, @this => inner.IsReady, () => inner.Reset() ); func.Update(DateTime.Today, 1d); func.Update(DateTime.Today.AddSeconds(1), 2d); Assert.IsTrue(func.IsReady); func.Reset(); TestHelper.AssertIndicatorIsInDefaultState(inner); TestHelper.AssertIndicatorIsInDefaultState(func); }
public void ResetsProperly() { var inner = new SimpleMovingAverage(2); var func = new FunctionalIndicator<IndicatorDataPoint>("f", data => { inner.Update(data); return inner.Current.Value*2; }, @this => inner.IsReady, () => inner.Reset() ); func.Update(DateTime.Today, 1m); func.Update(DateTime.Today.AddSeconds(1), 2m); Assert.IsTrue(func.IsReady); func.Reset(); TestHelper.AssertIndicatorIsInDefaultState(inner); TestHelper.AssertIndicatorIsInDefaultState(func); }
public void ResetsProperly() { var inner = new SimpleMovingAverage(2); var func = new FunctionalIndicator <IndicatorDataPoint>("f", data => { inner.Update(data); return(inner.Current.Price * 2); }, @this => inner.IsReady, () => inner.Reset() ); func.Update(DateTime.Today, TimeZone.Utc, 1m); func.Update(DateTime.Today.AddSeconds(1), TimeZone.Utc, 2m); Assert.True(func.IsReady); func.Reset(); TestHelper.AssertIndicatorIsInDefaultState(inner); TestHelper.AssertIndicatorIsInDefaultState(func); }
/// <summary> /// Initializes a new instance of the <see cref="AverageDirectionalIndex"/> class. /// </summary> /// <param name="name">The name.</param> /// <param name="period">The period.</param> public AverageDirectionalIndex(string name, int period) : base(name) { _period = period; TrueRange = new FunctionalIndicator<IBaseDataBar>(name + "_TrueRange", currentBar => { var value = ComputeTrueRange(currentBar); return value; }, isReady => _previousInput != null ); DirectionalMovementPlus = new FunctionalIndicator<IBaseDataBar>(name + "_PositiveDirectionalMovement", currentBar => { var value = ComputePositiveDirectionalMovement(currentBar); return value; }, isReady => _previousInput != null ); DirectionalMovementMinus = new FunctionalIndicator<IBaseDataBar>(name + "_NegativeDirectionalMovement", currentBar => { var value = ComputeNegativeDirectionalMovement(currentBar); return value; }, isReady => _previousInput != null ); PositiveDirectionalIndex = new FunctionalIndicator<IndicatorDataPoint>(name + "_PositiveDirectionalIndex", input => ComputePositiveDirectionalIndex(), positiveDirectionalIndex => DirectionalMovementPlus.IsReady && TrueRange.IsReady, () => { DirectionalMovementPlus.Reset(); TrueRange.Reset(); } ); NegativeDirectionalIndex = new FunctionalIndicator<IndicatorDataPoint>(name + "_NegativeDirectionalIndex", input => ComputeNegativeDirectionalIndex(), negativeDirectionalIndex => DirectionalMovementMinus.IsReady && TrueRange.IsReady, () => { DirectionalMovementMinus.Reset(); TrueRange.Reset(); } ); SmoothedTrueRange = new FunctionalIndicator<IndicatorDataPoint>(name + "_SmoothedTrueRange", currentBar => ComputeSmoothedTrueRange(period), isReady => _previousInput != null ); SmoothedDirectionalMovementPlus = new FunctionalIndicator<IndicatorDataPoint>(name + "_SmoothedDirectionalMovementPlus", currentBar => ComputeSmoothedDirectionalMovementPlus(period), isReady => _previousInput != null ); SmoothedDirectionalMovementMinus = new FunctionalIndicator<IndicatorDataPoint>(name + "_SmoothedDirectionalMovementMinus", currentBar => ComputeSmoothedDirectionalMovementMinus(period), isReady => _previousInput != null ); }