Пример #1
0
 public SubtotalsRSI(SubtotalsRSI subRSI)
 {
     GainsAve  = subRSI.GainsAve;
     LossesAve = subRSI.LossesAve;
     Period    = subRSI.Period;
 }
Пример #2
0
        /// <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);
        }