Особенности языка mql5, тонкости и приёмы работы - страница 174

 
Igor Makanu:

отличается

есть, так называемые, задачи Контроля и Управления

ЕА - управление, сервис - контроль

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

Так а в чем экономия? Сервис будет делать тот же перебор ордеров, те же сравнения.

Если мысль в том, чтобы один сервис "обслуживал" несколько советников, отправляя им сигнал "что-то изменилось", то решение сомнительное.
Во-первых, критически важные данные, нужные для принятия решения, ждать со стороны просто глупо. А, во-вторых, экономия, если и будет, то только в случае множества советников на одном терминале.

Больше похоже на теоретические изыски, на практике проблем с перебором ордеров в советнике нет.

 
Какой-то сбой в MT5 словил эту ситуацию.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Учитывайте, что такой запрет может быть результатом действий Терминала (баг), не брокера.
 
fxsaber:
Какой-то сбой в MT5 словил эту ситуацию. Учитывайте, что такой запрет может быть результатом действий Терминала (баг), не брокера.

Это не такая ситуация как у Робо, первые 2 минуты торговля закрыта, а котировки идут?

Только я не помню, каждый день или только по понедельникам эти 2 минуты запрещена торговля.

 
Alexey Viktorov:

Это не такая ситуация как у Робо, первые 2 минуты торговля закрыта, а котировки идут?

Только я не помню, каждый день или только по понедельникам эти 2 минуты запрещена торговля.

Нет, это в середине дня. Сбой MT5, брокер не при делах.

 
Alexey Viktorov:

Только я не помню, каждый день или только по понедельникам эти 2 минуты запрещена торговля.

Только при открытии рынка
 
MessageBox в лог выводит далеко не всю информацию. При чтении лога иногда возникают вопросы. Решил проблему так.
// Терминал при MessageBox не выводит в лог имя MQL-программы, текст заголовка окна, флаги и результат нажатия.
int MessageBox2( const string Text, const string Caption = NULL, const int Flags = 0 )
{
  const int Res = MessageBox(Text, Caption, Flags);
  
#define TOSTRING(A) " " + #A + " = " + (string)(A)
  Print("MessageBox:" + TOSTRING(Caption) + TOSTRING(Flags) + TOSTRING(Res));
#undef TOSTRING
  
  return(Res);
}

#define MessageBox MessageBox2
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2020.04.30 08:49

Какой-то сбой в MT5 словил эту ситуацию.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Учитывайте, что такой запрет может быть результатом действий Терминала (баг), не брокера.

Повторно нарвался. Предполагаю, что при релогине в редких ситуациях такое может проявляться.

Решение - если false, повторить попытку после небольшой паузы.

bool IsTradeAllowed( const int Attempts = 0 )
{        
  // https://www.mql5.com/ru/forum/170952/page174#comment_16363677
  bool Res = false;
  int Count = 0;
  
  // https://www.mql5.com/ru/forum/170952/page174#comment_16363677
  while (!(Res = ::MQLInfoInteger(MQL_TRADE_ALLOWED) &&
                 ::AccountInfoInteger(ACCOUNT_TRADE_EXPERT) &&
                 ::AccountInfoInteger(ACCOUNT_TRADE_ALLOWED) &&
                 ::TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) &&
         (Count++ < Attempts) && !::IsStopped())
    ::Sleep(100);
    
  return(Res);
}
 
Когда нужно засечь изменение переменной при присвоении.
if (Value != (Value = NewValue()))
  Print("Value is changed.");
 
fxsaber:
Когда нужно засечь изменение переменной при присвоении.

У вас здесь UB, пользоваться этим нельзя.

 
Vict:

У вас здесь UB, пользоваться этим нельзя.

Работает, но можете предложить правильный макрос.

Причина обращения: