MQL 程序意外终止

MQL Program unexpectedly terminated

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

我用脚本编辑器做了一个自动下单的脚本。除非手动终止,否则程序永远不会停止。我的代码看起来像这样:

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

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

该代码在大多数情况下运行良好,至少可以持续 运行 48 小时,但有时它可能会意外停止报告 deinit 原因 4(如果我单击 stop调试时的按钮)启动后一小时内。看起来 MQL 没有 try...catch 模块,并且在某些编码行中出现错误不会阻止它。我想知道终止后可能发生了什么?或者我怎么能忽略它,所以至少程序可以自动重启?

您应该检查 OnTimer and OnTick 函数。

并推荐在 While 循环中使用 IsStopped()。

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

Uninitialization Reason 4 是:图表已经关闭。在 MT4 中,您始终需要 运行 图表上的脚本 (window),因此当然如果此图表因任何原因关闭,您的脚本将终止。您无法阻止这种情况发生。 正如建议的那样,添加 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);
     }
  }