MQL程序意外终止

时间:2019-04-09 09:55:05

标签: mql4

我是MQL语言的新手,所以如果我描述有误,请纠正我。

我由脚本编辑器制作了一个脚本,以自动下订单。除非手动终止,否则切勿停止该程序。我的代码如下:

void onStart()
{      
    While(true)
    {
        Sleep(10000);
        MakeOrder(....);//of course actual code is much more complicated
    }
}

我使用的唯一预设函数是交易函数,数学函数和时间函数。

该代码在大多数情况下都可以正常运行,至少可以连续运行48小时,但是有时它可能会意外停止报告deinit原因4(如果在调试时单击stop按钮,则退出代码是相同的) ),请在启动后一小时内。看来MQL没有try...catch模块,并且在某些代码行中出错不会停止它。我想知道解雇背后可能发生了什么?或者我该如何忽略它,以便至少程序可以自动重新启动?

2 个答案:

答案 0 :(得分:0)

您应该检查OnTimerOnTick函数。

并建议在While循环中使用IsStopped()。

void onStart()
{      
    while(!IsStopped())
    {
        Sleep(10000);
        MakeOrder(....);//of course actual code is much more complicated
    }
}

答案 1 :(得分:0)

Uninitialization Reason 4是:图表已关闭。在MT4中,您始终需要在图表(窗口)上运行脚本,因此,如果由于某种原因该图表关闭,则脚本将终止。您无法采取任何措施来防止这种情况。 如建议的那样,添加IsStopped()将终止您的循环(和脚本),因此您可以做的是在循环后添加一些代码以通知您脚本已终止。

例如:

void OnStart()
  {
//---
   while(!IsStopped())
     {
      Sleep(10000);
      //MakeOrder(....);//of course actual code is much more complicated
     }
//---
   if(UninitializeReason()==REASON_CHARTCLOSE)
     {
      string msg="Chart is closed and the script is terminated.";
      Alert(msg);
      SendNotification(msg);
     }
  }