CLatencyMonitor - 用于 MQL5 EA 的具有 ATR 波动门和 GlobalVariable IPC 的 Inter-Tick 延迟跟踪器 - MetaTrader 5 库


延迟监控器是由以下开发者开发的轻量级 MQL5 包含文件库 (#include)DeeFX 精密实验室作为滞后盾专业版产品套件。它在单个可重用类中提供了三种紧密集成的功能:
将文件拖放到 MQL5/Include/DeeFX/ 中,并将单个 #include 添加到任何需要延迟感知的 EA 或服务中。
当终端的报价落后于市场时,执行敏感的 EA 可能会遭受无声填充降级或计算错误的风险。标准 MQL5 没有提供内置机制来:
延迟监控器通过一个无依赖性的类解决了所有三个差距。
刻度间增量
每次调用 OnTick() 时,该类都会计算自上一个刻度以来经过的毫秒数。第一个刻度仅用于为计时器播种 - 启动时不会引发虚假警报。
ATR 波动率门
在声明滞后之前,该类检查当前 ATR 值是否超过 AtrSmaMultiplier × SMA(ATR, AtrPeriod) 。 SMA 是根据原始 ATR 缓冲区手动计算的,使得阈值与工具无关,并且在所有货币对和时间范围内进行自我标准化。如果 ATR 句柄不可用或历史记录不足,门将无法打开(滞后检测保持活动状态),因此保护永远不会默默禁用。
持久性和 GlobalVariable IPC
重复计时器调用 CheckPersistence() 。一旦滞后条件保持活动状态的时间超过 PersistenceSec 秒,该类就会对命名的全局变量“Terminal_Lag_Detected”执行先读后写检查,并仅在没有其他 EA 已声明它时将其设置为 1.0。所有权在内部进行跟踪;当滞后清除时,只有所属实例会重置该标志。
清洁生命周期
Init() 重置所有计时和滞后状态,防止 OnDeinit / OnInit 周期中的过时值。 Deinit() 释放 ATR 指标句柄并仅在拥有 GlobalVariable 时删除该句柄。析构函数故意为空 — 显式资源管理遵循 MQL5 标准。
#包括输入 乌龙InpLagThresholdMs =500;输入 整数 InpPersistenceSec =3;输入 整数 InpAtrPeriod =14;输入 双倍的InpAtrSma乘数 =1.5; CLatencyMonitor g_latency;整数 初始化时() { 如果(!g_latency.Init(InpLagThresholdMs, InpPersistenceSec, InpAtrPeriod、InpAtrSmaMultiplier、 _象征,_时期)) 返回 初始化失败; 事件设置定时器(1); // 用于持久性检查的 1 秒计时器 返回 初始化成功; }空白 解初始化(常量 整数原因) { 事件终止定时器(); g_latency.Deinit(); }空白 勾选() { 布尔值newLag = g_latency.勾选(); 如果(新滞后) 评论(“DeeFX | 检测到滞后 — 交易执行暂停”); }空白 定时器() { 布尔值持久= g_latency.CheckPersistence(); 如果(执着的) 警报(“DeeFX | 持续滞后 > ”, InpPersistenceSec,“s — GV 标志设置”); 如果(!g_latency.IsLagActive()) 评论(””); }
同一终端上的任何其他 EA 都可以独立读取共享标志:
// 在第二个 EA 中 — 不需要包含 如果(全局变量获取(“检测到终端延迟”) >=1.0) 打印(“收到终端滞后信号——跳过下单。”);
初始化()参数
只读访问器
全局变量IPC
附件下载
📎 CLatencyMonitor.mqh (7.43 KB)
Source: MQL5 #70046
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
