Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 174

 
Igor Makanu:

ist anders

es gibt sogenannte Kontroll- und Verwaltungsaufgaben

EA - Verwaltung, Dienstleistung - Kontrolle

Kontrolle sollte nicht überflüssig sein - wenn man alle Ressourcen des Systems verbraucht, erhält man ein instabiles System anstelle von Kontrolle

Worin besteht also die Ersparnis? Der Dienst wird die gleiche Aufzählung von Aufträgen und die gleichen Vergleiche durchführen.

Wenn ein Dienst mehrere Berater "bedienen" soll, indem er ihnen ein "Es hat sich etwas geändert"-Signal sendet, dann ist die Lösung fragwürdig.
Erstens ist es töricht, auf die für eine Entscheidung notwendigen Daten von außen zu warten. Und zweitens werden die Einsparungen, wenn überhaupt, nur im Falle einer Vielzahl von Expert Advisors in einem Terminal erzielt.

Dies ist eher ein theoretischer Trick, in der Praxis haben wir keine Probleme mit der Auftragssuche im EA.

 
Eine Art Störung im MT5 hat diese Situation hervorgerufen.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Beachten Sie, dass ein solches Verbot möglicherweise auf das Terminal (Bug) und nicht auf den Broker zurückzuführen ist.
 
fxsaber:
Diese Situation wurde durch eine Art MT5-Fehler ausgelöst. Beachten Sie, dass dieses Verbot möglicherweise auf das Terminal (Bug) und nicht auf den Broker zurückzuführen ist.

Es ist nicht die gleiche Situation wie Robo, die ersten 2 Minuten der Handel geschlossen ist und die Kurse gehen?

Ich weiß nur nicht mehr, ob der Handel jeden Tag oder nur montags für diese 2 Minuten verboten ist.

 
Alexey Viktorov:

Es ist nicht die gleiche Situation wie Robo, die ersten 2 Minuten der Handel geschlossen ist und die Kurse gehen?

Ich weiß nur nicht mehr, ob jeden Tag oder nur montags diese 2 Minuten nicht gehandelt werden dürfen.

Nein, das ist mitten am Tag. MT5-Fehler, der Broker ist nicht beteiligt.

 
Alexey Viktorov:

Ich weiß nur nicht mehr, ob der Handel jeden Tag oder nur montags für diese 2 Minuten verboten ist.

Nur wenn der Markt öffnet
 
DieMessageBox zeigt nicht alle Informationen im Protokoll an. Beim Lesen des Protokolls tauchen manchmal Fragen auf. Die Lösung lautet wie folgt.
// Терминал при 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 zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Eigenheiten von mql5, Tipps und Tricks

fxsaber, 2020.04.30 08:49

Ein Fehler im MT5 hat diese Situation ausgelöst.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Beachten Sie, dass ein solches Verbot möglicherweise auf das Terminal (Bug) und nicht auf den Broker zurückzuführen ist.

Ich habe es wieder. Ich gehe davon aus, dass dies in seltenen Fällen beim erneuten Einloggen auftreten kann.

Lösung - falls falsch, versuchen Sie es nach einer kurzen Pause erneut.

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);
}
 
Wenn Sie eine Änderung in einer Variablen bei der Zuweisung abfangen wollen.
if (Value != (Value = NewValue()))
  Print("Value is changed.");
 
fxsaber:
Wenn Sie eine Änderung in einer Variablen bei der Zuweisung abfangen müssen.

Sie haben UB hier, Sie können sie nicht benutzen.

 
Vict:

Sie haben UB hier, Sie können sie nicht benutzen.

Es funktioniert, aber Sie können ein geeignetes Makro vorschlagen.