Ich habe es irgendwie ausgeheckt. Kritik ist willkommen.
Da es sich wahrscheinlich um einen Experten handeln wird:
bool SetSymbols(string);
и:
CSymbolList slMain;
intOnInit()
{
if(!slMain.SetSymbols(inWorkSymbols)) return(-1);
for (int i = 0; i < slMain.GetSymbolCount(); i++)
Print(slMain.GetSymbolName(i));
//--- ok
return(0);
}
Wenn jedoch dieselben drei Zeilen (Code) zuerst in die OnInit()-Funktion des Expert Advisors eingefügt werden und dieser EA im Testmodus gestartet wird, sind die Ergebnisse wie folgt:
Erstens: Der Code funktioniert irgendwie im Testmodus.
Zweitens (und das ist noch wichtiger) geht die Geschichte der ersten paar Tage der Prüfung verloren. So wurde im obigen Beispiel die Prüfung am 03.01.2011 begonnen (wie aus den ersten beiden Zeilen ersichtlich), aber der Prüfer ist sofort nach der Codeverarbeitung um 17 Tage nach vorne gesprungen (in diesem Fall ist dies eine Zeile 2-3), und die Prüfung wird fortgesetzt, ohne diese 17 Tage zu berücksichtigen.
Renat: Sie haben auf triviale Weise einen arithmetischen Überlauf in Das bedeutet, dass Sie 17,5 Tage warten müssen.
Ich streite nicht über den "gefangenen Überlauf", denn ich weiß es nicht :) Die Frage ist, ob eine solche Situation entweder durch den Compiler oder den Tester mit der Ausgabe eines kritischen Fehlers (oder auf andere Weise) unterdrückt werden sollte. Nicht jeder wird genau darauf achten, wie seine Programme funktionieren, wenn es keine Warnungen vom Terminal gibt.
Das Problem ist auch darin zu sehen, dass der Code in den ersten Zeilen von OnInit() platziert ist (d.h. bevor irgendwelche historischen Daten heruntergeladen werden) - aber aus irgendeinem Grund gehen die Daten der ersten 17,5 Tage verloren.
Yedelkin: Sind Sie so sicher, dass Sleep() ignoriert wird? - Sehen Sie sich den Unterschied in der Endzeit zwischen den Zeilen 2 und 3 an.
Vielleicht wirkt sich das bloße Vorhandensein von Sleep (im Vergleich zu seinem Fehlen) im Code irgendwie auf die Gesamtausführungszeit aus, aber die Tatsache, dass Sleep im Tester nicht gezählt wird, ist sicher.
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.
Ich habe es irgendwie ausgeheckt. Kritik ist willkommen.
Da es sich wahrscheinlich um einen Experten handeln wird:
и:
Ich wette darauf, dass das garantiert ist. Zumindest verlasse ich mich ständig darauf, und das Problem ist noch nie aufgetreten.
Verstehe. Wie auch immer, es ist ein heikler Moment.
OnkelVic
Das ist wahr. Aber in meinem Fall ist das überflüssig:
Wie Sie sehen können, gibt es keine Iteration, wenn im letzten Zyklus in OnTick ein Fehler in den Tools auftritt.
Verstehe. Wie auch immer, es ist ein heikler Moment.
OnkelVic
Das ist wahr. Aber in meinem Fall ist das überflüssig:
Wenn im letzten Zyklus ein Fehler in den Werkzeugen auftrat, gibt es keine einzige Iteration in OnTick.
Ich bestehe nicht darauf. Es ist nur richtig, das Ergebnis der Ausführung zu überprüfen.
Ich will es nicht übertreiben. Es ist richtig, nur das Ergebnis der Ausführung zu überprüfen.
Ich habe diesen Trick entdeckt. Wenn ich dieses Skript ausführe, bleibt es "hängen".
Wenn jedoch dieselben drei Zeilen (Code) zuerst in die OnInit()-Funktion des Expert Advisors eingefügt werden und dieser EA im Testmodus gestartet wird, sind die Ergebnisse wie folgt:
Erstens: Der Code funktioniert irgendwie im Testmodus.
Zweitens (und das ist noch wichtiger) geht die Geschichte der ersten paar Tage der Prüfung verloren. So wurde im obigen Beispiel die Prüfung am 03.01.2011 begonnen (wie aus den ersten beiden Zeilen ersichtlich), aber der Prüfer ist sofort nach der Codeverarbeitung um 17 Tage nach vorne gesprungen (in diesem Fall ist dies eine Zeile 2-3), und die Prüfung wird fortgesetzt, ohne diese 17 Tage zu berücksichtigen.
Daraus ergibt sich eine Wartezeit von 17,5 Tagen.
Sie haben sich gerade einen arithmetischen Überlauf in
eingefangen und warten nun seit 17,5 Tagen.
Sie haben auf triviale Weise einen arithmetischen Überlauf in
Das bedeutet, dass Sie 17,5 Tage warten müssen.
Ich streite nicht über den "gefangenen Überlauf", denn ich weiß es nicht :) Die Frage ist, ob eine solche Situation entweder durch den Compiler oder den Tester mit der Ausgabe eines kritischen Fehlers (oder auf andere Weise) unterdrückt werden sollte. Nicht jeder wird genau darauf achten, wie seine Programme funktionieren, wenn es keine Warnungen vom Terminal gibt.
Das Problem ist auch darin zu sehen, dass der Code in den ersten Zeilen von OnInit() platziert ist (d.h. bevor irgendwelche historischen Daten heruntergeladen werden) - aber aus irgendeinem Grund gehen die Daten der ersten 17,5 Tage verloren.
Ja, und es funktioniert im Testgerät, weil Sleep dort ignoriert wird.
Sind Sie so sicher, dass Sleep() ignoriert wird? - Sehen Sie sich den Unterschied in der Endzeit zwischen den Zeilen 2 und 3 an.