Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 174

 
Igor Makanu:

è diverso

ci sono i cosiddetti compiti di controllo e gestione

EA - gestione, servizio - controllo

il controllo non dovrebbe essere superfluo - se si consumano tutte le risorse del sistema, si ottiene un sistema instabile invece del controllo

Quindi qual è il risparmio? Il servizio farà la stessa enumerazione di ordini, gli stessi confronti.

Se l'idea è che un servizio "serva" più consulenti inviando loro il segnale "qualcosa è cambiato", allora la soluzione è discutibile.
In primo luogo, è sciocco aspettare dall'esterno i dati critici necessari per prendere una decisione. E in secondo luogo, il risparmio, se c'è, sarà solo nel caso di una moltitudine di Expert Advisors in un terminale.

Questo è più che altro un trucco teorico, in pratica non abbiamo problemi con la ricerca degli ordini nell'EA.

 
Una sorta di glitch in MT5 ha catturato questa situazione.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Tenete a mente che un tale divieto può essere il risultato del terminale (bug), non del broker.
 
fxsaber:
Una sorta di glitch di MT5 ha catturato questa situazione. Tenete a mente che questo divieto può essere il risultato del terminale (bug), non del broker.

Non è la stessa situazione di Robo, i primi 2 minuti il trade è chiuso e le quotazioni vanno?

Solo che non ricordo se il trading è vietato tutti i giorni o solo il lunedì per questi 2 minuti.

 
Alexey Viktorov:

Non è la stessa situazione di Robo, i primi 2 minuti il trade è chiuso e le quotazioni arrivano?

Solo che non ricordo se tutti i giorni o solo il lunedì questi 2 minuti non possono essere scambiati.

No, questo è in pieno giorno. Il fallimento di MT5, il broker non è coinvolto.

 
Alexey Viktorov:

Solo che non ricordo se il trading è vietato tutti i giorni o solo il lunedì per quei 2 minuti.

Solo quando il mercato apre
 
MessageBox non mostra tutte le informazioni nel log. Quando si legge il diario di bordo, a volte ci sono delle domande. La soluzione è la seguente.
// Терминал при 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
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Peculiarità di mql5, consigli e trucchi

fxsaber, 2020.04.30 08:49

Qualche inconveniente in MT5 ha catturato questa situazione.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Tenete a mente che un tale divieto può essere il risultato del terminale (bug), non del broker.

L'ho preso di nuovo. Suppongo che questo possa accadere in rare situazioni quando si rifà il log.

Soluzione - se falso, riprovare dopo una 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 si vuole catturare un cambiamento in una variabile durante l'assegnazione.
if (Value != (Value = NewValue()))
  Print("Value is changed.");
 
fxsaber:
Quando avete bisogno di catturare un cambiamento in una variabile durante l'assegnazione.

Avete UB qui, non potete usarlo.

 
Vict:

Avete UB qui, non potete usarlo.

Funziona, ma potete suggerire una macro adeguata.

Motivazione: