检查交易品种数据相关性
由于采用了分布式客户端/服务器架构,客户端和服务器数据可能偶尔会有所不同。例如,在终端会话开始后,当连接丢失时或者当计算机资源负载过重时,可能会立即数据不同的情况。此外,该交易品种在添加到市场报价后,很可能会在一段时间内保持不同步。MQL5 API 允许你使用函数 SymbolIsSynchronized 来检查特定交易品种报价数据的相关性。
bool SymbolIsSynchronized (const string name)
如果名为 name 的交易品种的本地数据与交易服务器上的数据同步,则该函数返回 true。
在 获取价格数组的特征一节中,除了其他特性外,还介绍了 SERIES_SYNCHRONIZED 的特性,该特性返回一个含义较窄的同步特性:它适用于交易品种和时间范围的特定组合。与此特性相反,函数 SymbolIsSynchronized 可返回交易品种一般历史的同步属性。
所有时间范围的构建仅在历史下载完成后开始。由于终端中的多线程架构和并行计算,可能会发生 SymbolIsSynchronized 返回 true,并且对于同一交易品种的时间范围,SERIES_SYNCHRONIZED 特性将暂时为 false。
让我们来看看 SymbolListSync.mq5 指标中的新函数是如何工作的。它旨在定期检查 Market Watch 的所有交易品种是否同步。检查周期由用户在参数 SyncCheckupPeriod 中进行设置,以秒为单位。它可导致 OnInit 中的计时器启动。
#property indicator_chart_window
|
在 OnTimer 处理程序中,在一个循环内,我们调用 SymbolIsSynchronized 并将所有未同步交易品种收集到一个公共字符串内,之后它们会显示在注释和日志中。
void OnTimer()
|
例如,如果我们将一些先前缺失的交易品种 (Brent) 添加到 Market Watch 中,我们会得到如下条目:
Unsynced symbols:
|
正常情况下,大多数时候(当指标运行时),日志中应没有此类消息。但是,在通信出现问题时,可能会生成海量警报。