Отладка индикатора

 

Недавно в редакторе кода появилась замечательная возможность - "Отладка". Она позволяет по шагам пройтись по коду и посмотреть какие значения принимают переменные.

Отладка советников и скриптов проходит на ура.

Отладка индикатора приводила к подвисанию МТ4, а окно с графиком становилось белым, но при этом можно было пройтись по строчкам кода. Сейчас кнопка отладки для индикатора вовсе недоступна.

Вопрос? 

Возможно у когото есть идея, как нармально провести отладку в индикаторе, что бы при этом видеть окно графика? 

 
Индикатор в отдельное окно выводится? Тогда окно белое из-за заполненности окнами индикатора всего пространства главного окна. Происходит это из-за непрерывного вызова всё новых экземпляров индикатора на график, проверьте,  возможно зацикливание где-то происходит.
 

Индикатор в основном окне.

Точка остановы у меня находится на первой строке в функции OnCalculate.

 

Последовательность действий такая: 

Нажимаю кнопка отладка.

В МТ4 открывается новый график и на него система набрасывает индикатор.

Автоматически открывается окно МетаEditor со стрелочкой на строке кода. те Сработала остановка в режиме отладки.

В этот момент окно МТ4 подвисает. Посмотреть график нельзя.

Могу видео загрузить сюда. 

Может это особенности ХР 32 bit? 

 
dr0:

Автоматически открывается окно МетаEditor со стрелочкой на строке кода. те Сработала остановка в режиме отладки.

В этот момент окно МТ4 подвисает. Посмотреть график нельзя.

Так и должно быть. Вы остановили выполнение индикатора в точке останова. Т.к. в МТ4 выполнение кода индикатора происходит в интерфейсном потоке терминала, то обработка интерфейса терминала прекращается (окно замораживается).
 
antt:
Так и должно быть. Вы остановили выполнение индикатора в точке останова. Т.к. в МТ4 выполнение кода индикатора происходит в интерфейсном потоке терминала, то обработка интерфейса терминала прекращается (окно замораживается).

Это как то можно обойти?

 

Поэтому и создал тему. Возможно есть у кого то идеи как отлаживать индикатор и при этом видеть график.

Было бы удобно например нажимать на кнопочку, и чтоб график обновлялся в соответствие с массивами. 

 

Уважаемый форумчане.

Предлагаю свой вариант отладки индикатора. (Правда есть кое какие ограничений)

 

Мне было необходимо посмотреть как последовательно отрисовывается индикатор с левого конца графика до правого. Так как на каждом новом баре происходят различные изменения, хочется знать значения принимают различные переменные.

Предложенную идею можно развить и доработать до полноценной билиотеки. 

Данный способ отладки происходит не через встроенную возможность МQL4 Editor, а по старинке через поле Comment.

 

Индикатор настроен так что бы с каждым тиком делать расчет по всем барам. Ограничение задается глобальной переменной test_For_Cahrt_Event;

 Таким образом с каждым тиком у нас индикатор будет расчитываться от 1 го бара до бара  test_For_Cahrt_Event

При нажатие на кнопку UP (стрелочка вверх на клавиатуре) индикатор будет заного пересчитываться, только теперь на один бар больше.

Мы в поле Comment можем увидеть значения необходимых нам переменных. 

 

   for(int i=1; i<test_For_Cahrt_Event; i++) //вот так должна выглядить строка перебора по барам при расчете индикатора;

{... код расчета индикатора}

int test_For_Cahrt_Event=2;   //глобальная переменная которая будет отсчитывать количество баров слева.

 void OnChartEvent(const int id,  const long &lparam,const double &dparam,const string &sparam)   //функция которая отрабатывате событие

  {

// 

string name = "Arrr";   //имя для стрелочки, которая визуально показывает до какого бара идет расчет

ObjectDelete(name);

   if(id==CHARTEVENT_KEYDOWN)  //обработка события нажатия кнопки с клавы

     {

      switch(int(lparam))

        {

         case 38: {   //код 38 это кнопка ВВЕРХ

         Comment("Бары  "+test_For_Cahrt_Event);  // в данном поле необходимо вбить те переменные что нам нужно видеть

         test_For_Cahrt_Event++; 

         ObjectCreate(0,name,OBJ_ARROW_DOWN,0,Time[test_For_Cahrt_Event],High[test_For_Cahrt_Event]+300*Point);   

         break;

         }

        }

      ChartRedraw();

     }

  } 

 
Нашел очень изящное решение на одном из форумов. Перед функцией OnCalculate требуется добавить следующий код:
//--->Необходимо для корректной отладки под Win7
class CFix { } ExtFix;
//--->
После этого никаких зависаний при отладке mql4 программ не наблюдается.
 
Попробовал обновление ,которое написали  действительно не каких зависаний нет,рекомендую,но нужно учитывать такой момент ,что может быть или инет или комп сам способствовать зависанию.
 
Задам свой вопрос здесь. А программы mql5 в MetaEditor4 кто-нибудь отлаживать пробовал?
 
Rubick:
Задам свой вопрос здесь. А программы mql5 в MetaEditor4 кто-нибудь отлаживать пробовал?

если скопировать его в папку установки МТ5 то работает. но ведь тот поновее будет - 975 против 966 из поставки МТ4-670
 
evillive:

если скопировать его в папку установки МТ5 то работает. но ведь тот поновее будет - 975 против 966 из поставки МТ4-670

Интересная тема. Попробую.

Но задача стоит такая, чтобы индикатор на mql5 работал под МТ4! И странное дело, я закомментировал строки,  в работе которых сомневаюсь и под МТ5 индикатор не выдает никаких результатов, но этот же самый код под МТ4 дает предварительные результаты, которые должен.