按类型跟踪事件变化

借助 MQL5 API,你不仅可以请求整个日历或按国家/地区或货币的近期变更,还可以在更窄的范围内,或者更确切地说,针对特定类型事件发出请求。

理论上,我们可以说内置函数根据几个基本条件(时间、国家、货币或事件类型)提供事件筛选。对于其他特性,例如重要性或经济板块,你需要实现自己的筛选,我们稍后会处理这个问题。现在,我们介绍 CalendarValueLastByEvent 函数。

int CalendarValueLastByEvent(ulong id, ulong &change_id, MqlCalendarValue &values[])

该函数用自 change_id 以来发生的、具有 id 标识符的特定类型事件的记录来填充通过引用传递的 values 数组。这个 change_id 参数既是输入也是输出:调用代码在其中传递日历过去状态的标签(在此之后请求变更),在交回控制权后,函数会将日历数据库状态的当前标签写入 change_id。下次调用该函数时应使用这个参数。

如果在 change_id 中传递 null,则函数不填充数组,而只是通过参数 change_id 发送数据库的当前状态。

该数组可以是动态的(在这种情况下,将根据数据量自动调整)或固定大小的(如果其大小不足,则仅复制适合的数据)。

函数的输出值等于复制到 values 数组中的元素数量。如果没有变更或指定了 change_id = 0,则函数将返回 0。

要检查错误,请分析内置的 _LastError 变量。以下列出了一些可能的错误代码:

  • 4004 - ERR_NOT_ENOUGH_MEMORY(内存不足,无法完成请求),
  • 5401 - ERR_CALENDAR_TIMEOUT(请求超时),
  • 5400 - ERR_CALENDAR_MORE_DATA(固定数组的大小不足以获取所有值)。

我们不会为 CalendarValueLastByEvent 提供单独的示例。相反,让我们转向一个更复杂但需求量更大的任务:根据新闻特性的任意条件查询和筛选日历条目,其中将涉及所有“日历”API 函数。这将是下一节的主题。