Und es ist nicht bedingungslos Nullen, sondern nur, wenn last_error_fifo == 0. Kurz gesagt, es ist das gleiche wie Eier im Profil. überprüfen, was die Funktion zurückgegeben, bevor Sie für Fehler.
1. Kein Fehler. Sie rufen weiterhin GetLastError() auf - im Prinzip ist es in Ordnung, wenn der vorherige Fehler gelesen, verarbeitet und zurückgesetzt wird.
IMHO müssen Sie das nicht.
2. Es gibt einen Fehler - wenn Sie GetLastError() aufrufen , analysieren Sie , soweit ich weiß , einen einzigen Fehler, obwohl es viele davon geben kann.
Die letzte ist ErrReaction(err) - das ist die Fehlerbehandlung.
Zum Beispiel so:
int ErrReaction(int err)
{
switch(err)
{
case ERR_TRADE_NOT_ALLOWED :
Print("TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')");
case ERR_INVALID_FUNCTION_PARAMSCNT :
case ERR_INVALID_FUNCTION_PARAMVALUE :
case ERR_INVALID_STOPS :
case ERR_INVALID_TRADE_VOLUME :
case ERR_MARKET_CLOSED :
case ERR_TRADE_DISABLED :
case ERR_NOT_ENOUGH_MONEY :
return(-err);
case ERR_NO_CONNECTION :
............................................
case ERR_BROKER_BUSY :
case ERR_TRADE_CONTEXT_BUSY :
..............................
case ERR_PRICE_CHANGED :
case ERR_OFF_QUOTES :
case ERR_REQUOTE :
.................................................
default: break;
}//switch(err)return(0);
}//int ErrReaction(int err)
Die Verarbeitungsfunktion teilt die Fehler in "behebbare" und "nicht behebbare" ein - die "behebbaren" versucht man zu beseitigen, der Code der nicht behebbaren kehrt zurück - zur Verarbeitung in einer externen (aufrufenden) Prozedur.
Wie auch immer, meine Kakerlaken sind cooler, weil es nicht notwendig ist, zu überprüfen, was jede Funktion zurückgegeben, so dass der Code besser aussieht... Außerdem können Sie Ihre eigenen Fehlercodes organisieren.
Das hängt von Ihrer Logik ab. Schließlich können Sie jeden Fehler bearbeiten, und zwar nur die, die in dieser Situation wichtig sind.
Es ist natürlich wünschenswert, eine Funktion für die Verarbeitung aller wichtigen Fehler zu haben, und dann wird die dem Expert Advisor innewohnende Logik die Prioritäten "anpassen".
Unabhängig davon möchte ich mich beim Themenstarter entschuldigen, wenn meine Frage von der Hauptrichtung des Themas ablenkt.
Irgendwie haben wir genug, um auch unsere eigenen zu machen.
Wer versuchen die Erfinder von MQL5 so sehr, SetUserError zu erstellen... sie haben bis zu 65535 Fehlercodes für sich selbst reserviert, und alles, was darüber liegt, ist in Ordnung, Sie können Ihre eigenen arrangieren :)
2. Es liegt ein Fehler vor - wenn Sie GetLastError() aufrufen, analysieren Sie , soweit ich weiß, einen einzigen Fehler, obwohl es viele geben kann.
IMHO - die korrektere Variante:
Die letzte ist ErrReaction(err) - das ist die Fehlerbehandlung.
Gerade diese Option ist umstritten. Wenn Sie den Fehler nicht löschen und nach OrderSend kein Fehler auftritt, wird der alte Fehler weiterhin verarbeitet.
Es ist natürlich wünschenswert, eine Funktion für die Verarbeitung aller wichtigen Fehler zu haben, und dann wird die dem Expert Advisor innewohnende Logik die Prioritäten "korrigieren".
Ich bin zum Beispiel der Meinung, dass es ausreicht, 5 Mal zu versuchen, einen Auftrag zu eröffnen und dann aufzuhören, während Sie vielleicht denken, dass Sie 20 Mal einen Auftrag eröffnen müssen, um zu gewinnen".
Ich zum Beispiel denke, dass es ausreicht, einen Auftrag 5 Mal zu öffnen und dann aufzuhören, aber Sie denken vielleicht, dass Sie es 20 Mal versuchen müssen oder "bis Sie gewinnen".
Nein, ich zähle nichts. Ich habe keine feste und eindeutige Meinung, deshalb bitte ich Sie, mir die beste Fehlerkorrekturfunktion zu empfehlen.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Und es ist nicht bedingungslos Nullen, sondern nur, wenn last_error_fifo == 0. Kurz gesagt, es ist das gleiche wie Eier im Profil. überprüfen, was die Funktion zurückgegeben, bevor Sie für Fehler.
Entwickeln Sie das Thema.
Genau für Sie, siehe :
OrderSend() Beendigung Optionen;
1. Kein Fehler. Sie rufen weiterhin GetLastError() auf - im Prinzip ist es in Ordnung, wenn der vorherige Fehler gelesen, verarbeitet und zurückgesetzt wird.
IMHO müssen Sie das nicht.
2. Es gibt einen Fehler - wenn Sie GetLastError () aufrufen , analysieren Sie , soweit ich weiß , einen einzigen Fehler, obwohl es viele davon geben kann.
IMHO ist das korrekter:
Die letzte ist ErrReaction(err) - das ist die Fehlerbehandlung.
Zum Beispiel so:
Die Verarbeitungsfunktion teilt die Fehler in "behebbare" und "nicht behebbare" ein - die "behebbaren" versucht man zu beseitigen, der Code der nicht behebbaren kehrt zurück - zur Verarbeitung in einer externen (aufrufenden) Prozedur.
Wie auch immer, meine Kakerlaken sind cooler, weil es nicht notwendig ist, zu überprüfen, was jede Funktion zurückgegeben, so dass der Code besser aussieht... Außerdem können Sie Ihre eigenen Fehlercodes organisieren.
Außerdem können Sie Ihre eigenen Fehlercodes organisieren.
wir haben irgendwie genug, um auch unsere eigenen zu machen.
Das hängt von Ihrer Logik ab. Schließlich können Sie jeden Fehler bearbeiten, und zwar nur die, die in dieser Situation wichtig sind.
Es ist natürlich wünschenswert, eine Funktion für die Verarbeitung aller wichtigen Fehler zu haben, und dann wird die dem Expert Advisor innewohnende Logik die Prioritäten "anpassen".
Unabhängig davon möchte ich mich beim Themenstarter entschuldigen, wenn meine Frage von der Hauptrichtung des Themas ablenkt.
Irgendwie haben wir genug, um auch unsere eigenen zu machen.
Wer versuchen die Erfinder von MQL5 so sehr, SetUserError zu erstellen... sie haben bis zu 65535 Fehlercodes für sich selbst reserviert, und alles, was darüber liegt, ist in Ordnung, Sie können Ihre eigenen arrangieren :)
Nur für Sie, siehe :
2. Es liegt ein Fehler vor - wenn Sie GetLastError () aufrufen, analysieren Sie , soweit ich weiß, einen einzigen Fehler, obwohl es viele geben kann.
IMHO - die korrektere Variante:
Die letzte ist ErrReaction(err) - das ist die Fehlerbehandlung.
vit46:
Ознакомьтесь с этим материалом. imho, не повредит.
https://www.mql5.com/ru/forum/131373
Es ist natürlich wünschenswert, eine Funktion für die Verarbeitung aller wichtigen Fehler zu haben, und dann wird die dem Expert Advisor innewohnende Logik die Prioritäten "korrigieren".
Ich bin zum Beispiel der Meinung, dass es ausreicht, 5 Mal zu versuchen, einen Auftrag zu eröffnen und dann aufzuhören, während Sie vielleicht denken, dass Sie 20 Mal einen Auftrag eröffnen müssen, um zu gewinnen".
Ich zum Beispiel denke, dass es ausreicht, einen Auftrag 5 Mal zu öffnen und dann aufzuhören, aber Sie denken vielleicht, dass Sie es 20 Mal versuchen müssen oder "bis Sie gewinnen".
Nein, ich zähle nichts. Ich habe keine feste und eindeutige Meinung, deshalb bitte ich Sie, mir die beste Fehlerkorrekturfunktion zu empfehlen.