MetaTrader 5 Strategy Tester: Bugs, Bugs, Verbesserungsvorschläge - Seite 59

 
Sergey Chalyshev:

Die Parameter in der Ergebniszeile der Optimierung sind korrekt, sie stimmen mit den Parametern im Protokoll des Testers überein, aber der Expert Advisor wird für einen Test mit völlig anderen Parametern ausgeführt.

Ich habe die Eingabeparameter aus dem Expert Advisor selbst entfernt. Sie passten zusammen.

 
fxsaber:

Es ist nur so, dass die Daten des Originalsymbols perfekt mit dem benutzerdefinierten Symbol übereinstimmen. Die benutzerdefinierte Version wird jedoch fehlerfrei übertragen, die ursprüngliche hingegen nicht.

Offensichtlich habe ich nicht verstanden, worum es geht. Das Skript schreibt nur die csv-Datei. Wie wird ein Test mit ihnen durchgeführt?

 
Andrey Khatimlianskii:

Offensichtlich habe ich nicht verstanden, worum es geht. Das Skript schreibt nur csvs. Wie läuft der Test bei ihnen ab?

Das Skript erstellt ein benutzerdefiniertes Symbol und das ursprüngliche (serverseitig importierte) Symbol aus diesen csvs.

D.h. die beiden Symbole haben einen identischen Kursverlauf, sowohl nach Balken als auch nach Ticks.

 
fxsaber:

Das Skript erstellt ein benutzerdefiniertes Symbol und das ursprüngliche(serverseitig importierte) Symbol aus diesen csvs.

D.h. die beiden Symbole haben einen identischen Kursverlauf, sowohl in Balken als auch in Ticks.

Dies hätte erwähnt werden müssen.

Ich kenne die Mechanismen des MT5-Servers für die Arbeit mit der Historie nicht.

 
Der Berater im Frame-Modus beendete das Programm mit Abnormal Termination, woraufhin die 1 GB große mqd-Datei nicht mehr gelesen werden konnte. Als ich das Terminal schloss, wuchs die mqd auf 2 GB an. D.h. Terminal hat FileClose für mqd nicht durchgeführt.
 

Während der Genetik stimmt die Passnummer von FrameNext nicht mit der Passnummer aus der opt-Datei überein.

FrameNext gibt z. B. 10041014291 zurück und opt gibt 2465 zurück.

Was ist der Grund für diese Unterschiede? Wie kann ich das eine mit dem anderen verbinden?

In der GUI-Tabelle werden statt der Durchgangsnummer zwei Zahlen angezeigt. Aber sobald ich die opt-Datei nach der Optimierung wieder öffne, werden die Passnummern zu leeren Werten.


Bitte klären Sie das für GA.


Sie haben gelernt, wie man GA vs. Single-GA-Mismatch reproduzieren kann. Gespeicherte GA durchläuft die Rahmenstatistik. Aber ich kann aus 10K Pässen nicht denjenigen identifizieren, an dem ich interessiert bin. Denn Pass in FrameNext und Pass in opt sind unterschiedliche Werte.

 
fxsaber:

Während der Genetik stimmt die Passnummer von FrameNext nicht mit der Passnummer aus der opt-Datei überein.

FrameNext gibt z. B. 10041014291 zurück und opt gibt 2465 zurück.

Was ist der Grund für diese Unterschiede? Wie kann ich das eine mit dem anderen verbinden?

In der GUI-Tabelle werden statt der Durchgangsnummer zwei Zahlen angezeigt. Aber sobald ich die opt-Datei nach der Optimierung wieder öffne, werden die Passnummern zu leeren Werten.


Bitte klären Sie das für GA.


Sie haben gelernt, wie man die Fehlanpassung von GA und Einzel-GA reproduzieren kann. Gespeicherte GA durchläuft die Rahmenstatistik. Aber ich kann aus 10K Pässen nicht denjenigen heraussuchen, der mich interessiert. Denn Pass in FrameNext und Pass in opt sind unterschiedliche Werte.

2 Zahlen - Generationsnummer, individuelle Nummer.

Wenn leer, dann wird das Ergebnis aus der opt-Datei geladen (d.h. das Ergebnis der vorherigen genetischen Optimierung)

Es gibt zwei Arten von Genetik

(1) Der Parameterraum ist auf eine 64-Bit-Zahl begrenzt. In diesem Fall wird die Berechnung der Parameterzusammensetzung anhand der Genotypnummer auf eine Reihe einfacher arithmetischer Operationen reduziert.

2. Der Parameterraum ist durch eine maximale 64-Bit-Zahl von unten und eine 1024-Bit-Zahl von oben begrenzt. Eine komplexere Umwandlung des Genotyps in eine Reihe von Parametern. In Ihrem Fall scheint es sich um eine Zahleninkongruenz zu handeln, da die Rahmen nur die 64 untersten Bits der Durchgangsnummer enthalten.

