Программа MQL неожиданно завершилась

Я новичок в языке MQL, поэтому поправьте меня, если я что-то не так описал.

С помощью редактора скриптов я сделал скрипт для автоматического размещения заказов. Программа никогда не должна быть остановлена, кроме как вручную. Мой код выглядит так:

void onStart()
{      
    While(true)
    {
        Sleep(10000);
        MakeOrder(....);//of course actual code is much more complicated
    }
}

Единственные предустановленные функции, которые я использую, это торговые функции, математические функции и функции времени.

Код работает хорошо в большинстве случаев и может продолжать работать как минимум в течение 48 часов, но иногда он может неожиданно перестать сообщать о причине деинитизации 4 (это тот же код выхода, если я нажму кнопку stop во время отладки) в течение одного часа после запуска. Похоже, в MQL нет модуля try...catch, и ошибки в некоторых строках кода его не остановят. Интересно, что могло произойти за увольнением? Или как я могу игнорировать это, чтобы хотя бы программа могла автоматически перезапускаться?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
130
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны проверить функции Таймер включения и 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);
     }
  }

Другие вопросы по теме