欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

Init_Sync - MetaTrader 5 库

author emer | 939 人阅读 | 0 人评论 |

Init_Sync - library for 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小时后评论,即可解锁附件下载
立即登录