MQL 程序意外终止
MQL Program unexpectedly terminated
我是MQL语言的新手,所以如果我描述的有误,请指正。
我用脚本编辑器做了一个自动下单的脚本。除非手动终止,否则程序永远不会停止。我的代码看起来像这样:
void onStart()
{
While(true)
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
我使用的唯一预设函数是交易函数、数学函数和时间函数。
该代码在大多数情况下运行良好,至少可以持续 运行 48 小时,但有时它可能会意外停止报告 deinit 原因 4(如果我单击 stop
调试时的按钮)启动后一小时内。看起来 MQL 没有 try...catch
模块,并且在某些编码行中出现错误不会阻止它。我想知道终止后可能发生了什么?或者我怎么能忽略它,所以至少程序可以自动重启?
并推荐在 While 循环中使用 IsStopped()。
void onStart()
{
while(!IsStopped())
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
Uninitialization Reason 4 是:图表已经关闭。在 MT4 中,您始终需要 运行 图表上的脚本 (window),因此当然如果此图表因任何原因关闭,您的脚本将终止。您无法阻止这种情况发生。
正如建议的那样,添加 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);
}
}
我是MQL语言的新手,所以如果我描述的有误,请指正。
我用脚本编辑器做了一个自动下单的脚本。除非手动终止,否则程序永远不会停止。我的代码看起来像这样:
void onStart()
{
While(true)
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
我使用的唯一预设函数是交易函数、数学函数和时间函数。
该代码在大多数情况下运行良好,至少可以持续 运行 48 小时,但有时它可能会意外停止报告 deinit 原因 4(如果我单击 stop
调试时的按钮)启动后一小时内。看起来 MQL 没有 try...catch
模块,并且在某些编码行中出现错误不会阻止它。我想知道终止后可能发生了什么?或者我怎么能忽略它,所以至少程序可以自动重启?
并推荐在 While 循环中使用 IsStopped()。
void onStart()
{
while(!IsStopped())
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
Uninitialization Reason 4 是:图表已经关闭。在 MT4 中,您始终需要 运行 图表上的脚本 (window),因此当然如果此图表因任何原因关闭,您的脚本将终止。您无法阻止这种情况发生。 正如建议的那样,添加 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);
}
}