Скачать MetaTrader 5

расчет RSI

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь написать торгового робота? Загляни в Справочник MQL5!
Dmitiry Ananiev
6593
Dmitiry Ananiev 2015.03.26 06:38 

Для MQL4.  

Появилась идея сделать совтеника на RSI с динамически изменяемым периодом.  

вызвал индикатор

double x = iRSI (_Symbol,0,din_pereriod,PRICE_CLOSE,0);

При оптимизации получил сообщение. что не хватает памяти.

2015.03.26 06:32:25.393 Not enough memory for indicator Relative Strength Index (EURGBP,M1)
2015.03.26 06:32:25.393 Memory handler: cannot allocate 3641080 bytes of memory

Ну решил расчитать RSI прямо в советнике. А он  выдает результаты отличные от стандартного РСИ. Расчет брался для периода 14.

Помогите правильно расчиать РСИ !  

double RSI(int perRSI)
  {
   double u=0.0;
   double d=0.0;
   double c0,c1;
   for(int i=perRSI;i>=0;i--)
     {
      c1 = Close[i+1];
      c0 = Close [i];
      if(c0<c1) u+=(c1-c0);
      else d+=(c0-c1);
     }
    d/=perRSI;
    u/=perRSI;
    
        if (u==0)return (100.0);
        if (d==0) return (0.00);
   double rsi=100.0-(100.0/(1.0+d/u));
   return (rsi);
  }
Andrey Dik
11352
Andrey Dik 2015.03.26 17:15  
Учитывайте, что IndicatorRelease() не работает в тестере.
Dmitiry Ananiev
6593
Dmitiry Ananiev 2015.03.26 21:48  
joo:
Учитывайте, что IndicatorRelease() не работает в тестере.
При чем тут  IndicatorRelease() ? Вопрос в то, что надо написать, чтоб с приходом тика переменная rsi принимала значение индикатора. Но индикатор при этом не вызывался, а расчитывался. 
Dmitry Fedoseev
42924
Dmitry Fedoseev 2015.03.27 02:36  

Чтобы правильно рассчитать рси с периодом 14 нужно баров 300.

Такой вариант: писать свой рси, параметр передавать через глобальную переменную, чтобы не загружалась куча индикаторов. Чтобы из-за пересчета не тормозило, ограничить количество обсчитываемых баров. Только надо поэкспериментировать, исходя из максимального периода, сколько потребуется баров.

Dmitiry Ananiev
6593
Dmitiry Ananiev 2015.03.27 03:19  

Вообще РСИ считается вот так: 

Формула RSI следующая:RSI = 100 - [100/1 + RS],

где RS - среднее значение положительных изменений цены закрытия за определенное число дней, деленное на среднее значение отрицательных изменений цены закрытия за то же число дней.

Т.е. 300 баров обсчитывать не надо. Но такой расчет не совпадает со значением индикатора. 

Dmitry Fedoseev
42924
Dmitry Fedoseev 2015.03.27 05:39  
dimeon:

Вообще РСИ считается вот так: 

Формула RSI следующая:RSI = 100 - [100/1 + RS],

где RS - среднее значение положительных изменений цены закрытия за определенное число дней, деленное на среднее значение отрицательных изменений цены закрытия за то же число дней.

Т.е. 300 баров обсчитывать не надо. Но такой расчет не совпадает со значением индикатора. 

Гы гы гы... расскажите лучше про формулу скользящей средней. 

Можете и не обсчитывать 300 баров, тогда не удивляйтесь, почему значение не совпадает.  

Самый простой вариант - взять исходник рси из примеров, ограничить количество обсчитываемых баров (еще сделать, чтобы всегда на все бары пересчет был) и сделать параметры из глобальной переменной.

Andrey Khatimlianskii
56209
Andrey Khatimlianskii 2015.03.27 13:02  
dimeon:
В цикле лишнее значение. Надо либо "for(int i=perRSI-1;i>=0;i--)" либо "for(int i=0;i<perRSI;i++)". И проверьте, не перепутаны ли u и d.
Andrey Khatimlianskii
56209
Andrey Khatimlianskii 2015.03.27 13:03  
Integer:

Гы гы гы... расскажите лучше про формулу скользящей средней. 

Можете и не обсчитывать 300 баров, тогда не удивляйтесь, почему значение не совпадает. 

Не, тут же обычное усреднение, история не нужна.
Dmitry Fedoseev
42924
Dmitry Fedoseev 2015.03.27 13:47  
Обана и вот это да! Это когда и с чего вдруг RSI стал рассчитываться с использованием просто го сглаживания? Он всегда рассчитывался с  использованием экспоненциального сглаживания Уйлдера (период 14 соответствует периоду EMA 27). 
Andrey Khatimlianskii
56209
Andrey Khatimlianskii 2015.03.27 16:50  
Integer:
Обана и вот это да! Это когда и с чего вдруг RSI стал рассчитываться с использованием просто го сглаживания? Он всегда рассчитывался с  использованием экспоненциального сглаживания Уйлдера (период 14 соответствует периоду EMA 27). 
Точно, не обратил внимания. Тогда история нужна.
Dmitry Fedoseev
42924
Dmitry Fedoseev 2015.03.27 16:58  
komposter:
Точно, не обратил внимания. Тогда история нужна.
Не нужна. RSI из примеров с простым сглаживанием. Но что-то вообще... вроде помню, когда последний раз исходники смотрел, правда очень давно, было экспоненциальное сглаживание. Может с ADX перепутал.
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий