迈达克公司在2019年3月份大更新了一次MT4之后,又有了多次对MT4软件的小幅度更新,目前MT4的最新版本为1220版本。点击这里查看MT4官方发布的更新日志。

这么多次更新以来,对于MT4整体的EA使用并没有太大的影响,在日志中也可以看到大部分更新都是提升稳定性、修复bug和增加多种语言等功能。旧版本的EA也可以在新版本中的MT4中正常运行。小编自己的各种EA也没有出现过无法加载或者无法使用的情况。

今天小编要给大家分享的是MQL4中的ExpertRemove()函数。此函数执行之后,EA会自动退出,也就是从该图标上删除。在MT4的参考文献里对这个函数的描述是这么写的:

The function stops an Expert Advisor and unloads it from a chart.

但是在下面还有一段文字,要求我们注意:

The Expert Advisor is not stopped immediately as you call ExpertRemove(); just a flag to stop the EA operation is set. That is, any next event won’t be processed, OnDeinit() will be called and the Expert Advisor will be unloaded and removed from the chart.

意思是当ExpertRemove()函数被调用的时候,并不会立刻退出EA,而是给程序一个结束的标签,而且OnDeinit()函数会被执行,之后才会退出EA。

MT4的主函数一般是写在OnTick()里面的,小编在实际使用这个ExpertRemove()函数的时候还发现,当执行过ExpertRemove()函数之后,MT4依然会把OnTick()函数中剩余的部分执行完之后,再执行OnDeinit()再退出EA。

如果我们程序的结构是如下图这样的话:

主函数 {

If(条件1) ExpertRemove();

If(条件2) 开仓;

}

那么当条件1和条件2同时满足的情况下,就会出现一个问题: EA判断条件1达成,会执行ExpRemove()函数来退出EA,刚好这个时候条件2也满足,这个时候MT4会依然会进行开仓,然后再退出EA。留下一个单子飘在那里。

要解决这个问题最简单的方法就是在ExpertRemove()函数后面加上一个return,这样主函数会直接返回,就不再执行下面的语句了。

本文作者:小土豆

分享到