Example #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 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));
        }