Тестирование и оптимизация экспертов

Разработка экспертов подразумевает не только и не столько реализацию торговой стратегии на MQL5, а в большей степени — тестирование её финансовых показателей, нахождение оптимальных настроек и отладку (поиск и исправление ошибок) в различных ситуациях. Все это позволяет делать штатный тестер MetaTrader 5.

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

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

Ранее мы вскользь уже касались работы с тестером, в частности в разделе Тестирование индикаторов. Напомним, что индикаторам недоступны функции управления тестером и также их оптимизация, в отличие от экспертов. Хотя лично я хотел бы видеть опцию адаптивной самонастройки индикаторов — для этого достаточно поддержать в них обработчик OnTester, который мы представим в отдельном разделе.

Как известно, для оптимизации доступны различные режимы: прямой перебор сочетаний входных параметров эксперта, ускоренный генетический алгоритм, математические расчеты или последовательные прогоны по символам в Обзоре рынка. В качестве критерия оптимизации можно использовать как известные показатели вроде прибыльности, коэффициента Шарпа, фактора восстановления, матожидания выигрыша, так и "пользовательские", заложенные в исходный код разработчиком эксперта. В контексте данной книги предполагается, что читатель уже знаком с принципами настройки, запуска и интерпретации результатов оптимизации, потому что в данной главе мы начнем изучать программное API управления тестером. Желающие могут освежить свои знания в соответствующем разделе справки.

Особенно важная функция тестера — многопоточная оптимизация, которую можно выполнять с привлечением локальных и распределенных (сетевых) программ-агентов, в том числе и в MQL5 Cloud Network. Единичный прогон тестирования (с конкретными входными параметрами эксперта), запущенный пользователем вручную, или один из множества прогонов, вызванных оптимизацией (когда делается перебор значений параметров в заданных диапазонах) производится в отдельной программе — агенте. Технически — это файл metatester64.exe, и копии его процессов можно увидеть в диспетчере задач Windows во время тестирования и оптимизации. Именно за счет этого тестер является многопоточным.

Терминал является диспетчером, который раздает задачи локальным и удаленным агентам. Локальные агенты он запускает при необходимости сам. При оптимизации по умолчанию запускается несколько агентов — их количество соответствует количеству ядер процессора. После выполнения очередного задания по тестированию советника с заданными параметрами агент возвращает терминалу результаты.

В каждом агенте создается свое собственное торговое и программное окружение. Все агенты изолированы друг от друга и от клиентского терминала.

В частности, у агента свои глобальные переменные и собственная файловая песочница, включая и папку, в которую записываются подробные логи агента — Tester/Agent-IPaddress-Port/Logs. Здесь Tester — каталог установки тестера (при стандартной установке вместе с MetaTrader 5 это подпапка, куда установлен терминал). В имени каталога Agent-IPaddress-Port вместо IPaddress и Port будут указаны конкретные значения сетевого адреса и порта, которые используются для обмена данными с терминалом. Для локальных агентов это адрес 127.0.0.1 и диапазон портов, по умолчанию, начиная с 3000 (например, на компьютере с 4-мя ядрами мы увидим агенты на портах 3000, 3001, 3002, 3003).

Напомним, что все файловые операции при тестировании эксперта происходят в папке Tester/Agent-IPaddress-Port/MQL5/Files. Однако можно реализовать взаимодействие между локальными агентами и клиентским терминалом (а также между разными копиями терминала на одном компьютере) через общую папку — для этого при открытии файла функцией FileOpen следует указать флаг FILE_COMMON. Другой способ передачи данных с агентов в терминал предоставляет механизм фреймов.

Локальная песочница агента автоматически очищается перед каждым тестом из соображений безопасности (чтобы разные эксперты не могли читать данные друг друга).

Рядом с файловой песочницей для каждого агента создается папка с историей котировок — Tester/Agent-IPaddress-Port/bases/ServerName/Symbol/. В следующем разделе мы вкратце напомним, как она формируется.

Результаты отдельных тестовых прогонов и оптимизаций сохраняются терминалом в особом кэше — в каталоге установки, в подпапке Tester/cache/. Результаты тестов хранятся в файлах с расширением tst, а результаты оптимизаций — в opt-файлах. Оба формата открыты разработчиками MetaQuotes, поэтому вы можете реализовать собственную пакетную аналитическую обработку данных или воспользоваться готовыми исходными кодами из кодовой базы на сайте mql5.com.

В данной главе мы сначала рассмотрим основные принципы работы MQL-программ в тестере, а затем на практике изучим способы взаимодействия с ним.