- Генерация тиков в тестере
- Управление ходом времени в тестере: таймер, Sleep, GMT
- Визуализация тестирования: график, объекты, индикаторы
- Мультивалютное тестирование
- Критерии оптимизации
- Получение финансовых показателей теста: TesterStatistics
- Событие OnTester
- Авто-настройка: ParameterGetRange и ParameterSetRange
- Группа OnTester-событий для контроля оптимизации
- Отправка фреймов данных с агентов в терминал
- Получение фреймов данных в терминале
- Директивы препроцессора для тестера
- Управление видимостью индикаторов: TesterHideIndicators
- Эмуляция пополнения депозита и снятия средств
- Принудительная остановка тестирования: TesterStop
- Большой пример эксперта
- Математические вычисления
- Отладка и профилирование
- Ограничения работы функций в тестере
Отправка фреймов данных с агентов в терминал
MQL5 предоставляет группу функций для организации передачи и обработки собственных (прикладных) результатов оптимизации, в дополнение к стандартным финансовым показателям и статистике. Одна из этих — FrameAdd — предназначена для отправки данных с агентов тестирования, а остальные — для приема данных в терминале.
Формат обмена данными построен на так называемых фреймах (или кадрах). Это специальная внутренняя структура, которую эксперт в тестере может заполнить из массива простого типа (который не содержит строк, объектов классов или динамических массивов) или из файла с указанным именем (файл предварительно должен быть создан в "песочнице" агента). С помощью многократного вызова функции FrameAdd эксперт может посылать в терминал серию фреймов. Ограничений на количество фреймов нет.
Существует 2 варианта функции FrameAdd.
bool FrameAdd(const string name, ulong id, double value, const string filename)
bool FrameAdd(const string name, ulong id, double value, const void &data[])
Функция добавляет фрейм с данными в буфер для отправки на терминал. Параметры name и id представляют собой публичные метки, которые могут использоваться для фильтрации фреймов в функции FrameFilter. Параметр value позволяет передать произвольное числовое значение, которое можно задействовать, когда одного значения достаточно. Более объемные данные указываются либо в массиве data (может быть и массивом простых структур), либо в файле с именем filename.
Если объемных данных для передачи нет (например, нужно передать только статус процесса), используйте первую форму функции и вместо строки с именем файла укажите NULL, или вторую форму с фиктивным массивом нулевого размера.
Функция возвращает true в случае успеха.
Функцию можно вызывать только в обработчике OnTester.
Функция не имеет эффекта при вызове во время простого теста, то есть вне оптимизации.
Отправлять данные можно только из агентов в терминал. В MQL5 нет механизмов для пересылки данных в обратном направлении в ходе оптимизации. Все данные, которые эксперт желает переслать на агенты, должны быть подготовлены и доступны (в виде входных параметров или файлов, подключенных директивами) перед началом оптимизации.
Мы рассмотрим пример использования FrameAdd, после того как познакомимся с функциями принимающей стороны в следующем разделе.