Beispiel #1
0
        /// <summary>
        /// Computes the next value for this indicator from the given state.
        /// </summary>
        /// <param name="input">The input value to this indicator on this time step</param>
        /// <returns>A a value for this indicator</returns>
        protected override decimal ComputeNextValue(TradeBar input)
        {
            if (_previousHighMaximum == 0 && _previousLowMinimum == 0)
            {
                _previousHighMaximum = input.High;
                _previousLowMinimum  = input.Low;
            }

            if (input.Volume == 0 || input.High == input.Low)
            {
                _sma.Update(input.Time, 0);
                return(_sma.Current.Value);
            }

            var midValue = ((input.High + input.Low) / 2) - ((_previousHighMaximum + _previousLowMinimum) / 2);
            var midRatio = ((input.Volume / _scale) / (input.High - input.Low));

            _previousHighMaximum = input.High;
            _previousLowMinimum  = input.Low;

            _sma.Update(input.Time, midValue / midRatio);

            return(_sma.Current.Value);
        }
        protected override decimal ComputeNextValue(IndicatorDataPoint input)
        {
            double ifish = 0d;
            double normalized;

            mean.Update(input);
            sd.Update(input);

            if (mean.IsReady &&
                sd.IsReady &&
                sd != 0)
            {
                normalized = (double)(4 * (input - mean) / sd);
                ifish      = (Math.Exp(2 * normalized) - 1) / (Math.Exp(2 * normalized) + 1);
            }
            return((decimal)ifish);
        }