- Получение общего списка свойств терминала и программы
- Номер сборки терминала
- Тип и лицензия программы
- Режимы работы терминала и программы
- Разрешения
- Проверка сетевых подключений
- Вычислительные ресурсы: память, диск, процессор
- Характеристики экрана
- Строковые свойства терминала и программы
- Настраиваемые свойства: лимит баров и язык интерфейса
- Привязка программы к свойствам среды исполнения
- Проверка состояния клавиатуры
- Проверка статуса и причины остановки MQL-программы
- Программное закрытие терминала и код возврата
- Обработка ошибок времени исполнения программы
- Пользовательские ошибки
- Управление отладкой
- Предопределенные переменные
- Предопределенные константы языка MQL5
Режимы работы терминала и программы
Среда MetaTrader 5 обеспечивает решение различных задач на стыке трейдинга и программирования, что обуславливает необходимость нескольких режимов работы как самого терминала, так и конкретной программы.
С помощью MQL5 API можно отличить штатную деятельность онлайн от тестирования на истории, отладку исходного кода (с целью выявления потенциальных ошибок) от анализа быстродействия (поиска "узких мест" в коде), а также локальную копию терминала от облачной (MetaTrader VPS).
Всё это описывается несколькими флагами, каждый из которых содержит значение логического типа: true или false.
Идентификатор |
Описание |
---|---|
MQL_DEBUG |
программа работает в режиме отладки |
MQL_PROFILER |
программа работает в режиме профилирования кода |
MQL_TESTER |
программа работает в тестере |
MQL_FORWARD |
программа выполняется в процессе форвардного тестирования |
MQL_OPTIMIZATION |
программа выполняется в процессе оптимизации |
MQL_VISUAL_MODE |
программа выполняется в режиме визуального тестирования |
MQL_FRAME_MODE |
эксперт выполняется на графике в режиме сбора фреймов результатов оптимизации |
TERMINAL_VPS |
терминал работает на виртуальном сервере MetaTrader Virtual Hosting (MetaTrader VPS) |
Флаги MQL_FORWARD, MQL_OPTIMIZATION, MQL_VISUAL_MODE подразумевают наличие взведенного флага MQL_TESTER.
Некоторые попарные сочетания флагов являются взаимоисключающими, то есть такие флаги не могут быть включены одновременно.
В частности, наличие MQL_FRAME_MODE исключает MQL_TESTER, и наоборот. MQL_OPTIMIZATION исключает MQL_VISUAL_MODE, а MQL_PROFILER исключает MQL_DEBUG.
Все флаги, относящиеся к тестированию (MQL_TESTER, MQL_VISUAL_MODE), мы изучим в разделах, посвященных экспертам и, отчасти, индикаторам. Все, что касается оптимизации экспертов (MQL_OPTIMIZATION, MQL_FORWARD, MQL_FRAME_MODE), будет освещено в отдельном разделе.
Сейчас познакомимся с принципами чтения флагов на примере режимов отладки (MQL_DEBUG) и профилирования (MQL_PROFILER). Заодно вспомним, как данные режимы активируются из редактора MetaEditor (подробности смотрите в документации, а разделах Отладка и Профилирование).
Для этой цели подготовлен скрипт EnvMode.mq5.
void OnStart()
|
Прежде чем запускать программу, следует проверить настройки для отладки/профилирования. Для этого выполните в MetaEditor команду Сервис -> Настройки и посмотрите значения полей на закладке Отладка/Профилирование. Если включена опция Использовать указанные настройки, то именно значения нижележащих полей будут влиять на то, на графике какого финансового инструмента и с каким таймфреймом будет запускаться программа. Если опция отключена, будет использован первый финансовый инструмент в Обзоре рынка и таймфрейм H1.
На данном этапе выбор опции не принципиален.
После приготовлений запустим скрипт с помощью команды Отладка -> Начать на реальных данных (F5). Поскольку скрипт только выводит запрошенные свойства в журнал (и нам не нужны в нем точки остановки), его исполнение будет моментальным. При необходимости пошаговой отладки мы могли бы поставить точку остановки (F9) на любой инструкции в исходном коде, и выполнение скрипта замерло бы там на любой нужный нам срок, давая возможность изучить содержание всех переменных в MetaEditor, а также построчно продвигаться (F10) по алгоритму.
В журнале MetaTrader 5 (закладка Эксперты) мы должны увидеть следующее:
MQLInfoInteger(MQL_TESTER)=0 / ok
|
Флаги всех режимов сброшены, за исключением MQL_DEBUG.
Теперь запустим тот же скрипт из Навигатора в MetaTrader 5 (достаточно перетащить его мышью на любой график). Мы получим почти идентичный набор флагов, но MQL_DEBUG на этот раз будет равен 0 (потому что программа выполнялась штатным образом, а не под отладчиком).
Обратите внимание, что запуск программы с отладкой предваряется её перекомпиляцией в особом режиме, когда в выполняемый файл добавляется служебная информация, позволяющая проводить отладку. Такой бинарный файл больше по размеру и работает медленнее обычного. Поэтому после завершения отладки, перед использованием в реальной торговле, передачей заказчику или загрузкой в Маркет, программу следует перекомпилировать командой Файл -> Компилировать (F7).
Метод компиляции не влияет напрямую на свойство MQL_DEBUG. Отладочная версия программы, как мы видим, может быть запущена в терминале без отладчика, и MQL_DEBUG в этом случае будет сброшен. Определить способ компиляции позволяют два встроенных макроса: _DEBUG и _RELEASE (см. раздел Предопределенные константы). Они являются константами, а не функциями, потому что данное свойство "зашивается" в программу на стадии компиляции и затем не может измениться (в отличие от среды исполнения).
Теперь выполним в MetaEditor команду Отладка -> Начать профилирование на реальных данных. Особого смысла профилировать столь простой скрипт, разумеется, нет, но наша задача сейчас — убедиться в том, что в свойствах среды включится соответствующий флаг. И действительно, против MQL_PROFILER теперь стоит единица.
MQLInfoInteger(MQL_TESTER)=0 / ok
|
Запуск программы с профилированием также предваряется её перекомпиляцией в другом особом режиме, добавляющем в бинарный файл другую служебную информацию, необходимую для замера скорости выполнения инструкций. После анализа отчета профилировщика и исправления "узких мест" следует перекомпилировать программу обычным образом.
В принципе отладка и профилирование могут выполняться как онлайн, так и в тестере (MQL_TESTER) на исторических данных, однако тестер поддерживает лишь эксперты и индикаторы. Поэтому на примере скрипта невозможно увидеть взведенный флаг MQL_TESTER или MQL_VISUAL_MODE.
Как известно, MetaTrader 5 позволяет тестировать торговые программы в быстром режиме (без графика) и в визуальном режиме (на отдельном графике). Именно во втором случае и будет включено свойства MQL_VISUAL_MODE. Его имеет смысл проверять, в частности, для отключения манипуляций с графическими объектами в отсутствии визуализации.
Для отладки на истории в визуальном режиме необходимо предварительно включить опцию Использовать визуальный режим для отладки на истории в диалоге настроек MetaEditor. Аналитические программы (индикаторы) тестируются всегда в визуальном режиме.
Имейте в виду, что отладка онлайн небезопасна для торгующих экспертов.