Bibliotheken: MultiTester - Seite 41

 
Auch ein 10-sekündiger Ruhezustand hilft nicht. Nur das Löschen des Ordners löst das Problem.
 
klycko Ruhezustand hilft nicht. Nur das Löschen des Ordners löst das Problem.

Posten Sie den Code zur Optimierung von MQL5\Experts\Examples\MACD\MACD Sample.mq5. Dann können Sie versuchen, das Problem zu reproduzieren. Es gibt fast keine konstruktive Arbeit mehr.

 
fxsaber #:

Laden Sie den Code zur Optimierung von MQL5\Experts\Examples\MACD\MACD Sample.mq5 hoch. Dann können Sie versuchen, es zu reproduzieren. Es gibt fast keine konstruktive Arbeit mehr.

Vielen Dank dafür! Ich werde versuchen, die Dateien vorzubereiten und zu posten. Im Moment ist alles noch im unaufgeräumten Zustand.

 
fxsaber #:

Laden Sie den Code zur Optimierung von MQL5\Experts\Examples\MACD\MACD Sample.mq5 hoch. Dann können Sie versuchen, es zu reproduzieren. Es gibt fast keine konstruktive Arbeit mehr.

Guten Tag!

Ich habe die Dateien vorbereitet und angehängt.

Optimierung vom 25.03 bis 20.05.2024 auf den Zeitrahmen M1.

Einlage 17000. Hebel 40. Maximum des komplexen Kriteriums.


Zunächst müssen wir für die Reinheit des Experiments den Ordner "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" bereinigen.

Das Nocturne-Skript sollte mit jeweils einem Parameter ausgeführt werden, um es zu optimieren.

Dann wird es ausgegeben:

Für den ersten Parameter: ProfitNow -1478 ParamMax 0.37 zum ersten Mal.

Für den zweiten Parameter: ProfitNow -379 ParamMax 30 für das erste Mal.

Für den dritten Parameter: ProfitNow -379 ParamMax 6 zum ersten Mal.


Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt.


Dies zeigt, dass der Datencache beim dritten Parameter hängen bleibt.


Und jetzt müssen wir den Ordner "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" wieder löschen

Und dann ist es eine Wiederholung:


Für den ersten Parameter: ProfitNow -1478 ParamMax 0.37 zum ersten Mal.

Für den zweiten Parameter: ProfitNow -379 ParamMax 30 zum ersten Mal.

Für den dritten Parameter: ProfitNow -379 ParamMax 6 zum ersten Mal.


Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt


In den Zeilen 151-154 des Nocturne-Skripts steht alles so, wie Sie es mir aufgetragen haben:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Holt die Opt-Datei in ein Byte-Array Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // Einspeisen des Byte-Arrays Bytes in den Cache


Der Fehler liegt natürlich in dem von mir geschriebenen Code, aber ich weiß noch nicht, wie ich ihn beheben kann.

Ich habe jedoch experimentell herausgefunden, dass, wenn Sie alle opt-Dateien manuell aus dem Ordner "C:\ bytes" entfernen, bevor Sie Run.

aus dem Ordner "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

dann funktioniert mein Code korrekt und führt eine Optimierung für den ausgewählten Parameter durch.


Wenn dieser Ordner nicht bereinigt wird, führt der Tester keine wiederholten Optimierungen (mit denselben unveränderten Daten) durch, sondern liest aus

bereits vorhandene opt-Datei aus diesem Ordner. Dies ist deutlich zu erkennen, wenn dieselbe Optimierung wiederholt manuell durchgeführt wird.

Es ist zu erkennen, dass die eigentliche Optimierung nur beim ersten Mal durchgeführt wird, und dann nur die opt-Datei aus dem Ordner gelesen wird.

Dieses wiederholte Lesen scheint den Inhalt des Caches nicht zu aktualisieren, und das ist die Ursache für den Fehler in meinem Code.


