在 OnTick() 中强制停止 EA

Forcebly stop EA in OnTick()

我正在为 backTest 制作 EA。

通常程序是这样的。

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

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

像这样,

void OnTick()
{
    if (cnt > 100) {OnTick();OnTester();//Finish program here}
}

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

综上所述,我想做的是,

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

是的,这也是可以的:

语法是:

void  ExpertRemove();

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.

因此 OnDeinit(){...}-处理程序被激活 "automatically",一旦对 ExpertRemove() 系统函数的第一次调用引发了预终止标志。

如果您的逻辑需要,将此调用放入一个名为 OnTester() 的 "manually" 处理程序中,依赖于它被调用如上文所述
if( cnt > 100 ) { OnTester(); // having the "killer"-ExpertRemove() there ... }

大功告成。

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