Esempio n. 1
0
        protected override decimal ComputeNextValue(TradeBar input)
        {
            _macd.Update(input.EndTime, input.Close);

            if (!IsReady)
            {
                return(0m);
            }

            var macdBar = new TradeBar
            {
                EndTime = input.EndTime,
                Close   = _macd
            };

            _frac1.Update(macdBar);

            var pfBar = new TradeBar
            {
                EndTime = input.EndTime,
                Close   = _frac1
            };

            _frac2.Update(pfBar);

            return(_frac2.StochD);
        }
Esempio n. 2
0
        protected override decimal ComputeNextValue(IBaseDataBar input)
        {
            _macd.Update(input.EndTime, input.Close);

            if (!_macd.IsReady)
            {
                return(0m);
            }

            var macdBar = new TradeBar
            {
                Time    = input.Time,
                EndTime = input.EndTime,
                Open    = _macd,
                High    = _macd,
                Low     = _macd,
                Close   = _macd
            };

            _frac1.Update(macdBar);

            if (!_frac1.IsReady)
            {
                return(0m);
            }

            var pf = _pf.IsReady ? _pf + (_factor * (_frac1.FastStoch - _pf)) : _frac1.FastStoch;

            _pf.Update(input.Time, pf);

            var pfBar = new TradeBar
            {
                Time    = input.Time,
                EndTime = input.EndTime,
                Open    = pf,
                High    = pf,
                Low     = pf,
                Close   = pf
            };

            _frac2.Update(pfBar);

            if (!_frac2.IsReady)
            {
                return(0m);
            }

            var pff = _pff.IsReady ? _pff + (_factor * (_frac2.FastStoch - _pff)) : _frac2.FastStoch;

            _pff.Update(input.Time, pff);

            return(pff);
        }
        public void ResetsProperly()
        {
            var macd = new MovingAverageConvergenceDivergence("macd", 3, 5, 3);
            foreach (var data in TestHelper.GetDataStream(30))
            {
                macd.Update(data);
            }
            Assert.IsTrue(macd.IsReady);

            macd.Reset();

            TestHelper.AssertIndicatorIsInDefaultState(macd);
            TestHelper.AssertIndicatorIsInDefaultState(macd.Fast);
            TestHelper.AssertIndicatorIsInDefaultState(macd.Signal);
            TestHelper.AssertIndicatorIsInDefaultState(macd.Signal);
        }
Esempio n. 4
0
        /// <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(IndicatorDataPoint input)
        {
            // Update internal indicator, automatically updates _maximum and _minimum
            _MACD.Update(input);

            // Update our Stochastics K, automatically updates our Stochastics D variable which is a smoothed version of K
            var MACD_K = new IndicatorDataPoint(input.Time, ComputeStoch(_MACD.Current.Value, _maximum.Current.Value, _minimum.Current.Value));

            _K.Update(MACD_K);

            // With our Stochastic D values calculate PF
            var PF = new IndicatorDataPoint(input.Time, ComputeStoch(_D.Current.Value, _maximumD.Current.Value, _minimumD.Current.Value));

            _PF.Update(PF);

            return(_PFF.Current.Value);
        }
        public void ComputesCorrectly()
        {
            var fast = new SimpleMovingAverage(3);
            var slow = new SimpleMovingAverage(5);
            var signal = new SimpleMovingAverage(3);
            var macd = new MovingAverageConvergenceDivergence("macd", 3, 5, 3, MovingAverageType.Simple);

            foreach (var data in TestHelper.GetDataStream(7))
            {
                fast.Update(data);
                slow.Update(data);
                macd.Update(data);
                Assert.AreEqual(fast - slow, macd);
                if (fast.IsReady && slow.IsReady)
                {
                    signal.Update(new IndicatorDataPoint(data.Time, macd));
                    Assert.AreEqual(signal.Current.Value, macd.Current.Value);
                }
            }
        }