了解MT4编程的同学应该都知道,MT4的EA编写中有三个最重要的系统函数OnInit(),OnTick() 和 OnDeinit(const int reason)。这三个函数分别会在EA初始化的时候,EA运行(接收到市场报价)的时候和EA退出(反初始化)的时候。如果我们在EA运行的途中去修改EA的参数、修改图表的周期或者品种时, EA会分别运行OnDeinit(const int reason)函数来反初始化EA,再重新运行OnInit()来重新按照新的参数、品种、周期来重新运行。

         那么还有一种极端的情况,就是EA正在执行OnTick()函数里面的指令,这时MT4并不会强制终止OnTick()函数,而是会等到OnTick()函数执行完毕之后,再执行OnDeinit(const int reason)和OnInit()来重新初始化EA。

         小编在发现这个细节的时候也是经历了一个大乌龙的。具体情况是这样:在写下单函数的时候,通常会把它封装在一个while循环中