打开和关闭计时器:EventSetTimer/EventKillTimer

MQL5 允许启用或禁用标准计时器以执行任何预定操作。为此提供了两个函数:EventSetTimerEventKillTimer

bool EventSetTimer(int seconds)

该函数向客户端终端表明,对于此 EA 交易或指标,需要根据指定频率通过计时器生成事件,频率以秒为单位设置(参数为 seconds)。

该函数返回操作状态标识:成功(true)或失败(false)。错误代码可从 _LastError中获取。

为了处理计时器事件,EA 交易或指标的代码中必须包含 OnTimer 函数。第一次计时器事件不会在调用 EventSetTimer后立即发生,而是在经过 seconds 秒后发生。

对于每个调用EventSetTimer函数的 EA 交易或指标,它会创建自己的专用计时器。程序将仅接收来自该计时器的事件。不同程序中的计时器独立工作。

放置在图表上的每个交互式 MQL 程序都有一个独立的事件队列,收到的相关事件会被添加到该队列中。如果队列中已经有一个 OnTimer事件,或者正在处理该事件,则新的 OnTimer 事件不会被加入队列。

如果不再需要计时器,应使用 EventKillTimer函数将其禁用。

void EventKillTimer(void)

该函数用于停止此前通过 EventSetTimer(或即将讨论的 EventSetMillisecondTimer函数)启用的计时器。该函数也可以从OnTimer处理程序中调用。因此具体而言,可以执行一个延迟的单次操作。

在指标中调用 EventKillTimer函数不会清空队列,因此之后你仍可能收到最后一个残留的 OnTimer 事件。

当 MQL 程序终止时,如果计时器已被创建但未通过 EventKillTimer函数禁用,则该计时器将被强制销毁。

每个程序只能设置一个计时器。因此,如果你想以不同时间间隔调用算法的不同部分,应启用一个周期为所需周期最小公倍数的计时器(在极限情况下,最小周期为 1 秒),并在OnTimer处理程序中独立跟踪较长的周期。我们将在下一节中探讨该方法的示例。

MQL5 还允许创建周期小于 1 秒的计时器:为此提供了一个函数 EventSetMillisecondTimer