15228858893

MT4/MQL4 报错 array out of range in ‘XXX.mq4’ 的解决办法和原因发布日期:2022-11-29 10:00:38 浏览次数:

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


之前编写 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() 完成调用(因为只是指标重载而不是在图表中插入指标)。导致这个问题不容易被发现。




本站策略开发主要业务:


一:期货类

1.期货跟单软件定制;

2.期货跟单社区定制搭建;

3.期货程序化交易模型定制开发;

4.期货指标预警公式定制;

5.喊单信号提送模板定制开发;

6.CTA程序化模型信号输出与租赁;

 

二:股票类

1.智能选股公式定制开发;

2.通达信、大智慧、同花顺、东方财经等股票软件指标开发;

3.股票预警工具定制;

 

三:其他金融衍生品

1.EA编写编程加密破解;

2.自动喊单系统定制搭建;

3.自动交易信号输出与租用;

 

四:区块链

1.区块链指标开发定制;

2.区块链程序化交易开发;

3.区块链喊单信号定制与推送;



竭诚服务,欢迎定制



期货跟单系统(图6)




期货开户选择名列前茅的龙头央企——综合实力强,深扎金融领域、交易通道更稳定、投研内参更专业、专人服务更优质


国内双A期货公司开户,申请模拟交易,扫码在线办理

TEL:152-2885-8893

期货跟单系统(图7)