我是MQL语言的新手,所以如果我说错了,请纠正我。
我通过脚本编辑器创建了一个脚本来自动下订单。除非手动终止,否则程序应永远不会停止。我的代码看起来像这样:
void onStart()
{
While(true)
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
我使用的唯一预设功能是交易功能,数学功能和时间功能。
代码适用于大多数可以继续运行至少48小时的时间,但有时它可能意外地停止报告deinit reason 4(如果我在调试时单击stop
按钮,这是相同的退出代码)在启动后一小时内。看起来MQL没有try...catch
模块,并且在某些编码行中获得错误不会阻止它。我想知道终止后会发生什么?或者我怎么能忽略它,所以至少程序可以自动重启?
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);
}
}