Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь стать известным разработчиком? Выполняй заказы трейдеров в сервисе Фриланс!
Michail Smikov
167
Michail Smikov 2014.07.23 11:47 

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

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

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

Вопрос? 

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

Vitalie Postolache
12115
Vitalie Postolache 2014.07.23 13:09  
Индикатор в отдельное окно выводится? Тогда окно белое из-за заполненности окнами индикатора всего пространства главного окна. Происходит это из-за непрерывного вызова всё новых экземпляров индикатора на график, проверьте,  возможно зацикливание где-то происходит.
Michail Smikov
167
Michail Smikov 2014.07.24 10:50  

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

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

 

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

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

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

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

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

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

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

Anton
1846
Anton 2014.07.24 12:11  
dr0:

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

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

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

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

 

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

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

Michail Smikov
167
Michail Smikov 2014.07.29 13:47  

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

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

 

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

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

Данный способ отладки происходит не через встроенную возможность М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
1466
Pavel Trofimov 2014.08.04 10:27  
Нашел очень изящное решение на одном из форумов. Перед функцией OnCalculate требуется добавить следующий код:
//--->Необходимо для корректной отладки под Win7
class CFix { } ExtFix;
//--->
После этого никаких зависаний при отладке mql4 программ не наблюдается.
Dmitro
31
Dmitro 2014.08.04 12:43  
Попробовал обновление ,которое написали  действительно не каких зависаний нет,рекомендую,но нужно учитывать такой момент ,что может быть или инет или комп сам способствовать зависанию.
Pavel Trofimov
1466
Pavel Trofimov 2014.08.04 14:45  
Задам свой вопрос здесь. А программы mql5 в MetaEditor4 кто-нибудь отлаживать пробовал?
Vitalie Postolache
12115
Vitalie Postolache 2014.08.04 20:05  
Rubick:
Задам свой вопрос здесь. А программы mql5 в MetaEditor4 кто-нибудь отлаживать пробовал?

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

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

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

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

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