Зацикливается индикатор

 

Доброго времени суток! Буду очень благодарен за помощь. Неработает индикатор - происходит зацикливание и подвисание терминала :( .

Место в коде с ошибкой нашел, но что не так никак не удается понять.

   Counted_bars=IndicatorCounted();  
   i=Bars-Counted_bars-1;           
   while(i>=0)                      
     {
      cnt=0;
      if (iCustom(NULL,0,"MMIk",0,i)!=EMPTY_VALUE&&iCustom(NULL,0,"MMIk",0,i)>0) 
      {
          for(j=1,k=1;k<=Glubina;j++)  // <== Ошибка здесь! Зацикливание!
            {
             if (iCustom(NULL,0,"MMIk",0,i-j)!=EMPTY_VALUE&&iCustom(NULL,0,"MMIk",0,i-j)>0)
               {
                if (High[i-j]>High[i]) 
                   { 
                   cnt=1;
                   break;
                   } 
                   else k++;
               }    
            }
      }
      if (cnt!=1)
         {
          ExtMapBuffer3[i]=High[i]+30*Point;
         }

      i--;
     }

Смысл кода - рассчитываем только бары со значением самописного индикатора "MMIk" отличным от нуля, если слева от него "Glubina" непустых значений индикатора "MMIk" имеют High ниже текущего бара - нарисовать стрелку над текущим High иначе расчитать следующий бар.

Кто-нибудь может подсказать в чем может быть ошибка? Значения "i" из индикатора "MMIk" получаются нормально - проверял. Что не так - ума не приложу. 

 
RandoM >>:


Место в коде с ошибкой нашел, но что не так никак не удается понять.


В представленном коде не определена переменная с идентификатором "Glubina"

 

М-да... зацикливание индикатора - это зло страшное.

Приходится вытирать Ex4, а терминал приканчивать с Task Manager'а.

Следует заметить, что сволочная программа виснет так,

что не дает посмотреть лог.

.

А в условие цикла for добавить надо проверку не только для k, но и для j.

У вас (i-j) легко может стать меньше нуля.

Mql4 предусматривает обращение к минусовым барам,

но у нас с вами - простых юзеров - эта фича отключена -

и по этим индексам вы можете найти исключительно 0.

.

В плане зависаний приятно удивляют

Action script от Adobe flash player, Visual Basic, Java.

 
После долгих мучений разобрался. Спасибо jartmailru!!! Дал очень дельный совет! Зацикливание происходило и при расчете крайнего бара тоже! Однако индикатор так и не работал правильно, и продолжал подвисать! Как ни странно обнаружился очень интересный факт - NULL оказался не равен 0!!!!! Вставил ограничение и все заработало!
iCustom(NULL,0,"MMIk",0,i-j)!=EMPTY_VALUE&&iCustom(NULL,0,"MMIk",0,i-j)!=0&&iCustom(NULL,0,"MMIk",0,i-j)!=NULL
Спасибо за внимание к моей проблеме! Тема закрыта :)
Причина обращения: