/// <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 value = new DxValue(this) { IsFinal = input.IsFinal }; var plusValue = Plus.Process(input); var minusValue = Minus.Process(input); value.InnerValues.Add(Plus, plusValue); value.InnerValues.Add(Minus, minusValue); if (plusValue.IsEmpty || minusValue.IsEmpty) { return(value); } var plus = plusValue.GetValue <decimal>(); var minus = minusValue.GetValue <decimal>(); var diSum = plus + minus; var diDiff = Math.Abs(plus - minus); return(value.SetValue(this, diSum != 0m ? (100 * diDiff / diSum) : 0m)); }