расчет RSI - страница 3

 
dimeon:

Для 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.

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

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

историчских данных должно хватать. Больше 2-х лет. ТФ используется минутный. 

Вот с глобальной переменной не понятно. Можно кусок кода ?  

 
dimeon:

историчских данных должно хватать. Больше 2-х лет. ТФ используется минутный. 

Вот с глобальной переменной не понятно. Можно кусок кода ?  

В советнике перед вызовом индикатора присваиваем глобальной переменной значение периода, пусть будет так:

GlobalVariableSet('уникальное_имя_переменной',14) ;

После этого вызываем индикатор:

double rsi=iCustom(...);

В индикаторе в начале функции OnCalculate() забираем из глобальной переменной значение периода:

InpRSIPeriod=GlobalVaribaleGet('уникальное_имя_переменной');

 

Да, пожалуй, с Гл. переменной будет лучше всего - памяти на один буфер надо.

И ограничить глубину рассчитываемой истории в индикаторе, чтоб лишнего не считать.

 
Integer:

В советнике перед вызовом индикатора присваиваем глобальной переменной значение периода, пусть будет так:

GlobalVariableSet('уникальное_имя_переменной',14) ;

После этого вызываем индикатор:

double rsi=iCustom(...);

В индикаторе в начале функции OnCalculate() забираем из глобальной переменной значение периода:

InpRSIPeriod=GlobalVaribaleGet('уникальное_имя_переменной');

И чем этот  подход круче чем просто вызов iRSI

А на счет уменьшения количества обсчитывемых баров - идея не плохая .  

 
dimeon:

И чем этот  подход круче чем просто вызов iRSI

А на счет уменьшения количества обсчитывемых баров - идея не плохая .  

В память будет загружен только один экземпляр индикатора.

Устраняется проблема описанная в вашем первом сообщении:

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

Причина обращения: