MQL程序意外终止

问题描述 投票:0回答:2

我是MQL语言的新手,所以如果我说错了,请纠正我。

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

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

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

代码适用于大多数可以继续运行至少48小时的时间,但有时它可能意外地停止报告deinit reason 4(如果我在调试时单击stop按钮,这是相同的退出代码)在启动后一小时内。看起来MQL没有try...catch模块,并且在某些编码行中获得错误不会阻止它。我想知道终止后会发生什么?或者我怎么能忽略它,所以至少程序可以自动重启?

mql4
2个回答
1
投票

你应该检查OnTimerOnTick函数。

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

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

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);
     }
  }
© www.soinside.com 2019 - 2024. All rights reserved.