/// <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)); }
/// <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>())); }