MT4/MQL4 报错 array out of range in ‘XXX.mq4’ 的解决办法和原因

之前编写 MT4 指标的时候就发现过这个错误,没有记录,时间久了就忘记了,最近又遇到了这个错误。

在 MT4 指标或者 EA 编程中,编译时没有报错,但是当在图表中插入指标的时候,发现日志栏报错:

array out of range in ‘XXX.mq4′(xxx,xx)

MT4 报错数组越界

在检查对应的代码时,发现是调用比如 High[i] 或者 IndicatorBuffer[i] 之类的语句,经过简单地测试,发现三个规律:

一、插入自定义指标时,指标在 OnInit() 成功之前,MT4 先触发了 OnChartEvent() 函数,导致了在图表事件函数中调用数组出现超区错误。

所以如果指标中包含一些针对图表事件触发的计算,那么 OnChartEvent() 函数中应当增加对指标缓冲区及相关数组大小或初始化状态的判断。

二、当 OnChartEvent() 函数中调用了多个指标缓冲区,或者多个全局数组,如出现 (High[i] – Low[i]) / 2 这样的语句,需要对要调用的所有数组大小进行判断。比如前面的语句,即使 ArraySize(High) == Bars,依然可能会在 Low[i] 处报错。

我猜想可能 MT4 存在多线程或者异步处理的 Bug,导致了此类报错。

三、在 Meta Editor 编译指标源码后,图表自动刷新时,不是每次都会报这个错,也就是在编译完成后图表自动重新加载指标时,OnInit() 有可能先于 OnChartEvent() 完成调用(因为只是指标重载而不是在图表中插入指标)。导致这个问题不容易被发现。

<hr />
MT4 常见错误、MT4 的 Bug、MT4 报错怎么解决、MT4/MQL4 编程教程、MT4 指标编程入门。

版权声明:本站所有原创文章,作者保留版权。转载必须包含本声明,不得修改任何内容(包括文章标题),并以超链接的形式注明作者“Bary”和本文原始地址。

发表评论

电子邮件地址不会被公开。 必填项已用*标注