Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1935

 
Никак не пойму что не так. В индикаторе есть цикл while, но вроде он нормально работает. Сначала при тестировании все работает, но в одном и том же месте программа виснет, терминал тоже, приходится удалять исходники из терминала. На других валютах тоже виснет. Обложил всю программу комментами, и получается что доходит до  Comment(rates_total+"\n"+prev_calculated); перед return и останавливается. Причем коммент показывает цифры нормальные типа 3247 и 3247.Получается что условие для работы не выполняется (rates_total>prev_calculated), и программа вообще ничего делать не должна. Почему виснет
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(rates_total>prev_calculated)
     { 
         Comment("0");
          if(Count==0)
             total = rates_total-4;
          else
             total = rates_total - prev_calculated+2;

          if(total>10000)
             total=10000;

          for(int i=total; i>2; i--)
            {
            }
       
          while(begin<size-2)
            {
            }
      Count++;
     }  
     Comment(rates_total+"\n"+prev_calculated);          //виснет здесь(коммент 3247 и 3247)
   return(rates_total);
  }
 
Aleksandr Kononov #:
Никак не пойму что не так. В индикаторе есть цикл while, но вроде он нормально работает. Сначала при тестировании все работает, но в одном и том же месте программа виснет, терминал тоже, приходится удалять исходники из терминала. На других валютах тоже виснет. Обложил всю программу комментами, и получается что доходит до  Comment(rates_total+"\n"+prev_calculated); перед return и останавливается. Причем коммент показывает цифры нормальные типа 3247 и 3247.Получается что условие для работы не выполняется (rates_total>prev_calculated), и программа вообще ничего делать не должна. Почему виснет

Внимательно прочтите документацию.

Если выражение истинно, то оператор выполняется до тех пор, пока выражение не станет ложным.
Что за переменные в условии цикла? И если начальное условике true, то когда оно станет false чтобы выйти из цикла?
Оператор цикла while - Операторы - Основы языка - Справочник MQL4
Оператор цикла while - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
Оператор цикла while - Операторы - Основы языка - Справочник MQL4
 
Alexey Viktorov #:

Внимательно прочтите документацию.

Что за переменные в условии цикла? И если начальное условике true, то когда оно станет false чтобы выйти из цикла?

Циклы просто для понимания что они есть. Там много кода получится если их писать. Вопрос в том, почему работа прекращается перед return, хотя на этом тике даже ничего не происходит? В комментарии rates total равен prev calculated, значит вообще ничего не делаем.

 
Индикатор работает если что, но виснет при каких то условиях
 
Может это какая то отложенная ошибка? Программа доходит до конца и только потом зависает, такое может быть?
 
Все таки проблема в цикле. Comment опаздывает получается. Print последний в цикле 
 
Подскажите как найти стрелку среди других объектов в mql4? Нужно удалить все стрелки, а линии оставить
 
Aleksandr Kononov #:
Подскажите как найти стрелку среди других объектов в mql4? Нужно удалить все стрелки, а линии оставить

Ну документацию почитайте

int  ObjectsDeleteAll(
   int    sub_window=EMPTY,   // индекс окна
   int    object_type=EMPTY   // тип объекта для удаления
   );
ObjectsDeleteAll - Графические объекты - Справочник MQL4
ObjectsDeleteAll - Графические объекты - Справочник MQL4
  • docs.mql4.com
ObjectsDeleteAll - Графические объекты - Справочник MQL4
 
Спасибо!
 
Доброго времени знающим mql4. Имеется функция закрывающая часть в процентах самого дальнего убыточного ордера в серии за счет прибыльных позиций любого направления. Очень нужна помощь в доработке этой функции! А именно сделать частичное закрытие всех оставшихся ордеров в серии (за счет прибыльных позиций любого направления) вместо одного дальнего. Заранее Спасибо!
Файлы:
KJH.mq4  8 kb
Причина обращения: