Контроль процессов оптимизации в реальном режиме времени и передача массивных данных от агентов в MetaTrader 5

 

В 619 билде MetaTrader 5 были включены давно анонсированные функции по контролю за процессом оптимизации торговых стратегий.

В первую очередь речь идет о трех новых функциях событий торгового терминала:

  • OnTesterInit

    Функция предназначена для инициализации эксперта перед началом оптимизации для последующей обработки результатов оптимизации.

    OnTesterInit() является обработчиком события TesterInit, которое автоматически генерируется перед началом оптимизации эксперта в тестере стратегий. Эксперт, имеющий обработчик OnTesterDeInit() или OnTesterPass(), при запуске оптимизации автоматически загружается на отдельном графике терминала с указанными в тестере символом и периодом, и получает событие TesterInit.

  • OnTesterPass

    Функция OnTesterPass() является обработчиком события TesterPass, которое автоматически генерируется при поступлении фрейма во время оптимизации эксперта в тестере стратегий.

    Эксперт с обработчиком OnTesterPass() автоматически загружается на отдельном графике терминала с указанными для тестирования символом/периодом и получает во время оптимизации события TesterPass при получении фрейма. Функция предназначена для динамической обработки результатов оптимизации прямо "на лету", не дожидаясь её окончания. Добавление фреймов производится функцией FrameAdd(), которую можно вызывать по окончании одиночного прохода в обработчике OnTester().


  • OnTesterDeinit

    Функция OnTesterDeinit() является обработчиком события TesterDeinit, которое автоматически генерируется по окончании оптимизации эксперта в тестере стратегий.

    Эксперт с обработчиком TesterDeinit() автоматически загружается на график при запуске оптимизации и получает событие TesterDeinit после её завершения. Функция предназначена для финальной обработки всех результатов оптимизации.


Что это дает разработчикам?

Практически полный контроль над процессами оптимизации, когда в дело вступают самые мощные функции:

  • FrameAdd

    На стороне агента добавляет фрейм с любыми типами и объемами данными для передачи их на управляющий терминал, где эти данные можно вычитать с помощью функции FrameNext(). Каждый фрейм имеет встроенные идентификаторы string name и long id, которые удобно использовать для разметки передаваемых данных.

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

  • FrameFilter

    Устанавливает фильтр чтения фреймов по полям name/id и переводит указатель на начало. Фильтры позволяют легко фильтровать полученные данные от агентов, упрощая тем самым доступ к данным.

  • FrameFirst

    Переводит указатель чтения фреймов оптимизации в начало и сбрасывает установленный фильтр.

  • FrameNext

    Читает текущий фрейм и перемещает указатель на следующий. Может вычитывать как чистые фреймы с одиночным результатом в виде double, так и массивы данных. Массивы автоматически ресайзятся под объем полученных данных.

  • FrameInputs

    По номеру прохода извлекаются
    input-параметры, на которых сформирован фрейм.

Ниже представлен демонстрационный пример использования новых возможностей по передаче графических данных с агентов на терминал и рилтайм визуализации этих данных. Запускается оптимизация на 100 проходов, каждый из которых возвращает посчитанную графическую строчку с результатом. На терминале все строки получаются от агентов и в режиме реального времени рисуется прогресс-бар и заполняется целевая расчетная картинка.

Исходный код приложен.




Линк на видео в YouTube: http://youtu.be/lG0cWCNMGqA
Файлы: