Características da linguagem mql5, subtilezas e técnicas - página 174

 
Igor Makanu:

é diferente

existem as chamadas tarefas de Controlo e Gestão

EA - gestão, serviço - controlo

o controlo não deve ser supérfluo - se consumir todos os recursos do sistema, obtém-se um sistema instável em vez de controlo

Então o que é a poupança? O serviço fará a mesma enumeração de encomendas, as mesmas comparações.

Se a ideia é para um serviço "servir" múltiplos conselheiros enviando-lhes o sinal de "algo mudou", então a solução é questionável.
Em primeiro lugar, é uma tolice esperar pelos dados críticos necessários para tomar uma decisão a partir do exterior. E em segundo lugar, a poupança, se houver alguma, será apenas no caso de uma multidão de Consultores Especialistas num único terminal.

Isto é mais um truque teórico, na prática não temos problemas com a procura de encomendas na EA.

 
Algum tipo de falha no MT5 apanhou esta situação.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Tenha em mente que tal proibição pode ser o resultado do Terminal (bug) e não do corretor.
 
fxsaber:
Algum tipo de falha do MT5 apanhou esta situação. Tenha em mente que esta proibição pode ser o resultado do Terminal (bug) e não do corretor.

Não é a mesma situação que Robo, nos primeiros 2 minutos o comércio está fechado e as aspas vão?

Só não me lembro se o comércio é proibido todos os dias ou apenas às segundas-feiras durante estes 2 minutos.

 
Alexey Viktorov:

Não é uma situação como a do Robo's, nos primeiros 2 minutos o comércio está fechado e as cotações estão a chegar?

Só não me lembro se todos os dias ou apenas às segundas-feiras estes 2 minutos não são permitidos para troca.

Não, isto é a meio do dia. Falha MT5, o corretor não está envolvido.

 
Alexey Viktorov:

Só não me lembro se o comércio é proibido todos os dias ou apenas às segundas-feiras durante esses 2 minutos.

Apenas quando o mercado abre
 
A MessageBox não mostra toda a informação no registo. Ao ler o diário de bordo, por vezes há perguntas. A solução é a seguinte.
// Терминал при 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
 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Peculiaridades de mql5, dicas e truques

fxsaber, 2020.04.30 08:49

Alguma falha no MT5 apanhou esta situação.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Tenha em mente que tal proibição pode ser o resultado do Terminal (bug) e não do corretor.

Consegui-o novamente. Presumo que isto possa ocorrer em situações raras quando se faz um novo registo.

Solução - se falso, tente novamente após uma breve pausa.

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);
}
 
Quando se pretende apanhar uma alteração numa variável na atribuição.
if (Value != (Value = NewValue()))
  Print("Value is changed.");
 
fxsaber:
Quando é necessário apanhar uma alteração de uma variável na atribuição.

Tem aqui a UB, não a pode utilizar.

 
Vict:

Tem aqui a UB, não a pode utilizar.

Funciona, mas pode sugerir uma macro adequada.