public SubtotalsRSI(SubtotalsRSI subRSI) { GainsAve = subRSI.GainsAve; LossesAve = subRSI.LossesAve; Period = subRSI.Period; }
/// <summary> /// Вычисляет одиночное значение RSI и средние значения повышений и понижений на основе разницы цен и предыдущих средних значений повышений и падений /// </summary> /// <param name="priceDifference">Разница цен</param> /// <param name="period">Интервал, период расчета RSI</param> /// <param name="sub_RSI">Предыдущие средние значения повышений и понижений</param> /// <returns></returns> public static (double rsi, SubtotalsRSI subRsi) GetPoint(double priceDifference, SubtotalsRSI sub_RSI) { var subRsi = new SubtotalsRSI(sub_RSI); var period = subRsi.Period; if (priceDifference > 0) { subRsi.GainsAve = (priceDifference + subRsi.GainsAve * (period - 1)) / period; subRsi.LossesAve = (0 + subRsi.LossesAve * (period - 1)) / period; } else { subRsi.GainsAve = (0 + subRsi.GainsAve * (period - 1)) / period; subRsi.LossesAve = (-priceDifference + subRsi.LossesAve * (period - 1)) / period; } double rsi = 0; try { var rs = subRsi.GainsAve / subRsi.LossesAve; rsi = 100 - 100 / (1 + rs); } catch { rsi = 100; } return(rsi, subRsi); }