- Генерация тиков в тестере
- Управление ходом времени в тестере: таймер, Sleep, GMT
- Визуализация тестирования: график, объекты, индикаторы
- Мультивалютное тестирование
- Критерии оптимизации
- Получение финансовых показателей теста: TesterStatistics
- Событие OnTester
- Авто-настройка: ParameterGetRange и ParameterSetRange
- Группа OnTester-событий для контроля оптимизации
- Отправка фреймов данных с агентов в терминал
- Получение фреймов данных в терминале
- Директивы препроцессора для тестера
- Управление видимостью индикаторов: TesterHideIndicators
- Эмуляция пополнения депозита и снятия средств
- Принудительная остановка тестирования: TesterStop
- Большой пример эксперта
- Математические вычисления
- Отладка и профилирование
- Ограничения работы функций в тестере
Тестирование и оптимизация экспертов
Разработка экспертов подразумевает не только и не столько реализацию торговой стратегии на 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-программ в тестере, а затем на практике изучим способы взаимодействия с ним.