我是MQL语言的新手,所以如果我描述错了,请纠正我。
我通过脚本编辑器创建了一个脚本来自动下单。除非手动终止,否则决不能停止该程序。我的代码看起来像这样:
void onStart()
{
While(true)
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}我使用的唯一预置函数是交易函数、数学函数和时间函数。
该代码在大多数情况下都运行得很好,至少可以继续运行48小时,但有时它可能会在启动后的一小时内意外停止报告deinit reason 4(如果我在调试时单击stop按钮,这也是相同的退出代码)。看起来MQL没有try...catch模块,在一些代码行中出现错误也不会阻止它。我想知道在终止的背后发生了什么?或者我如何忽略它,这样至少程序可以自动重启?
发布于 2019-04-14 23:59:31
发布于 2019-04-22 10:04:41
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);
}
}
https://stackoverflow.com/questions/55589992
复制相似问题