Я новичок в языке MQL, поэтому поправьте меня, если я что-то не так описал.
С помощью редактора скриптов я сделал скрипт для автоматического размещения заказов. Программа никогда не должна быть остановлена, кроме как вручную. Мой код выглядит так:
void onStart()
{
While(true)
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
Единственные предустановленные функции, которые я использую, это торговые функции, математические функции и функции времени.
Код работает хорошо в большинстве случаев и может продолжать работать как минимум в течение 48 часов, но иногда он может неожиданно перестать сообщать о причине деинитизации 4 (это тот же код выхода, если я нажму кнопку stop
во время отладки) в течение одного часа после запуска. Похоже, в MQL нет модуля try...catch
, и ошибки в некоторых строках кода его не остановят. Интересно, что могло произойти за увольнением? Или как я могу игнорировать это, чтобы хотя бы программа могла автоматически перезапускаться?
Вы должны проверить функции Таймер включения и OnTick.
И рекомендуется использовать IsStopped() в цикле While.
void onStart()
{
while(!IsStopped())
{
Sleep(10000);
MakeOrder(....);//of course actual code is much more complicated
}
}
Причина деинициализации 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);
}
}