Продолжим серию статей по
программированию на MQL5. На этот раз рассмотрим, как можно получать
результаты по каждому проходу оптимизации во время оптимизации
параметров эксперта. При этом сделаем так, чтобы, если условие-(я), которое-(ые)
будет-(ут) настраиваться во внешних параметрах, исполняется, показатели
этого прохода будут записываться в файл. Кроме показателей тестов будем
сохранять ещё параметры, по которым был получен этот результат.
Для реализации задуманного возьмём уже готового эксперта с простым торговым алгоритмом из статьи
Как устанавливать/модифицировать торговые уровни и не получить ошибку?
и просто добавим туда все необходимые функции. Я подготовил код подобно
тому, как это было сделано в последних статьях. То есть, все функции
распределены по разным файлам и подключены к основному файлу проекта.
Как подключать файлы к проекту можно посмотреть в статье
Использование индикаторов для формирования условий в эксперте.
Чтобы получить доступ к данным во время оптимизации в MQL5 есть специальные функции:
OnTesterInit(),
OnTester(),
OnTesterPass() и
OnTesterDeinit(). Кратко рассмотрим каждую из них:
- - OnTesterInit() - с помощью этой функции определяется начало оптимизации.
- - OnTester()
- в этой функции будет производиться добавление так называемых фреймов
во время оптимизации после каждого прохода. Что такое фреймы будет
объясняться ниже.
- - OnTesterPass() - эта функция принимает фреймы во время оптимизации после каждого прохода.
- - OnTesterDeinit() - в этой функции генерируется событие об окончании оптимизации параметров эксперта.
Теперь нужно разобраться, что такое фреймы. Фрейм это
своего рода структура данных отдельного прохода оптимизации. Фреймы во
время оптимизации сохраняются в архив
*.mqd, который создаётся в каталоге
MetaTrader 5/MQL5/Files/Tester.
К данным (фреймам) этого архива можно обращаться, как во время
оптимизации "на лету", так и после окончания оптимизации. Например, на
сайте mql5.com в статье
Визуализируй стратегию в тестере MetaTrader 5
показан пример того, как можно визуализировать процесс оптимизации "на
лету" и затем включить просмотр всех результатов после оптимизации.