Das Löschen des besagten Ordners könnte helfen, den Fehler zu beheben. Natürlich ist dies eine schlechte Lösung, und es wäre eleganter, die richtigen Daten im Cache wiederherzustellen.

Aber ich weiß nicht, wie man das macht. Im Moment bleiben die Daten der letzten echten Optimierung im Cache hängen (sie passen nicht zum erneuten Einlesen aus dem Ordner).

Leider kann dieser Ordner nicht mit FolderClean aus dem Skript bereinigt werden, da dies in MQL5 verboten ist.

Er befindet sich außerhalb der "Sandbox" und wird nur vom Strategy Tester gefüllt.


Vielleicht sollten Sie ein externes Add-on mit Hilfe von C++ erstellen und es vom Skript aus ausführen.


Mit freundlichen Grüßen, Alexander

Dateien:
 

Fehler im Text:



Guten Tag!

Habe die Dateien vorbereitet und angehängt.

Optimierung vom 25.03 bis 20.05.2024 auf dem Zeitrahmen M1.

Einlage 17000. Hebelwirkung 40. Maximum des komplexen Kriteriums.


Zunächst müssen wir für die Reinheit des Experiments den Ordner "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" bereinigen.

Das Nocturne-Skript sollte mit jeweils einem Parameter ausgeführt werden, um es zu optimieren.

Dann wird es ausgegeben:

Für den ersten Parameter: ProfitNow -1478 ParamMax 0.37 zum ersten Mal.

Für den zweiten Parameter: ProfitNow -379 ParamMax 30 für das erste Mal.

Für den dritten Parameter: ProfitNow -379 ParamMax 6 zum ersten Mal.


Für den ersten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den zweiten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt.


Dies zeigt, dass der Datencache für den dritten Parameter hängen geblieben ist.


Und jetzt müssen wir den Ordner "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" wieder löschen

Und dann ist es eine Wiederholung:


Für den ersten Parameter: ProfitNow -1478 ParamMax 0.37 zum ersten Mal.

Für den zweiten Parameter: ProfitNow -379 ParamMax 30 zum ersten Mal.

Für den dritten Parameter: ProfitNow -379 ParamMax 6 zum ersten Mal.


Für den ersten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den zweiten Parameter: ProfitNow -379 ParamMax 6 wiederholt

Für den dritten Parameter: ProfitNow -379 ParamMax 6 wiederholt.


In den Zeilen 151-154 des Nocturne-Skripts steht alles so, wie Sie es mir aufgetragen haben:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Holt die Opt-Datei in ein Byte-Array Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // Einspeisen des Byte-Arrays Bytes in den Cache


Der Fehler liegt natürlich in dem von mir geschriebenen Code, aber ich weiß noch nicht, wie ich ihn beheben kann.

Ich habe jedoch experimentell herausgefunden, dass, wenn Sie alle opt-Dateien manuell aus dem Ordner "C:\ bytes" entfernen, bevor Sie Run.

aus dem Ordner "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

dann funktioniert mein Code korrekt und führt eine Optimierung für den ausgewählten Parameter durch.


Wenn dieser Ordner nicht bereinigt wird, führt der Tester keine wiederholten Optimierungen (mit denselben unveränderten Daten) durch, sondern liest aus

bereits vorhandene opt-Datei aus diesem Ordner. Dies ist deutlich zu erkennen, wenn dieselbe Optimierung wiederholt manuell durchgeführt wird.

Es ist zu erkennen, dass die eigentliche Optimierung nur beim ersten Mal durchgeführt wird, und dann nur die opt-Datei aus dem Ordner gelesen wird.

Dieses wiederholte Lesen scheint den Inhalt des Caches nicht zu aktualisieren, und das ist die Ursache für den Fehler in meinem Code.


Das Löschen des besagten Ordners könnte helfen, den Fehler zu beheben. Natürlich ist dies eine schlechte Lösung, und es wäre eleganter, die richtigen Daten im Cache wiederherzustellen.

