Init_Sync - MetaTrader 5 库

如果您更改 MetaTrader 中图表品种的时间范围或名称,图表上的所有指标将从图表中卸载并再次加载到图表上。与 MT4 不同,在 MT5 中,由于其内部架构,加载/卸载的顺序没有定义。
此功能有时会导致不立即明显的问题。这些问题与新加载的指标实例的 OnInit 可以在卸载实例的 OnDeinit 之前执行有关。
检测到此问题的情况通常与希望将某些信息从旧指标实例的 OnDeinit 传输(显式/隐式)到新指标实例的 OnInit 相关。换句话说,新指标实例应该知道旧指标实例的存在,并且在旧实例卸载之前不应加载。
该库允许将此同步应用于任何指标。
这是一个简单指标的示例
#财产指标图表窗口 #财产指标缓冲区 1 #财产指标图 1 #财产指示器颜色1 红细胞 #财产指标类型1 绘制线 输入 整数输入 =0;双倍的缓冲[];整数 初始化时() { 设置索引缓冲区(0, 缓冲); 打印(“初始化”); 返回(初始化成功); }空白 解初始化(常量 整数原因 ) { 打印(“删除”); }空白 图表事件(常量 整数ID, 常量 长的&l参数, 常量 双倍的&d参数, 常量 细绳和垃圾邮件) { }空白 定时器() { }整数 计算时(常量 整数费率_总计, 常量 整数先前计算的, 常量 日期时间&时间[], 常量 双倍的&打开[], 常量 双倍的&高的[], 常量 双倍的&低的[], 常量 双倍的&关闭[], 常量 长的&tick_volume[], 常量 长的&体积[], 常量 整数&传播[] ) { 数组复制(缓冲区,打开,prev_calculated,prev_calculated); 返回(费率_总计); }
如果您启动该指标并开始切换其图表时间范围或交易品种,“Init”和“Deinit”线的交替将被打破。
如果我们在指标代码的开头添加以下行
#包括// 同步指标的 Init/Deinit 将观察到适当的交替。
要将此属性应用于所需的指标,请将上述结构添加到其代码中。
// 该库使指标的 Init/Deinit 同步。 // 指标必须包含 int OnInit()、OnDeinit、OnTimer 和 OnChartEvent。 // 如果没有使用?留空。 #包括//https://www.mql5.com/en/code/16280 #包括 //https://www.mql5.com/en/blogs/post/683577
库操作所需的其他 mqh 文件可在指定的链接中找到。
附件下载
📎 init_sync.mqh (5.93 KB)
Source: MQL5 #18138
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
