Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Michail Smikov
187
Michail Smikov  

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

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

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

Вопрос? 

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

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

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

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

 

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

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

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

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

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

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

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

Anton
1868
Anton  
dr0:

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

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

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

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

 

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

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

Michail Smikov
187
Michail Smikov  

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

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

 

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

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

Данный способ отладки происходит не через встроенную возможность М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();

     }

  } 

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

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

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

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

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

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