Визуализация тестирования: график, объекты, индикаторы

Тестер позволяет проводить тестирование двумя различными способами: с визуализацией и без неё. За выбор способа отвечает соответствующая опция на закладке основных настроек тестера.

При включенной визуализации тестер открывает отдельное окно, в котором воспроизводит торговые операции, выводит индикаторы и объекты. Это наглядно, но нужно не всегда, а лишь для программ с пользовательским интерфейсом (например, торговых панелей или управляемых разметкой, сделанной графическими объектами). Для прочих экспертов важно только исполнение алгоритма согласно заложенной стратегии. А это можно проверить и без визуализации, что позволяет существенно ускорить процесс. Кстати говоря, именно в таком режиме делаются тестовые прогоны при оптимизации.

Во время такого "фонового" тестирования и оптимизации не осуществляется построение графических объектов. Поэтому при обращении к свойствам объектов эксперт получит нулевые значения. Таким образом, проверить работу с объектами и графиком можно только при тестировании в визуальном режиме.

Также напомним особенность поведении индикаторов в тестере, о которой уже говорилось в соответствующем разделе Тестирование индикаторов. Для повышения эффективности невизуального тестирования и оптимизации экспертов (использующих индикаторы), индикаторы могут рассчитываться не на каждом тике, а только по запросу данных от них. Пересчет на каждом тике происходит только при наличии в индикаторе функций EventChartCustom, OnChartEvent, OnTimer или директивы tester_everytick_calculate (см. Директивы препроцессора для тестера). В визуальном окне тестера и онлайн индикаторы всегда получают события OnCalculate на каждом тике.

Если тестирование проводится в невизуальном режиме, после его окончания в терминале автоматически открывается график инструмента, на котором отображаются совершенные сделки и индикаторы, которые использовались в эксперте. Это помогает сопоставить моменты входа в рынок и выхода из него со значениями индикаторов. Однако здесь имеются в виду только индикаторы, работающие на символе и таймфрейме тестирования. Если эксперт создавал индикаторы на других символах или таймфреймах, они не будут показаны.

Важно отметить, что индикаторы, отображаемые на графике, автоматически открытом после завершения тестирования, рассчитываются заново уже после окончания тестирования. Это происходит, даже если эти индикаторы использовались в тестируемом эксперте и до этого рассчитывались "на лету" — по мере формирования баров.

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

Функция IndicatorRelease изначально предназначена для освобождения расчетной части индикатора, если он больше не нужен. Это позволяет экономить память и ресурсы процессора. Второе ее предназначение — запретить показ индикатора на графике тестирования после окончания одиночного прогона.

Чтобы запретить показ индикатора на графике по окончании тестирования, достаточно вызвать IndicatorRelease с дескриптором индикатора в обработчике OnDeinit. Функция OnDeinit всегда вызывается в экспертах после завершения и перед показом графика тестирования. В самих индикаторах в тестере не вызывается ни OnDeinit, ни деструкторы глобальных и статических объектов — так решили сделать разработчики MetaTrader 5.

Кроме того, в MQL5 API входит специальная функция с аналогичным назначением TesterHideIndicators, которую мы рассмотрим позднее.

При этом следует учитывать, что на внешнее представление графика тестирования дополнительно могут влиять tpl-шаблоны (если они созданы).

Так при наличии шаблона tester.tpl в каталоге MQL5/Profiles/Templates, именно он будет применен к открываемому графику. Если эксперт в своей работе использовал другие индикаторы и не запретил их показ, то на графике будут объединены индикаторы из шаблона и из эксперта.

При отсутствии tester.tpl применяется шаблон по умолчанию (default.tpl).

Если в папке MQL5/Profiles/Templates присутствует tpl-шаблон с названием, совпадающим с именем эксперта (например, ExpertMACD.tpl), то при визуальном тестировании или на графике, открываемом после тестирования, будут показаны только индикаторы из данного шаблона. В этом случае никакие индикаторы, используемые в тестируемом эксперте, показаны не будут.