Aber ich weiß nicht, wie man das macht. Im Moment bleiben die Daten der letzten echten Optimierung im Cache hängen (sie passen nicht zum erneuten Einlesen aus dem Ordner).

Leider kann dieser Ordner nicht mit FolderClean aus dem Skript bereinigt werden, da dies in MQL5 verboten ist.

Er befindet sich außerhalb der "Sandbox" und wird nur vom Strategy Tester gefüllt.


Vielleicht sollten Sie ein externes Add-on mit Hilfe von C++ erstellen und es vom Skript aus ausführen.


Mit freundlichen Grüßen, Alexander

 

Ich habe meinen Roboter zur Optimierung gepostet, da Nocturne sich an seiner Parameterliste orientiert.

Aber für MQL5\Experts\Examples\MACD\MACD Sample.mq5 braucht es eine Menge Änderungen.


Übrigens, warum brauchen Sie den Parameter input int inNum = 0?

Oder ist das nur ein Atavismus?

 
fxsaber #:

Laden Sie den Code zur Optimierung von MQL5\Experts\Examples\MACD\MACD Sample.mq5 hoch. Dann können Sie versuchen, es zu reproduzieren. Es gibt fast keine konstruktive Arbeit mehr.

Guten Tag!

Es ist mir gelungen, alle meine Probleme mit Hilfe von Alexander Slavsky zu lösen: https://www.mql5.com/de/users/s22aa.

Er hat mir den Code zum Löschen von Cache-Inhalten geschickt.

Ich konnte den Cache nicht direkt löschen, da er außerhalb der Sandbox liegt.

Vielleicht ist es für jemanden nützlich, bevor er die Run-Prozedur ausführt, so dass die Ergebnisse früherer Optimierungen nicht mit den neuen interferieren.

Ich füge dieses Skript als Anhang bei.

Ihre Bibliotheken und dieses Bereinigungsverfahren haben dafür gesorgt, dass ich den Roboter konsistent optimieren kann.

Herzlichen Dank für diese Codes und Ihre Hilfe.

Mit freundlichen Grüßen, Alexander

Aleksandr Slavskii
Aleksandr Slavskii
  • 2024.05.27
  • www.mql5.com
Профиль трейдера
Dateien:
 
klycko wiederholten Optimierungen (mit denselben unveränderten Daten) durch, sondern liest sie aus

bereits vorhandene opt-Datei aus diesem Ordner. Dies ist deutlich zu sehen, wenn dieselbe Optimierung wiederholt manuell ausgeführt wird.

Sie können sehen, dass die eigentliche Optimierung nur beim ersten Mal durchgeführt wird und dann nur die opt-Datei aus dem Ordner liest.

Dieses wiederholte Lesen scheint den Inhalt des Zwischenspeichers nicht zu aktualisieren, und das ist es, was den Fehler in meinem Code verursacht.

sinput uint Range = 2;

void OnTesterInit( void )
{
  ::MathSrand((int)::TimeLocal());

  const int Start = ::MathRand();
  const int Step = ::MathRand();

  const uint TmpRange = (::Range < 2) ? 2 : ::Range;

  ::ParameterSetRange("Range", true, TmpRange, Start, Step, Start + (TmpRange - 1) * Step);
}
 
klycko #:

Code zum Löschen des Inhalts des Cache.

In MTTester.mqh gibt es eine solche sehr gefragte Funktion, wenn man viele Einzelläufe macht.

  static bool DeleteLastTST( void )
  {
    const string Path = ::TerminalInfoString(TERMINAL_DATA_PATH)+ "\\Tester\\cache\\";
    string FileNames[];

    const int Size = MTTESTER::GetFileNames(Path, "*.tst", FileNames);

    return(Size && kernel32::DeleteFileW(Path + FileNames[Size - 1]));
  }

Wenn Sie tst durch opt ersetzen, wird die letzte opt-Datei gelöscht. Es scheint überflüssig zu sein, den gesamten Cache-Ordner zu löschen.

 
Ich danke Ihnen!