Отправка фреймов данных с агентов в терминал

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, после того как познакомимся с функциями принимающей стороны в следующем разделе.