Контроль процессов оптимизации в реальном режиме времени и передача массивных данных от агентов в MetaTrader 5
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В 619 билде MetaTrader 5 были включены давно анонсированные функции по контролю за процессом оптимизации торговых стратегий.
В первую очередь речь идет о трех новых функциях событий торгового терминала:
Функция предназначена для инициализации эксперта перед началом оптимизации для последующей обработки результатов оптимизации.
OnTesterInit() является обработчиком события TesterInit, которое автоматически генерируется перед началом оптимизации эксперта в тестере стратегий. Эксперт, имеющий обработчик OnTesterDeInit() или OnTesterPass(), при запуске оптимизации автоматически загружается на отдельном графике терминала с указанными в тестере символом и периодом, и получает событие TesterInit.
Функция OnTesterPass() является обработчиком события TesterPass, которое автоматически генерируется при поступлении фрейма во время оптимизации эксперта в тестере стратегий.
Эксперт с обработчиком OnTesterPass() автоматически загружается на отдельном графике терминала с указанными для тестирования символом/периодом и получает во время оптимизации события TesterPass при получении фрейма. Функция предназначена для динамической обработки результатов оптимизации прямо "на лету", не дожидаясь её окончания. Добавление фреймов производится функцией FrameAdd(), которую можно вызывать по окончании одиночного прохода в обработчике OnTester().
Функция OnTesterDeinit() является обработчиком события TesterDeinit, которое автоматически генерируется по окончании оптимизации эксперта в тестере стратегий.
Эксперт с обработчиком TesterDeinit() автоматически загружается на график при запуске оптимизации и получает событие TesterDeinit после её завершения. Функция предназначена для финальной обработки всех результатов оптимизации.
Что это дает разработчикам?
Практически полный контроль над процессами оптимизации, когда в дело вступают самые мощные функции:
На стороне агента добавляет фрейм с любыми типами и объемами данными для передачи их на управляющий терминал, где эти данные можно вычитать с помощью функции FrameNext(). Каждый фрейм имеет встроенные идентификаторы string name и long id, которые удобно использовать для разметки передаваемых данных.
Теперь можно с агентов передавать как целые файлы, так и любые массивы данных. Причем при передаче по сети данные автоматически сжимаются ради экономии трафика.
Устанавливает фильтр чтения фреймов по полям name/id и переводит указатель на начало. Фильтры позволяют легко фильтровать полученные данные от агентов, упрощая тем самым доступ к данным.
Переводит указатель чтения фреймов оптимизации в начало и сбрасывает установленный фильтр.
Читает текущий фрейм и перемещает указатель на следующий. Может вычитывать как чистые фреймы с одиночным результатом в виде double, так и массивы данных. Массивы автоматически ресайзятся под объем полученных данных.
По номеру прохода извлекаются input-параметры, на которых сформирован фрейм.
Ниже представлен демонстрационный пример использования новых возможностей по передаче графических данных с агентов на терминал и рилтайм визуализации этих данных. Запускается оптимизация на 100 проходов, каждый из которых возвращает посчитанную графическую строчку с результатом. На терминале все строки получаются от агентов и в режиме реального времени рисуется прогресс-бар и заполняется целевая расчетная картинка.
Исходный код приложен.
Линк на видео в YouTube: http://youtu.be/lG0cWCNMGqA