我是MQL语言的新手,所以如果我描述有误,请纠正我。
我由脚本编辑器制作了一个脚本,以自动下订单。除非手动终止,否则切勿停止该程序。我的代码如下:
void onStart()
{
While(true)
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
我使用的唯一预设函数是交易函数,数学函数和时间函数。
该代码在大多数情况下都可以正常运行,至少可以连续运行48小时,但是有时它可能会意外停止报告deinit原因4(如果在调试时单击stop
按钮,则退出代码是相同的) ),请在启动后一小时内。看来MQL没有try...catch
模块,并且在某些代码行中出错不会停止它。我想知道解雇背后可能发生了什么?或者我该如何忽略它,以便至少程序可以自动重新启动?
答案 0 :(得分:0)
并建议在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);
}
}