Esempio n. 1
0
        /// <summary>
        /// To handle the input value.
        /// </summary>
        /// <param name="input">The input value.</param>
        /// <returns>The resulting value.</returns>
        protected override IIndicatorValue OnProcess(IIndicatorValue input)
        {
            var val = input.GetValue <decimal>();

            if (input.IsFinal)
            {
                Buffer.Add(val);
            }

            var smaValue = Sma.Process(input).GetValue <decimal>();

            if (Buffer.Count > Length)
            {
                Buffer.RemoveAt(0);
            }

            // считаем значение отклонения
            var md = input.IsFinal
                                ? Buffer.Sum(t => Math.Abs(t - smaValue))
                                : Buffer.Skip(IsFormed ? 1 : 0).Sum(t => Math.Abs(t - smaValue)) + Math.Abs(val - smaValue);

            return(new DecimalIndicatorValue(this, md / Length));
        }
Esempio n. 2
0
        /// <summary>
        /// Обработать входное значение.
        /// </summary>
        /// <param name="input">Входное значение.</param>
        /// <returns>Результирующее значение.</returns>
        protected override IIndicatorValue OnProcess(IIndicatorValue input)
        {
            var aoValue = Ao.Process(input);

            if (Ao.IsFormed)
            {
                return(new DecimalIndicatorValue(this, aoValue.GetValue <decimal>() - Sma.Process(aoValue).GetValue <decimal>()));
            }

            return(new DecimalIndicatorValue(this, aoValue.GetValue <decimal>()));
        }