как посчитать РСИ

 

Для 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);
}
 
Так в оригинале немножечко не так считает-то, самую малость. Но дьявол кроется как раз в деталях.
 
evillive:
Так в оригинале немножечко не так считает-то, самую малость. Но дьявол кроется как раз в деталях.

Подскажите - как надо посчитать ?
 
Оригинал внимательно рассмотрите ещё раз  (MQL4\Indicators\Examples\RSI.mq4) и сравните со своим кодом.
 

evillive:
Оригинал внимательно рассмотрите ещё раз  (MQL4\Indicators\Examples\RSI.mq4) и сравните со своим кодом.

 


Вы если не знаете где ошибка, то не надо куда либо отсылать. Я уже перепробовал несколько вариантов. Но так и не нашел свою ошибку.
 

Сдаётся мне, здесь нужно вычесть единицу:

 

for(int i=perRSI-1;i>=0;i--)
Причина обращения: