/// <summary>
        /// Computes the next value of this indicator from the given state
        /// </summary>
        /// <param name="input">The input given to the indicator</param>
        /// <returns>A new value for this indicator</returns>
        protected override decimal ComputeNextValue(TradeBar input)
        {
            _ad.Update(input);
            _emaFast.Update(_ad.Current);
            _emaSlow.Update(_ad.Current);

            return(IsReady ? _emaFast.Current.Value - _emaSlow.Current.Value : 0m);
        }
        public void ResetsProperly()
        {
            var ad = new AccumulationDistribution("AD");
            foreach (var data in TestHelper.GetTradeBarStream("spy_ad.txt", false))
            {
                ad.Update(data);
            }

            Assert.IsTrue(ad.IsReady);

            ad.Reset();

            TestHelper.AssertIndicatorIsInDefaultState(ad);
        }