在 OnTick() 中强制停止 EA

whi*_*ear 4 mt4 mql4

我正在为 backTest 制作一个 EA。

通常程序是这样工作的。

  1. Ontick() 被调用直到某个时间段结束。
  2. OnDeinit() OnTester() 叫做。

但是现在我想停下来OnTick()并转到2)。

像这样,

void OnTick()
{
    if (cnt > 100) {OnTick();OnTester();//Finish program here}
}
Run Code Online (Sandbox Code Playgroud)

我想我可以停止OnInit()(检查用户的初始设置等...)但是我可以停止 EA 吗OnTick()???

总之,我想做的是,

OnTester()从内部调用OnTick()并完成程序。

use*_*197 5

是的,这也是可能的:

语法是:

void  ExpertRemove();
Run Code Online (Sandbox Code Playgroud)

ExpertRemove();EA 交易不会立即停止,因为您只是调用一个标志来停止 EA 操作的设置。也就是说,任何下一个事件都不会被处理,而是OnDeinit()会被调用,并且智能交易系统将被卸载并从图表中移除。

所以OnDeinit(){...}-handler 被“自动”激活,一旦对ExpertRemove()系统函数的第一次调用引发了预终止标志。

如果您的逻辑需要,将此调用放入一个“手动”调用的OnTester()处理程序中,依赖于它如上面发布的那样被调用
if( cnt > 100 ) { OnTester(); // having the "killer"-ExpertRemove() there ... }

你就完成了。

您可能已经注意到,在OnTick()-code if(){...}-block内不应该有已发布的-call ,因为它永远不会让代码执行到达手动指定的对 的调用OnTester(),但会保持在一个致命的永无止境的循环中手动注入无休止的重新进入 - 处理OnTick(){...}程序,无法退出。