ошибка в расчетах индикатора iMA

 

Пытаюсь создать индикатор.

Делаю вычисления

ExtFastMaHandle = iMA(NULL, 0, 12, 0, MODE_EMA, PRICE_CLOSE);

ExtSlowMaHandle = iMA(NULL, 0, 26, 0, MODE_EMA, PRICE_CLOSE); 

CopyBuffer(ExtFastMaHandle, 0, 0, rates_total, ExtFastMaBuffer);

CopyBuffer(ExtSlowMaHandle, 0, 0, rates_total, ExtSlowMaBuffer); 

затем использую данные вычисления  в

ExponentialMAOnBuffer(rates_total,prev_calculated,0,12,ExtFastMaBuffer,ExtFastResMaBuffer);

ExponentialMAOnBuffer(rates_total,prev_calculated,0,26,ExtSlowMaBuffer,ExtSlowResMaBuffer); 

то все данные обрабатывается нормально и график выводиться, а если за место MODE_EMA и  ExponentialMAOnBuffer использовать другой метод расчета скользящей средней, например MODE_SMA и SimpleMAOnBuffer то значения получаются неадекватными и с ними нельзя ничего сделать. Подскажите как решить данную проблему.

 

 

savabaka:

значения получаются неадекватными и с ними нельзя ничего сделать. Подскажите как решить данную проблему.

проинициализировать массив нулями перед вычислением.
 

for (int b = 0; b < rates_total; b++) {ExtFastMaBuffer[b] = 0; ExtSlowMaBuffer[b] = 0;} 

проинициализировал, не помогло.

price[i] 

нельзя проинициализировать нулями, так как это константа и ее нельзя модифицировать;
 
savabaka:
нельзя проинициализировать нулями, так как это константа и ее нельзя модифицировать;
значит смотрите выше - откуда она приходит в функцию.
 

вот описал же

ExtFastMaHandle = iMA(NULL, 0, 12, 0, MODE_EMA, PRICE_CLOSE); 

CopyBuffer(ExtFastMaHandle, 0, 0, rates_total, ExtFastMaBuffer); 

ExponentialMAOnBuffer(rates_total,prev_calculated,0,12,ExtFastMaBuffer,ExtFastResMaBuffer); 

все приходит от индикатора iMA. То есть цены это буфер ExtFastMaBuffer. Его я уже попробовал обнулить нулями как вы говорили, это не помогло.

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5
 
savabaka:

вот описал же

все приходит от индикатора iMA. То есть цены это буфер ExtFastMaBuffer. Его я уже попробовал обнулить нулями как вы говорили, это не помогло.

это все филькина грамота, что вы скрины и строки показываете.

Проблема у вас в коде. вы не обнуляете массивы или не проверяете корректность результаты вызовов функций.

посему вам только тут помочь смогут

Клуб Телепатов - MQL4 форум
  • www.mql5.com
Клуб Телепатов - MQL4 форум
 
sergeev:

это все филькина грамота, что вы скрины и строки показываете.

Проблема у вас в коде. вы не обнуляете массивы или не проверяете корректность результаты вызовов функций.

посему вам только тут помочь смогут

Я не скрывал код, думал информации предоставил достаточно. Вот весь код индикатора, может с ним будет понятнее.
Файлы:
1_test.mq5  8 kb
 

проверьте CopyBuffer на наличие всех rates_total

и  почему вы думаете что индикатор iMA возле начала баров расчитан?  вам необходимо пропустить первые невалидные бары

 

Сделал проверку на CopyBuffer, там оказалось все нормально.

А вот индикатор iMA действительно не рассчитывал первые бары, изменил 

ExponentialMAOnBuffer(rates_total,prev_calculated,0,12,ExtFastMaBuffer,ExtFastResMaBuffer);  

на

ExponentialMAOnBuffer(rates_total,prev_calculated,12,12,ExtFastMaBuffer,ExtFastResMaBuffer);  

и все заработало.

Премного благодарен за квалифицированную помощь.

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5