之前编写 MT4 指标的时候就发现过这个错误,没有记录,时间久了就忘记了,最近又遇到了这个错误。
在 MT4 指标或者 EA 编程中,编译时没有报错,但是当在图表中插入指标的时候,发现日志栏报错:
array out of range in ‘XXX.mq4′(xxx,xx)
在检查对应的代码时,发现是调用比如 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”和本文原始地址。