测试程序中的时间管理:计时器、睡眠和 GMT
在开发 EA 交易时,应考虑到测试程序有一些基于 生成的分时报价 和时间相关函数的操作来模拟时间流逝的细节。
测试时,根据 TimeTradeServer,TimeLocal 函数返回的本地时间始终等于服务器时间。反过来,服务器时间总是等于 GMT TimeGMT。因此,测试时,所有这些函数给出相同的时间。这是该平台的一个技术特性,这是因为其决定不在本地存储关于服务器时间的信息,而是总是从服务器获取,在特定时刻可能与服务器没有关系的信息。
这一特性给实施与全球时间有关的策略造成了困难,特别是在新闻发布方面。在这种情况下,有必要在被测试的 EA 交易设置中指定报价的时区,或者发明自动检测时区的方法(参见 夏令时一节)。
现在我们来看看其他与时间相关的函数。
众所周知,在 MQL5 中可以处理计时器事件。无论测试模式如何, OnTimer 处理程序都会被调用。这意味着,如果在 H4 时段以“仅开盘价”模式启动测试,并且在 EA 交易中设置了计时器,每秒钟有一次调用,那么 OnTick 处理程序将在每个 H4 柱线打开时被调用一次,然后,在柱线内,OnTimer 处理程序将被调用 14400 次(3600 秒乘以 4小时)。在这种情况下,EA 交易测试时间增加的程度取决于其算法。
另一个影响程序时间进程的函数是 Sleep 函数。该函数允许你将 EA 交易的执行暂停一段时间。请求任何在请求时尚未准备好的数据时,这可能是必要的,并且必须等待直到该数据准备好。
理解 Sleep 只会影响其调用程序,而不会延迟测试过程,这一点很重要。事实上,当调用 Sleep 时,生成的分时报价会在指定的延迟内“播放”,其结果是挂单、止损水平等均会被触发。调用 Sleep 后,测试程序中模拟的时间会增加函数参数中指定的间隔。
稍后,在 测试多币种 EA 交易一节,我们将展示如何使用计时器和 Sleep 函数来同步柱线。