Программирование на MQL II. Как найти ошибку 2
|

Программирование на MQL II. Как найти ошибку 2

Программирование на MQL II. Как найти ошибку, продолжение.


   В прошлом номере журнала (ForexMagazine Апрель 2004, №14) мы рассмотрели один из простейших но, одновременно, и один из полезнейших способов отладки программ – инструкцию языка MQL II print(). Для того чтобы не перегружать материал, ничего не упоминалось об аналогах команды printf(), которые так же позволяют выводить информацию о работе программы. Функция print() печатает в специальное окно Journal программы MetaTrader переданную ей в качестве параметра строку. Команды alert() и comment() могут быть использованы, так же как и print() с той лишь разницей, что они по-другому выводят строк: comment() печатает информацию в левый верхний угол окна с графиком (рисунок 1 стрелка 1), а alert() отображает информацию в отдельно появляющемся диалоговом окне (рисунок 1 стрелка 2).


Alert


 Параметрами для всех трёх функций могут быть любые типы данных разрешенные синтаксисом языка MQL II. Все переменные, переданные в качестве параметров в эти функции, какого бы типа они не были, корректно конвертируются в строки. Рассмотрим на примерах различные варианты.


  


Инструкция Alert(“first parameter = “+100 + ” second parameter = ” + 200); выведет на экран следующий диалог:



   Для того чтобы показывать только дату или только время то используйте TimeToStrEx().


alert 3   До этого момента речь шла об отладке как таковой, но каждый, кто при разработке экспертов пытаться найти ошибки выше предложенными способами, наверняка столкнулся с некоторым неудобством – на экран или в журнал пишется огромное количество информации, с которой позднее не очень удобно работать. Специально для отладки экспертов разработчики MQL II добавили функцию SetDebugMode(). Её назначение – указать MetaTrader’у выводить ли отладочную информацию в окно Journal или перенаправить её в отдельный файл. Так же эта функция может быть использована для контроля над тем, какая информация будет выводиться при отладке. В качестве параметров она принимает три значения: MODE_FILE, MODE_VALUES, MODE_DETAILS.


   Параметр MODE_FILE – заставляет MetaTrader выводить отладочную информацию в отдельный файл, который после завершения работы эксперта будет располагаться в подкаталоге “logs” того каталога, куда установлен MetaTrader. В случае если эксперт с названием “test” прикреплён к часовому графику EURUSD, файл будет называться “testEURUSD60.log”. Подробности о формировании имени файла можно узнать с сайта MetaQuates Software (http://www.metaquotes.ru/advisors/mql.htm смотри описание функции SetDebugMode).


   Параметр MODE_VALUES – заставляет MetaTrader выводить значения всех переменных заведённых в эксперте.


   Параметр MODE_ DETAILS – заставляет MetaTrader выводить дополнительную информацию о работе эксперта: продолжительность, количество инструкций и т.д.


   Кроме того, параметры функции SetDebugMode() можно произвольным образом комбинировать, складывая их друг с другом. Например, можно вызвать эту функцию так SetDebugMode(MODE_FILE + MODE_VALUES) и оба пожелания будут одновременно учтены – значения всех переменных заведённых в эксперте будут сохранены в специальном файле.


   Для того чтобы отменить действия предыдущих вызовов функции SetDebugMode() следует вызвать её с нулём в качестве параметра.


   Напоследок хотелось бы обратить ваше внимание на ещё одну очень мощьную возможность отладки экспертов. Она стоит особняком от вышеизложенных методов, так как не является каким-то програмным “трюком”. То о чём я говорю – это визуализация сделок осуществлённых вашим экспертом. Достаточно во время тестирования эксперта в Strategy Tester’е указать, что вы хотите видеть операции осуществлённые экспертом. Для этого поставьте галочку на “Arrows on the chart” как показано стрелочкой на рисунке 5:



Рис.5


   Перед вами в процессе тестирования прямо на графике, к которому вы прикрепили эксперта, будут появляться символы открытия и закрытия лотов, сверяясь с которыми вы сможете сформировать предварительное мнение о верности работы алгоритма эксперта! Такая возможность сильно экономит время, так как позволяет визуально выявить грубые ошибки не дожидаясь окончания тестирования эксперта.


   Теперь вы имеете всё необходимое для отладки приложений. Поиск ошибок в программах – очень обширная тема, если можно так выразиться, – это целое искусство. Существует легенда, что однажды проблема отладки программ встала перед инженерами одной из исследовательских лабораторий. Они долго бились над неработающей программой, и в итоге выяснили, что сбой был вызван коротким замыканием в электрических цепях компьютера. Маленький жучёк, заползший в компьютер, нарушил его работу, и чуть было не свёл с ума умудрённых опытом инженеров. Английское слово “bug” (жук) дало название процессу поиска неполадок в программе. С тех пор отладку программ и поиск ошибок называют “debug”. Мы уверены, что у каждого из вас с приходом опыта программирования накопятся свои собственные методы извлечения “жучков” из кода. Целью же данного материала было познакомить вас с доступными в языке MQL II методами поиска ошибок.


Александр Иванов
для Forex Magazine