Отладка и дебаг советников

 

Всем привет! В MQL я новичок.

Не могу разобраться как отлаживать свои советники и другие скрипты. Дело в том, что при запуске отладки, советник прилепляется к указанной паре и данные поступают в реальном времени. Ждать отлаживаемое событие, которое произойдет в лучшем случае раз в день, с вылупленными глазами не реально, что делать? Можно ли как-то запустить режим отладки в тесте на исторических данных? Как это делается?

 
Bonifacy:

Всем привет! В MQL я новичок.

Не могу разобраться как отлаживать свои советники и другие скрипты. Дело в том, что при запуске отладки, советник прилепляется к указанной паре и данные поступают в реальном времени. Ждать отлаживаемое событие, которое произойдет в лучшем случае раз в день, с вылупленными глазами не реально, что делать? Можно ли как-то запустить режим отладки в тесте на исторических данных? Как это делается?

Насколько я знаю, нет - нельзя. Жду сей фичи несколько лет с самого момента появления отладчика.
 
marketeer:
Насколько я знаю, нет - нельзя. Жду сей фичи несколько лет с самого момента появления отладчика.
А как вообще тогда отлаживать? Как отладить события OnTester Init Pass и Deinit?
 
Bonifacy:
А как вообще тогда отлаживать? Как отладить события OnTester Init Pass и Deinit?
Используйте
Print

А вообще есть хорошая статья на тему отладки программного кода на MQL5

https://www.mql5.com/ru/articles/654

Отладка программ на MQL5
Отладка программ на MQL5
  • 2013.03.01
  • Nikolay Demko
  • www.mql5.com
Эта статья ориентирована в первую очередь на программистов, которые уже изучили язык, но еще недостаточно освоились в разработке программ. Статья раскрывает практические приемы отладки программ и является объединенным опытом, не только моим, но и многих программистов, на опыте которых я учился.
 
artamir:
Используйте

А вообще есть хорошая статья на тему отладки программного кода на MQL5

https://www.mql5.com/ru/articles/654

Спасибо за ответ! эту статью я вчера нашел сразу. Но так отлаживать я не хочу :))) Функцию Print для отладки в последний раз я использовал еще в школе в 9 классе когда прогали на Квик Бесике, с тех пор прошло 14 лет =)

Реально подумываю написать просто скрипт который будет записывать бинарный файл с историческими данными, и написать тестер и робота на дельфях. проверять через собственную прогу. 

 
Bonifacy:

Спасибо за ответ! эту статью я вчера нашел сразу. Но так отлаживать я не хочу :))) Функцию Print для отладки в последний раз я использовал еще в школе в 9 классе когда прогали на Квик Бесике, с тех пор прошло 14 лет =)

Реально подумываю написать просто скрипт который будет записывать бинарный файл с историческими данными, и написать тестер и робота на дельфях. проверять через собственную прогу. 

Все таки быстрее будет отладка через Print :) А в принципе можно написать свой логер и использовать его.

Для отладки mql4 до 509 билда я пользовался функцией:

void BP(string  txt     = "",
                string  p11     = "",           string p12      = "",
                string  p21     = "",           string p22      = "", 
                string  p31     = "",           string p32      = "",
                string  p41     = "",           string p42      = "",
                string  p51     = "",           string p52      = "",
                string  p61 = "",               string p62      = "",
                string  p71 = "",               string p72      = "",
                bool    useDebug = true                                 ){
                
                /*
                >Ver    :       0.0.4
                >Date   :       2013.04.25
                >History:       
                                        @0.0.4@2013.04.25@artamir       []      BP
                        @0.0.3@2012.10.08@artamir       []
                        @0.0.2@2012.06.25@artamir       [+]     useDebug = проверка на разрешение вызова модальной формы
                        @0.0.1@2012.06.25@artamir       [] 
                >Description:
                        Break poinT_ Use with vizualization.
                */
                
                //--------------------------------------------------
                if(!useDebug) return;
                
                //--------------------------------------------------
                //if(!Debug) return;
                
                //--------------------------------------------------
                string strOutput = StringConcatenate(   p11,p12,"\n",
                                                                                                p21,p22,"\n",
                                                                                                p31,p32,"\n",
                                                                                                p41,p42,"\n",
                                                                                                p51,p52,"\n",
                                                                                                p61,p62,"\n",
                                                                                                p71,p72,"\n");
                                                                                                
                static int      flOK = 1;
                if(flOK == 1){
                        flOK = MessageBoxA(WindowHandle(Symbol(),0), strOutput, txt, MB_OKCANCEL);
                        return;
                }else{
                        return;
                }
}


Но она требует включения в код WinUser32.mqh и разрешения вызова функций dll в терминале.



 
artamir:

Но она требует включения в код WinUser32.mqh и разрешения вызова функций dll в терминале.

Да, я так и понял. Спасибо за совет.
 
Bonifacy:
Да, я так и понял. Спасибо за совет.
Я как-то начинал такую фигню делать (https://www.mql5.com/ru/code/9151), но забросил, наивно полагая, что вот-вот будет нормальный отладчик. Кроме того, сама по себе идея ущербная - пытаться ваять вещи на уровне ядра МТ вместо самих МК. Сизифов труд.
Точка остановки, пауза и прогресс-индикатор
Точка остановки, пауза и прогресс-индикатор
  • голосов: 1
  • 2009.08.26
  • Stanislav Korotky
  • www.mql5.com
Библиотека содержит 3 простых функции для отладки и контроля за ходом выполнения MQL4.
 
marketeer:
Я как-то начинал такую фигню делать (https://www.mql5.com/ru/code/9151), но забросил, наивно полагая, что вот-вот будет нормальный отладчик. Кроме того, сама по себе идея ущербная - пытаться ваять вещи на уровне ядра МТ вместо самих МК. Сизифов труд.

Да, я и говорю отладчик в MQL это дебилизм какой-то, что он есть, что его нет... "используй Print" - единственный способ отладки. Думаю делать так:

1) Скриптом выгружать историю в файлы; 

2) Писать стратегии на Delphi и оборачивать их в DLL;

3) Написать тестер и проводить оптимизацию используя выгруженные файлы;

4) Через советника в событии OnTick вызывать стратегию.

 

TO Разработчикам MQL Тут сразу вопрос будет как быстро выполняется вызов пустой (без кода) функции из DLL из события OnTick?

Причина обращения: