这是算法书籍 中介绍的CalendarForDates.mq5 脚本的扩展版本。
输入变量允许您指定国家代码、当前代码和时间范围,以筛选所需的记录。如果输入为空,则可以请求完整的日历(如果在终端启动后首次请求日历,则下载其基础信息可能需要一段时间,甚至会超时而没有结果--这时请再次运行脚本)。
因此,您将得到一个 CSV 文件,其中包含日历记录和最重要的字段(并非所有字段都会导出--请根据自己的需要调整源代码)。
还可以选择输入*.cal 文件(特定时间的日历存档副本),该文件由书中介绍的 指示器CalendarMonitorCached.mq5 创建,现在已经过时,取而代之的是其扩展版本CalendarMonitorCachedTZ.mq5(推荐使用,也是下一步介绍的新功能所必需的)。
最有趣的功能:脚本演示了如何使用TimeServerDST.mqh 根据服务器过去的时区变化调整历史事件的时间戳,这些变化会持续反映在蜡烛的时间戳中。将 "FixCachedTimesBySymbolHistory " 输入设置为"true " 即可启用该模式。
将修正和未修正的事件保存到 CSV 文件中,可以方便地比较时间修正对历史记录的影响。
为正确使用该功能,建议在 XAUUSD 或 EURUSD H1 图表上运行脚本。编程使用时,应将这些符号传递给TimeServerDST 的函数。
在指标CalendarMonitorCachedTZ.mq5 中也使用了同样的方法,将经过时间校正的日历事件导出到存档的 cal 文件中,以便从测试器内部加载,从而确保新闻机器人的精确回溯测试和优化。
执行时间校正的日期范围仅限于 H1 时帧图表上的最大条数。这就是TimeServerDST.mqh 中使用的经验方法的特殊性。
让我们考虑一个特定的事件类型,最好是对市场有重大影响的事件,如美国非农就业数据(NFP)的发布。
在使用 DST 计划的欧洲服务器(MQ 演示)上,冬季的时间是 14:30,夏季的时间是 15:30。在下面的截图中,您可以并排看到导出为 CSV 文件的完整日历历史的两个版本,其中特定的夏季日期为 2023.08.04。两次导出都是在 11 月 8 日(冬季,标准时间)进行的,因此所有事件都默认应用了 GMT+2 偏移,包括 2023 年夏季(以及其他季节和年份)。在未进行校正的情况下(如右图所示),导出的夏季 NFP 时间为 14:30。这是不正确的。
根据经验自动检测服务器的时区(夏季时区有效)后,程序库在导出日历时进行了时间校正(如左图所示)。因此,夏季 NFP 被移到了 15:30,这是应该的。您可以查看这一时期的图表,以确保校正是适当的。

这种具体情况并不那么戏剧化,因为未修正的公布时间 14:30 在 15:30 之前,所以专家顾问可以继续等待消息并开仓交易。但是当服务器时区切换到夏季时,日历中登记的所有冬季事件的时间戳都会延迟 1 小时(!)。
该功能仍处于试验阶段。欢迎提出反馈意见。
我们计划进一步研究时间修正对新闻交易的影响。敬请期待。
所附的 mqh 文件(CalendarFilter.mqh、CalendarCache.mqh、QuickSortStructT(Ref).mqh)包含与书中原始版本相比的错误修正和改进。
04.10.2024 - 在 cal 文件和 csv 文件中添加了写入/读取服务器时区偏移的功能。
10.11.2024 - 增加了一个选项,可根据服务器时区的追溯变化修正历史记录中事件的时间戳。
11.11.2024 - CalendarCache.mqh 和 CalendarFilter.mqh 中的小 bug 修复和改进。
22.11.2024 - CalendarCache.mqh 中的小错误修复和改进。
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/52977
Swap Monitor
该服务定期检查预定义符号的掉期,并将检测到的变化保存到 CSV 文件中,以便进一步分析和潜在重放(此处未实施)。此外,它还监控现有头寸的掉期变化并发出警报。
MT5-BuildYourGridEA
该专家系统可帮助任何交易者建立订单网格。
Sample pine script stochastic divergence
转换为 MQL 的松木代码示例
Push Notification for Opened / Closed Trades (Netting)
该代码提供了一个简单的功能,可在 MetaTrader 5 开仓或平仓时向移动设备发送推送通知。它专为净额结算账户(每个符号只允许一个仓位)设计。

