Caractéristiques du langage mql5, subtilités et techniques - page 174

 
Igor Makanu:

est différent

il existe des tâches dites de contrôle et de gestion

EA - gestion, service - contrôle

le contrôle ne doit pas être superflu - si vous consommez toutes les ressources du système, vous obtenez un système instable au lieu d'un contrôle

Alors, quelle est l'économie ? Le service fera la même énumération des commandes, les mêmes comparaisons.

Si l'idée est de permettre à un service de "servir" plusieurs conseillers en leur envoyant le signal "quelque chose a changé", alors la solution est discutable.
Tout d'abord, il est stupide d'attendre de l'extérieur les données essentielles nécessaires pour prendre une décision. Et deuxièmement, les économies, s'il y en a, ne seront que dans le cas d'une multitude d'Expert Advisors dans un seul terminal.

Il s'agit plus d'une astuce théorique, en pratique nous n'avons aucun problème avec la recherche d'ordre dans l'EA.

 
Une sorte de problème dans MT5 a provoqué cette situation.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
N'oubliez pas qu'une telle interdiction peut être le résultat du terminal (bug), et non du courtier.
 
fxsaber:
Une sorte de problème de MT5 a provoqué cette situation. N'oubliez pas que cette interdiction peut être le résultat du terminal (bug), et non du courtier.

Ce n'est pas la même situation que Robo, les 2 premières minutes la transaction est fermée et les cotations vont ?

Seulement je ne me souviens pas si le trading est interdit tous les jours ou seulement le lundi pour ces 2 minutes.

 
Alexey Viktorov:

Ce n'est pas une situation comme celle de Robo, les 2 premières minutes la transaction est fermée et les cotations arrivent ?

Seulement, je ne me souviens pas si tous les jours ou seulement le lundi, ces 2 minutes ne sont pas autorisées à être négociées.

Non, c'est en plein milieu de la journée. En cas d'échec de MT5, le courtier n'est pas impliqué.

 
Alexey Viktorov:

Seulement, je ne me souviens pas si le trading est interdit tous les jours ou seulement le lundi pendant ces 2 minutes.

Seulement quand le marché s'ouvre
 
MessageBox ne montre pas toutes les informations dans le journal. En lisant le journal, on se pose parfois des questions. La solution est la suivante.
// Терминал при 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 sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Particularités de mql5, trucs et astuces

fxsaber, 2020.04.30 08:49

Un problème dans MT5 a provoqué cette situation.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
N'oubliez pas qu'une telle interdiction peut être le résultat du terminal (bug), et non du courtier.

Je l'ai encore eu. Je suppose que cela peut se produire dans de rares situations lors de la reconnexion.

Solution - si elle est fausse, réessayez après une courte pause.

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);
}
 
Lorsque vous voulez attraper un changement dans une variable lors d'une affectation.
if (Value != (Value = NewValue()))
  Print("Value is changed.");
 
fxsaber:
Lorsque vous avez besoin d'attraper un changement dans une variable en cours d'affectation.

Vous avez l'UB ici, vous ne pouvez pas l'utiliser.

 
Vict:

Vous avez l'UB ici, vous ne pouvez pas l'utiliser.

Cela fonctionne, mais vous pouvez suggérer une macro appropriée.

Raison: