
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Die intelligente Annahme ist, dass die Übertragung sofort erfolgen soll, ohne dass der Rest des Codes ausgeführt wird. Oder?
Tatsächlich hält TesterStop() den Test aber gar nicht an!
Es wird erwartet, dass, wenn die weitere Codeausführung gestoppt werden muss, einfach return geschrieben wird und keine weitere Ausführung stattfindet. TesterStop(), sowie ExpertRemove()
Und der zweite beobachtete Fehler ist, dass
tester_stop = false;
sie ist überhaupt nicht vorhanden.
Es wird erwartet, dass Sie, wenn Sie die weitere Ausführung des Codes stoppen wollen, einfach return schreiben und es wird keine weitere Ausführung geben. TesterStop() sowie ExpertRemove()
Und der zweite Fehler, der uns aufgefallen ist, ist, dass
ist überhaupt nicht vorhanden.
Das nächste Ereignis ist OnTick() ?
Wohin führt der Ausgang von OnTick()?
Warum ist sie fehl am Platz? Es wurde erwartet, dass die Ausführung diese Zeile nicht erreicht, wenn TesterStop() ausgelöst wurde.
Das nächste Ereignis ist OnTick() ?
Woher nimmt OnTick() die Ausgabe?
Warum ist dies nicht der Fall? Es wurde erwartet, dass die Ausführung diese Zeile nicht erreicht, wenn TesterStop() ausgelöst wurde.
Wo man aussteigt und womit man weitermacht, bleibt dem Entwickler überlassen.
Das Flag tester_stop in diesem Code wird auf false gesetzt, unabhängig davon, ob TesterStop() ausgeführt wird oder nicht
Wohin die Reise geht und was fortgesetzt wird, bleibt dem Entwickler überlassen.
In diesem Code wird das Flag tester_stop auf false gesetzt, unabhängig davon, ob TesterStop() ausgeführt wird oder nicht
Das habe ich schon)))
Die Frage ist, was zu tun ist? Wie kann der Test abgebrochen werden? Um genau zu sein. Entwickler fluchen fast, wenn sieINIT_PARAMETERS_INCORRECT in OnInit() verwenden, und es bläst die Genetik weg.
Ich habe einen Ausweg gefunden und hatte bis vor kurzem keine Probleme. Und jetzt ... Oh, liebe ))))
Und wo kann ich noch aus OnTick() herauskommen?
Das habe ich schon verstanden)))
Die Frage ist, was zu tun ist? Wie kann ich den Test abbrechen? Um genau zu sein. Entwickler fluchen fast, wenn sieINIT_PARAMETERS_INCORRECT in OnInit() verwenden, und es bläst die Genetik weg.
Ich habe einen Ausweg gefunden, aber es gab in letzter Zeit keine Probleme. Und jetzt ... Oh, liebe ))))
Nun, wenn Sie verstehen, was das Problem ist?
Der gesamte Code nach der Ausführung von TesterStop wird nicht ausgeführt. Das heißt, es wird sofort aufhören zu funktionieren. Darüber hinaus können wir das Flag tester_stop anpassen...
Eine weitere Frage: Wie lautet diese Zahl? Ist ein Minus von vielen Neunen ein Versuch, zusätzliche Schmerzen zu bekommen? Das ist der Punkt, an dem es wirklich hässlich wird...
Nun, wenn Sie verstehen, was das Problem ist links?
Der gesamte Code nach der Ausführung von TesterStop wird nicht ausgeführt. Mit anderen Worten: Es wird sofort aufhören zu funktionieren. Von dort aus können wir mit dem Flag tester_stop regulieren...
Eine weitere Frage: Wie lautet diese Zahl? Ist ein Minus von vielen Neunen ein Versuch, zusätzliche Schmerzen zu bekommen? Das ist der Punkt, an dem es wirklich hässlich wird...
Minus eine Menge Neunen ist, um festzustellen, dass die Ausgabe genau durch TesterStop() erfolgte. Ich verwende es nur als Ersatz fürINIT_PARAMETERS_INCORRECT. Deshalb brauche ich alles andere danach nicht. Nun wird aber der gesamte Code ausgeführt und der Programmierer erhält den Fehler "Division durch Null". Klar, wenn ein Array die Größe 1 hat, ist der Wert des Letzteren minus dem Wert des Ersteren immer Null! Und ich hatte mich nicht gegen diesen Fehler oder, oh, entschuldigen Sie, dieses Missverständnis versichert.
Ich habe versucht, Return einzufügen... Nur ein bisschen falsch ))) :
Ich habe es geschafft:
Einfach großartig ))))
Großes DANKESCHÖN!!!
Minus eine Menge Neunen ist, um festzustellen, dass die Ausgabe genau durch TesterStop() erfolgte. Ich verwende es nur als Ersatz fürINIT_PARAMETERS_INCORRECT. Deshalb brauche ich alles andere danach nicht. Nun wird aber der gesamte Code ausgeführt und der Programmierer erhält den Fehler "Division durch Null". Klar, wenn ein Array die Größe 1 hat, ist der Wert des Letzteren minus dem Wert des Ersteren immer Null! Und ich hatte mich nicht gegen diesen Fehler oder, oh, entschuldigen Sie, dieses Missverständnis versichert.
Ich habe versucht, Return einzufügen... Nur ein bisschen falsch ))) :
Ich habe es geschafft:
Einfach großartig ))))
EIN RIESIGES DANKESCHÖN!!!
Danke, das habe ich schon verstanden. Aber das Problem ist damit nicht gelöst. Es kann entweder durch die KonstanteMQL_TESTER_STOP oder durch Änderung des Rückgabewerts von void zu bool gelöst werden.
Eine unerwartete Lösung wurde vonAlexey Viktorov vorgeschlagen: Wenn return nach TesterStop() verwendet wird, scheint alles in Ordnung zu sein. Wie und warum das passiert, kann ich persönlich nicht herausfinden. Trotzdem...
Fügen Sie daher entweder diesen Punkt in die Dokumentation ein oder ändern Sievoid in bool.
P.S. Dieses Problem ist bei mir in Build 2085 aufgetreten. Davor gab es keine Probleme. Sagt mir das etwas? )))
Sergey, das ist nichts Unerwartetes. Im Gegenteil, sie ist logisch und konsequent. Es gibt verschiedene Fälle. Manchmal müssen Sie die Verarbeitung des Ereignisses beenden, bevor der Expert Advisor fertig ist, und manchmal, wie in Ihrem Fall, müssen Sie es sofort beenden. Die Entwickler stehen vor der Frage, ob es richtig ist, sofort anzuhalten und damit die Unzufriedenheit derjenigen zu verursachen, die die Verarbeitung des Ereignisses abschließen müssen, oder nach Abschluss der Ereignisverarbeitung anzuhalten. Jeder Programmierer hat einen Return-Operator in seinem Arsenal, während es im Falle eines erzwungenen Abbruchs nichts gibt.
Und warum müssen Sie den Typ void bei bool ändern, denn auch hier gibt es im Arsenal des Programmierers statische Variablen, die vor oder nach TesterStop () geändert werden können, und im Prinzip wird alles so sein, wie Sie wollen. Und das haben Sie aus irgendeinem Grund in meinem Beispiel ausgelassen.
Sergey, das ist nichts Unerwartetes. Im Gegenteil, alles ist logisch und konsequent. Es gibt verschiedene Fälle. Manchmal müssen Sie die Verarbeitung des Ereignisses beenden, bevor der Expert Advisor fertig ist, und manchmal, wie in Ihrem Fall, müssen Sie es sofort beenden. Die Entwickler stehen vor der Frage, ob es richtig ist, sofort anzuhalten und damit die Unzufriedenheit derjenigen zu verursachen, die die Verarbeitung des Ereignisses abschließen müssen, oder nach Abschluss der Ereignisverarbeitung anzuhalten. Jeder Programmierer hat einen Return-Operator in seinem Arsenal, während es im Falle eines erzwungenen Abbruchs nichts gibt.
Und warum müssen Sie den Typ void bei bool ändern, denn auch hier gibt es im Arsenal des Programmierers statische Variablen, die vor oder nach TesterStop () geändert werden können, und im Prinzip wird alles so sein, wie Sie wollen. Und das haben Sie aus irgendeinem Grund in meinem Beispiel ausgelassen.
Alexey, vielen Dank für deine Hilfe.
Ich verstehe das Problem, mit dem die Entwickler konfrontiert sind, und deshalb schlage ich eine solche Lösung vor. Um in der Lage zu sein, auf die Situation richtig zu reagieren.
Was die statischen Variablen und Ihr Beispiel betrifft, das ich "verworfen" habe... Entschuldigung, aber ich verstehe nicht ganz, wovon ich spreche. Erklären Sie es mir, wenn es Ihnen nichts ausmacht.
Und bitten Sie um etwas Nachsicht und Geduld. Ich habe eine sehr schlechte Lebenssituation, die mich sehr reizbar (ich verstehe es, kann aber nichts dagegen tun) und rücksichtslos macht.
Ich verstehe das überhaupt nicht. Mir schwirrt der Kopf...
Hier ist ein Beispiel:
Mein Code zeigt, dass das Ergebnis -99999999999,88 sein muss, wenn der letzte Array-Wert minus dem ersten Array-Wert vor Null ist.
Aber während der Optimierung erhalte ich dieses Ergebnis:
9587 - 10000 ist auf keinen Fall gleich Null und das Ergebnis ist -9999999999999,88. Wie?!?!? Ich bekomme schon einen Hänger...
Alexey, vielen Dank für deine Hilfe.
Ich verstehe das Problem, mit dem die Entwickler konfrontiert sind, und deshalb schlage ich eine solche Lösung vor. Um in der Lage zu sein, auf die Situation richtig zu reagieren.
Was die statischen Variablen und Ihr Beispiel betrifft, das ich "verworfen" habe... Tut mir leid, aber ich verstehe nicht ganz, worüber wir hier reden. Erklären Sie es mir, wenn es Ihnen nichts ausmacht.
Und bitten Sie um etwas Nachsicht und Geduld. Ich habe eine sehr schlechte Lebenssituation, die mich sehr reizbar (ich bin mir dessen bewusst, kann aber nichts dagegen tun) und unaufmerksam machen kann.
Ich verstehe das überhaupt nicht. Mir schwirrt der Kopf...
Hier ist ein Beispiel:
Mein Code zeigt, dass das Ergebnis -99999999999,88 sein muss, wenn der letzte Array-Wert minus dem ersten Array-Wert vor Null ist.
Aber während der Optimierung erhalte ich dieses Ergebnis:
9587 - 10000 ist auf keinen Fall gleich Null und das Ergebnis ist -9999999999999,88. Wie?!?!? Ich bekomme einen Hänger...
Ich weiß nicht, ob das gut oder schlecht ist, aber ich schaue mir nie den ganzen Code an, deshalb habe ich von einer statischen Variablen gesprochen. Und da das Flag tester_stop in verschiedenen Teilen des Programms verwendet wird, muss dieses Flag auf der Ebene der globalen Variablen deklariert werden.
Es bestätigt, dass Sie die Änderung des Wertes der Flagge in meinem Beispiel unangemessenerweise "verworfen" haben.
Dies ist die Verwendung von
if(tester_stop) return(-99999999999.99);
Und anscheinend ändert sich dieses Kennzeichen entweder überhaupt nicht, oder es ändert sich nicht, weil die Änderung nicht an der richtigen Stelle vorgenommen wird.
Manchmal ist es notwendig, die Ereignisverarbeitung vor der Beendigung des Beraters zu beenden.
Jeder Programmierer hat den Return-Operator in seinem Arsenal, aber es gibt nichts in der erzwungenen Beendigung.
Können wir in diesem Zusammenhang nicht eine Kontrolle durchführen?