从代理向终端发送数据帧
除了标准的财务指标和统计数据之外,MQL5 还提供了一组函数,用于组织传输和处理你自己的(应用的)优化结果。其中一个是 FrameAdd,用于发送来自测试代理的数据。其他函数用于接收终端中的数据。
数据交换格式基于帧。这是一种特殊的内部结构体,EA 交易可以基于简单类型的数组(不包含字符串、类对象或动态数组)或使用具有指定名称的文件(该文件必须首先在代理的沙箱中创建)来填充测试程序。通过多次调用 FrameAdd 函数,EA 交易可以向终端发送一系列帧。帧的数量没有限制。
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 中没有在优化期间以相反方向发送数据的机制。在开始优化之前,EA 交易想要发送给代理的所有数据都必须准备好并可用(以输入参数或由 指令连接的文件形式)。
在下一节我们熟悉了主机的函数之后,我们将探讨一个使用 FrameAdd 的示例。