Sobald ein neuer Parameter zur Optimierung hinzukommt oder der Start-Stopp eines bestehenden Parameters geändert wird, ändert sich die gesamte Nummerierung. Orientieren Sie sich daher nicht an der Passnummer, sondern an der Zusammensetzung der Parameter

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
 
Slava:

2 Zahlen - Generationsnummer, individuelle Nummer.

Wenn leer, wird das Ergebnis aus der opt-Datei geladen (d. h. das Ergebnis der vorherigen genetischen Optimierung)

Es gibt zwei Arten von Genetik

(1) Der Parameterraum ist auf eine 64-Bit-Zahl begrenzt. In diesem Fall wird die Berechnung der Parameterzusammensetzung anhand der Genotypnummer auf eine Reihe einfacher arithmetischer Operationen reduziert.

2. Der Parameterraum ist durch eine maximale 64-Bit-Zahl von unten und eine 1024-Bit-Zahl von oben begrenzt. Eine komplexere Umwandlung des Genotyps in eine Reihe von Parametern. In Ihrem Fall scheint es sich um eine Zahlendiskrepanz zu handeln, da Rahmen nur eine maximale 64-Bit-Durchgangsnummer enthalten.

Sobald ein neuer Parameter zur Optimierung hinzukommt oder der Start-Stopp eines bestehenden Parameters geändert wird, ändert sich die gesamte Nummerierung. Achten Sie also nicht auf die Nummer des Durchgangs, sondern auf die Zusammensetzung der Parameter

Danke. Wie stimmen Sie dann FrameNext_Pass und opt-Pass ab?

 
fxsaber:

Gelernt, die Diskrepanz zwischen GA und Single zu reproduzieren. Die GA wird durch die Rahmenstatistiken gespeichert. Aber ich kann unter den 10K Pässen nicht denjenigen finden, der mich interessiert. Denn Pass in FrameNext und Pass in opt sind unterschiedliche Werte.

Ich habe den Grund für diese Diskrepanz gefunden!


Vergleich des Stapels, der durch den Rahmen während der GA-Optimierung erhalten wurde. Und der Stapel aus einem einzigen Durchgang.


Im Frame-State basiert die Ausführung auf Ticks, die nicht in der Historie vorhanden sind: Mir ist sofort aufgefallen, dass es viele Geschäfte/Aufträge gibt, die in genau einer Sekunde ausgeführt werden.

Zum Beispiel hat ein einzelner Durchlauf in der Historie einen Eintrag am 2019.06.04 02:00:00.206, aber ein Frame-Durchlauf ist 2019.06.04 02:00:00.000(die Tick-Historie hat keinen Tick zu dieser Zeit).


Die GA-Optimierung läuft nach einem anderen Schema ab als der Einzeldurchlauf! Und diese Geschichte ist nicht immer anders. Wenn ich zum Beispiel GA in einem kleineren Intervall durchführe, ist das in Ordnung.


Der Verdacht, dass ZZY eine Zeitschaltuhr verwendet, fällt weg. Der EA verfügt über keinen Timer.

 
fxsaber:

Ich habe den Grund für diese Diskrepanz gefunden!


Vergleich der Frame-by-Frame-Statistiken während der GA-Optimierung. Und der Stapel aus einem einzigen Durchgang.


Im Frame-State basiert die Ausführung auf Ticks, die nicht in der Historie stehen: Mir ist sofort aufgefallen, dass es viele Geschäfte/Aufträge gibt, die in genau einer Sekunde ausgeführt werden.

Zum Beispiel hat ein einzelner Durchlauf in der Historie einen Eintrag am 2019.06.04 02:00:00.206, aber ein Frame-Durchlauf ist 2019.06.04 02:00:00.000(die Tick-Historie hat zu dieser Zeit keinen Tick).


Die GA-Optimierung läuft nach einem anderen Schema ab als der Einzeldurchlauf! Und diese Geschichte ist nicht immer anders. Wenn ich zum Beispiel GA in einem kleineren Intervall durchführe, ist das in Ordnung.


Der Verdacht, dass ZZY eine Zeitschaltuhr verwendet, fällt weg. Der EA verfügt über keinen Timer.

Prüfung/Optimierung an echten Zecken?

Sind die Agenten Ihre eigenen oder stammen sie aus der Cloud?

Wenn Sie mit einem benutzerdefinierten Symbol testen, sind Cloud-Agenten vom Tisch. Die Agenten sind also intern und Sie können ihre Protokolle abrufen und in den Protokollen sehen, wie der Verlauf synchronisiert wurde.