protected override decimal Calculate(int index) { List <int> barsOfPreviousPeriod = _pivotPointIndicator.GetBarsOfPreviousPeriod(index); if (barsOfPreviousPeriod.isEmpty()) { return(Decimals.NaN); } switch (_level) { case PivotLevel.RESISTANCE_3: return(CalculateR3(barsOfPreviousPeriod, index)); case PivotLevel.RESISTANCE_2: return(CalculateR2(barsOfPreviousPeriod, index)); case PivotLevel.RESISTANCE_1: return(CalculateR1(barsOfPreviousPeriod, index)); case PivotLevel.SUPPORT_1: return(CalculateS1(barsOfPreviousPeriod, index)); case PivotLevel.SUPPORT_2: return(CalculateS2(barsOfPreviousPeriod, index)); case PivotLevel.SUPPORT_3: return(CalculateS3(barsOfPreviousPeriod, index)); default: return(Decimals.NaN); } }
protected override decimal Calculate(int index) { List <int> barsOfPreviousPeriod = _pivotPointIndicator.GetBarsOfPreviousPeriod(index); if (barsOfPreviousPeriod.isEmpty()) { return(Decimals.NaN); } IBar bar = TimeSeries.GetBar(barsOfPreviousPeriod[0]); decimal high = bar.MaxPrice; decimal low = bar.MinPrice; foreach (int i in barsOfPreviousPeriod) { high = (TimeSeries.GetBar(i).MaxPrice).Max(high); low = (TimeSeries.GetBar(i).MinPrice).Min(low); } if (_fibReversalType == FibReversalType.RESISTANCE) { return(_pivotPointIndicator.GetValue(index).Plus(_fibonacciFactor.MultipliedBy(high.Minus(low)))); } return(_pivotPointIndicator.GetValue(index).Minus(_fibonacciFactor.MultipliedBy(high.Minus(low)))); }