首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MQL程序意外终止

MQL程序意外终止
EN

Stack Overflow用户
提问于 2019-04-09 17:55:05
回答 2查看 120关注 0票数 0

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

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

代码语言:javascript
复制
void onStart()
{      
    While(true)
    {
        Sleep(10000);
        MakeOrder(....);//of course actual code is much more complicated
    }
}

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

该代码在大多数情况下都运行得很好,至少可以继续运行48小时,但有时它可能会在启动后的一小时内意外停止报告deinit reason 4(如果我在调试时单击stop按钮,这也是相同的退出代码)。看起来MQL没有try...catch模块,在一些代码行中出现错误也不会阻止它。我想知道在终止的背后发生了什么?或者我如何忽略它,这样至少程序可以自动重启?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-14 23:59:31

您应该检查OnTimerOnTick函数。

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

代码语言:javascript
复制
void onStart()
{      
    while(!IsStopped())
    {
        Sleep(10000);
        MakeOrder(....);//of course actual code is much more complicated
    }
}
票数 1
EN

Stack Overflow用户

发布于 2019-04-22 10:04:41

Uninitialization Reason 4是:图表已关闭。在MT4中,您总是需要在图表(窗口)上运行脚本,因此,如果此图表因任何原因而关闭,您的脚本将终止。你不能做任何事情来阻止它。正如所建议的那样,添加IsStopped()将终止您的循环(和脚本),因此您可以做的是在您的循环之后添加一些代码,以通知您脚本正在终止。

例如:

代码语言:javascript
复制
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);
     }
  }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55589992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档