Автоматический мониторинг ошибок в терминале - какие есть решения?

 
Есть ли какие ни будь автоматические средства которые мониторят работу торгового терминала? И в случаях каких то неполадок высылают сообщение на почту например?

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

Что рассматривается:

  1. Рассматриваю сторонний софт платный/бесплатный
  2. Рассматриваю софт встроенный в MT5 (ну например как советник) платный/бесплатный
  3. Сборка готового решения из исходного кода

Что НЕ рассматривается:
  1. Модификация текущего советника для отправки почты через терминала
  2. Написание своего софта с нуля  
 
Софт встроенный в MT5  - сервисы. 
Сервисы на подобие скриптов, только работают в фоновом режиме и  в бесконечном цикле.
Пишите в сервисе любую логику для вашего мониторинга, запускаете и забываете.
 

можно обойтись админским средствами

1. терминал пишет текстовые журналы. Софта который умеет читать журналы и выдавать оповещения по заданным шаблонам - воз и маленькая тележка. Вы просто не задавались таким вопросом.

2. о проблемах на самом VDS сообщает провайдер. У них у всех можно настроить оповещения. Если хостер убог (перепродажник) и у него нет такого, то существуют внешние мониторинговые сервисы.

 
Блин как загуглить? я написал  и MT5  - сервисы и не чего не нашел
 
Можно поподробнее про эти сервисы в MT5 
 
А можно где то посмотреть список всех ошибок которые может генерировать терминал?
 
0x41:
А можно где то посмотреть список всех ошибок которые может генерировать терминал?

В документации описаны все ошибки.

https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
0x41:
Можно поподробнее про эти сервисы в MT5 

В документации есть краткое описание
Краткое, потому что тот же принцип как и скриптов, не чего сложного в понимании.

ssr


sr

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Выполнение программ - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Без внешнего сервера, принимающего особый прикладной пинг от терминала (самописный, например на MQL сокетах или webrequest-е), данную задачу не решить.

Сервисы, которые в папке MQL/Services, сами по себе ничем не помогут (это очень ограниченная вещь, не способная нормально общаться с другими MQL-программами и чартами).

Журналы терминал кеширует в памяти, так что в файл они сбрасываются с ооочень большим запаздыванием, и тоже оперативно отловить неполадку не дадут.

 
Stanislav Korotky:

Журналы терминал кеширует в памяти, так что в файл они сбрасываются с ооочень большим запаздыванием, и тоже оперативно отловить неполадку не дадут.

Журнал можно читать с помощью Win API.

 
Stanislav Korotky:

Без внешнего сервера, принимающего особый прикладной пинг от терминала (самописный, например на MQL сокетах или webrequest-е), данную задачу не решить.

А зачем костылить свой пинг понг? Когда можно обойтись штатными средствами.
Вот написал, по быстрому особо не вникая.
Попробуйте сымитировать потерю связи, отрубив интернет.

void OnStart()
{
   bool isConnected = false;
   bool state       = false;
   
   while(!_StopFlag)
   {
      isConnected = TerminalInfoInteger(TERMINAL_CONNECTED) ? true : false; 
   
      if(isConnected && !state)
      {
         state = true;
         Print("Terminal Connected to ServerMT5: "+(string)TimeGMT()+" GMT"); //Заменяем на SendMail()
      }
      else if(!isConnected && state) 
      {
         state = false;
         Print("Terminal Disconnected to ServerMT5: "+(string)TimeGMT()+" GMT"); //Заменяем на SendMail()
      }      
         
      Sleep(5000);
   }
}


Написал и понял что тупанул. Интернета нет, какой SendMail?  :))
Но если это обрыв с сервером а инет есть, то работать будет.
На VPS нет проблем с инетом, проблема скорее будет в отвале сервера, так что покатит.
Stanislav Korotky:

Сервисы, которые в папке MQL/Services, сами по себе ничем не помогут (это очень ограниченная вещь, не способная нормально общаться с другими MQL-программами и чартами).

Насчёт общения с другими mql-программами, это не так. Куча инструментов для этого есть. 
export функции, глобальные переменные, умудряются ресурсы заюзать, mmf файлы, и другая экзотика в достатке.
Насчёт чартов, тут согласен есть затыки. Но возможно из-за того что не придумали как решить это.
Коммент на чарт передаёт, значит с чартом работать можно. Просто уж тяжко без официальной документации, и примеров.
Но пока такая задача не стояла, по этому сильно не вникал в работу с чартами.

bool ChartCommentSet(const string str, const long chart_ID=0) 
{ 
   //сбросим значение ошибки 
   ResetLastError(); 
   
   //установим значение свойства 
   if(!ChartSetString(chart_ID, CHART_COMMENT, str)) 
   { 
      //выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ", GetLastError()); 
      return(false); 
   } 
   
   ChartRedraw(chart_ID);
   return(true); 
}

//------------------------------------------------------------------
void OnStart()
{
   ChartCommentSet("Hello Service", ChartFirst());
   Sleep(15000);
   ChartCommentSet("", ChartFirst());      

}
Stanislav Korotky:

Журналы терминал кеширует в памяти, так что в файл они сбрасываются с ооочень большим запаздыванием, и тоже оперативно отловить неполадку не дадут.

С журналами даже не знаю с чем едят их. Но как Сергей написал выше с WinAPI решается.
Если бы он показал конкретные примеры, было бы очень полезно.