在OnTick中强制停止EA()

时间:2017-11-21 13:11:26

标签: mql4 mt4

我正在为backTest制作EA。

通常程序的工作原理如下。

  1. string = "print \"hello world\"" code_to_execute = compile(""" """ + string + """ """, '<string>', 'exec') 被调用直到某个时期结束。
  2. Ontick() OnDeinit()被调用。
  3. 但是现在我想停在OnTester()并转到2)。

    像这样,

    OnTick()

    我想我可以在void OnTick() { if (cnt > 100) {OnTick();OnTester();//Finish program here} } 停下来(查看用户的初始设置等...) 但是我可以在OnInit() ???

    中停止EA

    总之,我想做的是,

    OnTick()内部致电OnTester()并完成该计划。

1 个答案:

答案 0 :(得分:3)

是的,这也是可能的:

语法是:

void  ExpertRemove();
  

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

所以OnDeinit(){...} - 处理程序被激活&#34;自动&#34;,一旦第一次调用ExpertRemove()系统函数引发了预终止标记。

如果您的逻辑需要,请将此呼叫置于&#34;手动&#34;称为OnTester()处理程序,依赖于上面发布的if( cnt > 100 ) { OnTester(); // having the "killer"-ExpertRemove() there ... }

你已经完成了。

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