Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 601

 

Hallo zusammen!

Geben Sie Ratschläge, Lösungen oder stochern Sie herum, wo Sie lesen können.

Lösung eines Problems: Fehlerbehandlung beim Aufruf von iCustom()...

// MQL4
void OnTick()
{
....
   ResetLastError();
   double val=iCustom(NULL,0,INDUK_NAME,..., i);
   if ((nErr=GetLastError())>0)
   {
      Print("Error in ",__FUNCTION__," code=",nErr);
      ExpertRemove();
      return;
   }
...
}

Diese Codekonstruktion funktioniert nicht, wenn "iCustom" beim Debuggen von EA im Tester mit der Meldung "array out of range" abstürzt.

 
Ein Array-Überlauf ist ein kritischer Fehler, nach dem dieProgrammausführung angehalten und kein weiterer Code ausgeführt wird. Aus diesem Grund funktioniert Ihr Fehler-Handler nicht. Und Sie brauchen in diesem Fall keinen Fehlercode - im Protokoll steht schwarz auf weiß, was den Absturz verursacht hat. Und sogar die Linie und die Stelle, an der es passiert ist.
 
Sergei Vladimirov:
Array-Überlauf ist ein kritischer Fehler, nach demdas Programm anhält und kein weiterer Code ausgeführt wird. Deshalb funktioniert Ihr Fehlerhandler nicht. Und den Fehlercode brauchen Sie in diesem Fall nicht, er steht schwarz auf weiß im Journal, was den Absturz verursacht hat. Und sogar die Linie und die Stelle, an der es passiert ist.

1. Ich weiß, dass der Fehler im Logbuch steht und dass er kritisch ist

2. Ich verstehe nicht, warum der Tester den EA nicht stoppt und einen Stopp erzwingen muss?

Gibt es Sprachkonstrukte für die Behandlung von Ausnahmen, um den Expert Advisor und seine Interaktion mit dem Benutzer im Falle von kritischen Fehlern auf bequeme Weise zu organisieren?

 
fromme2you:

1. Ich weiß, dass der Fehler im Logbuch steht und dass er kritisch ist

2. Ich verstehe nicht, warum der Tester den EA nicht stoppt und einen Stopp erzwingen muss?

Gibt es Sprachkonstrukte für die Behandlung von Ausnahmen, um den Expert Advisor und seine Interaktion mit dem Benutzer im Falle von kritischen Fehlern auf bequeme Weise zu organisieren?

Der Tester hält an, wenn ein kritischer Fehler (z.B. Division durch 0 oder ein Array-Überlauf) im Code des Expert Advisors aufgetreten ist.

Das Anhalten des Codes im Tester oder im realen Code zu vermeiden, ist meiner Meinung nach nur möglich, wenn wir entsprechende Prüfungen in den Code einbauen. Das ist nicht immer machbar. Dies gilt insbesondere, wenn Sie den Code eines anderen Herstellers verwenden oder den Code eines anderen Herstellers als Unterprogramm in Ihr Produkt einfügen.

Eine andere Möglichkeit besteht darin, die Protokolldateien programmgesteuert zu lesen.

 
Yuri Evseenkov:

Der Tester hält an, wenn ein kritischer Fehler (z.B. Division durch 0 oder Überschreiten eines Arrays) im Code des Ratgebers selbst.... auftritt.

Eine andere Möglichkeit besteht darin, Protokolle programmatisch zu lesen.

Ich verstehe, danke für die Antwort.

Eine weitere Frage: Wie kann ich MT4-Entwickler und MQL-Code-Laufzeit zu setzen einige Gedanken und Anstrengungen in die Entwicklung einer Sprache für die Behandlung von Ausnahmen wie in meinem Beispiel, oder eine ähnliche?

 
fromme2you:

Ich verstehe, danke für die Antwort.

Eine weitere Frage: Wie kann ich die Entwickler von MT4 und MQL-Codeausführungsumgebungen dazu bringen, ihre Köpfe und Hände in die Entwicklung einer Sprache für die Behandlung von Ausnahmen zu stecken, wie in meinem Beispiel oder in ähnlicher Bedeutung?

Wenden Sie sich an Servicedesk, erstellen Sie einen Thread/eine Umfrage im Forum.

Es ist noch gar nicht so lange her, dass MT4 zu Grabe getragen wurde. Nun hat sich der Trend, wenn nicht umgekehrt, so doch zumindest die Plattform und die Sprache in letzter Zeit deutlich verbessert.

 
Yuri Evseenkov:

Kontaktieren Sie Servicedesk, erstellen Sie ein Forumsthema/eine Umfrage.

Es ist noch gar nicht so lange her, da wurde MT4 zu Grabe getragen. Nun hat sich der Trend, wenn nicht umgekehrt, so doch zumindest die Plattform und die Sprache in letzter Zeit deutlich verbessert.

sie wurde 2009 zum ersten Mal vergraben

 

Hallo. Wenn Sie sich mit dem Thema auskennen, geben Sie mir bitte einen Rat, wie ich dieses Problem lösen kann. Ich muss die Eröffnungskurse der Balken zu einem bestimmten Zeitpunkt, z. B. um 01:00 Uhr, finden, indem ich z. B. die letzten 50 Balken analysiere. Ich bin mir nicht sicher, wie ich diese Aufgabe in mql5 angehen soll.


Ob durch Berechnung des aktuellen Datums + Addition der benötigten Zeit dazu und anschließende Addition von vierundzwanzig Stunden, diese Methode funktionierte auf mql4.

Soweit ich verstanden habe, gibt es spezielle Strukturen mit Zeitausgabe, aber ich kann sie aus irgendeinem Grund nicht verwenden.

Vielen Dank im Voraus für Ihr Feedback.

Ich wäre sehr dankbar, wenn mir jemand ein kleines Stück Code zuwerfen könnte, um den Denkprozess zu verstehen.
 
Alex:

Hallo. Wenn Sie sich mit dem Thema auskennen, geben Sie mir bitte einen Rat, wie ich dieses Problem lösen kann. Ich muss die Eröffnungskurse der Balken zu einem bestimmten Zeitpunkt, z. B. um 01:00 Uhr, finden, indem ich z. B. die letzten 50 Balken analysiere. Ich bin mir nicht sicher, wie ich diese Aufgabe in mql5 angehen soll.


Ob durch Berechnung des aktuellen Datums + Addition der benötigten Zeit dazu und anschließende Addition von vierundzwanzig Stunden, diese Methode funktionierte auf mql4.

Soweit ich verstanden habe, gibt es spezielle Strukturen mit Zeitausgabe, aber ich kann sie aus irgendeinem Grund nicht verwenden.

Vielen Dank im Voraus für die Antwort.

Ich wäre sehr dankbar, wenn mir jemand ein wenig Code zukommen lassen könnte, um den Denkprozess zu verstehen.
In einem Indikator oder in einem Expert Advisor/Skript?
 
Hallo. Frage: wenn ich ordersendasync in mt5 für eine schwebende Bestellung verwenden, wie wird es funktionieren? Wird zum Beispiel ein Kaufstopp gesendet, ohne auf eine Antwort zu warten, aber wenn der Auftrag ausgelöst wird, wird auf eine Antwort des Servers auf den Kaufauftrag gewartet?
Grund der Beschwerde: