imacd странное поведение

 
Я в программировании не слишком силен, но данный факт меня очень смущает. Т.к. я не знаю как решить эту проблемму. Весь код увы не могу выложить, но выложу часть, где происходит ерунда.
t1=0;
for(i=p1;i<=p2;i++)
      {
      r1=iMACD(Symbol(),0,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,0,i);
      if(r1>t1 && r1>0) t1=r1;
      if(t1<0) Alert("хмммммм.....");
      }

И чтобы вы могли подумать, в итоге я иногда получаю t1<0. А логи забиваются  "хмммммм....." которые не могут по определению забиваться этим текстом т.к. перед циклом прямо указано что t1 = 0. То есть ищеться максимум на определенном промежутке.


Где я накосячил?

 

Наверно косяк где-то еще... Сделайте законченный эксперт только с этим фрагментом и прогоните в тестере. Сами увидите что все нормально. Как вариант, в алерте выводите не "ХММ...", а более полезную информацию...

 
Figar0 >>:

Наверно косяк где-то еще... Сделайте законченный эксперт только с этим фрагментом и прогоните в тестере. Сами увидите что все нормально. Как вариант, в алерте выводите не "ХММ...", а более полезную информацию...


Да, в алерте я выводил значения r1 и t1. Смотрел что где и как, но потом немного занервничал и писал туда всякую ерунду. С этим согласен.

Насчет эксперта, попробую. Обычно пишу скрипт который показывает входы, а потом переношу в эксперта. Так надежнее что не накосячил в условиях входа. Но в данном случае что-то мне не повезло и где-то я намудрил. Хотя, как если заранее даешь t1>0 а потом оно получается -0.8 ну никак ума не приложу.

KONDOR >>:

сделай проверку перед циклом


if(p1>p2) return;


или измени условия самого цикла на

for(i=p1;i<=p1+Period_;i++)


Почему цикл надо так изменить?

 

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


r1=MathAbs(r1);

Заменив первое r1 на другую переменную все вроде заработало как надо... А вообще, конечно, танцы с бубном... 

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