Der Strategy Tester von MetaTrader 5 ermöglicht es, statistische Parameter eines Handelssystems nach jedem Testdurchlauf zu erhalten.
Diese statistischen Parameter können über die Funktion TesterStatistics() abgerufen werden, die innerhalb der Funktionen OnTester() und OnDeinit() aufgerufen wird.
Mit der Einführung von Funktionen zur Arbeit mit Optimierungsergebnissen (FrameFirst(), FrameFilter(), FrameNext(), FrameInputs() und FrameAdd()) sind Trader nun in der Lage, Visualisierungen während der Optimierung durchzuführen. Die notwendigen Daten können nun direkt während der Optimierung eines Expert Advisors oder bei der Lösung mathematischer Probleme verarbeitet und angezeigt werden.
Wir betrachten die Details anhand des Beispiels zur Visualisierung der Testergebnisse eines Expert Advisors während der Optimierung, das im Artikel "Visualize a Strategy in the MetaTrader 5 Tester" beschrieben ist.
1. Visualisierung der Balancedynamik während der Optimierung
1.1. Dateien herunterladen
Der Expert Advisor Moving Averages_With_Frames.mq5 sollte in den Ordner terminal_data_folder\MQL5\Experts kopiert werden.
Die folgenden Dateien werden für die Funktion des Expert Advisors benötigt:
- FrameGenerator.mqh - CFrameGenerator-Klasse zur Anzeige der Optimierungsergebnisse;
- SpecialChart.mqh - CSpecialChart-Klasse zum Zeichnen mehrerer Balancediagramme;
- SimpleTable.mqh - CSimpleTable-Klasse, eine einfache Tabelle mit zwei Spalten;
- ColorProgressBar.mqh - CColorProgressBar-Klasse, ein Fortschrittsbalken mit zwei Farben.
Diese sollten in den Ordner terminal_data_folder\MQL5\Include kopiert werden.
Code Base-Programme können automatisch über die MetaTrader 5-Plattform heruntergeladen werden (CodeBase-Registerkarte im "Toolbox"-Fenster). Wählen Sie dazu "Herunterladen". Alle Codes werden heruntergeladen und in ihre Ordner platziert.

Abb. 1. Herunterladen von CodeBase-Programmen über die MetaTrader 5-Plattform
1.2. Testen des Expert Advisors
Der Expert Advisor Moving Averages_With_Frames.mq5 sollte im Strategy Tester gestartet werden.
Testeinstellungen:

Abb. 2. Testeinstellungen für Moving Averages_With_Frames.mq5
Optimierungsoptionen:

Abb. 3. Optimierungsparameter für Moving Averages_With_Frames.mq5
Während der Optimierung zeigt der Expert Advisor die Balancedynamik und statistische Daten der Optimierungsdurchläufe an:

Abb. 4. Optimierung von Moving Averages_With_Frames.mq5
Optimierungsprozess:
1.3. Funktionsprinzip des Expert Advisors
Der Expert Advisor Moving Averages_With_Frames.mq5 basiert auf dem in der Standardinstallation von MetaTrader 5 enthaltenen Moving Averages.mq5 (MQL5\Experts\Examples\Moving Average).
Der folgende Code wurde zur Visualisierung der Ergebnisse hinzugefügt:
//--- Verbindung zum Code für die Arbeit mit Optimierungsergebnissen #include <FrameGenerator.mqh> //--- Rahmen-Generator CFrameGenerator fg; //+------------------------------------------------------------------+ //| Testerfunktion | //+------------------------------------------------------------------+ double OnTester() { //--- hier Ihre Funktion zur Berechnung des Optimierungskriteriums einfügen double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT)); TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia); //--- wird nach jedem Test aufgerufen und das Optimierungskriterium als Parameter übergeben fg.OnTester(TesterCritetia); //--- return(TesterCritetia); } //+------------------------------------------------------------------+ //| TesterInit-Funktion | //+------------------------------------------------------------------+ void OnTesterInit() { //--- Vorbereitung des Diagramms zur Anzeige mehrerer Balance-Linien fg.OnTesterInit(3); // Parameter legt die Anzahl der Balance-Linien im Diagramm fest } //+------------------------------------------------------------------+ //| TesterPass-Funktion | //+------------------------------------------------------------------+ void OnTesterPass() { //--- Verarbeitung der erhaltenen Testdaten und grafische Anzeige fg.OnTesterPass(); } //+------------------------------------------------------------------+ //| TesterDeinit-Funktion | //+------------------------------------------------------------------+ void OnTesterDeinit() { //--- Optimierung beendet fg.OnTesterDeinit(); } //+------------------------------------------------------------------+ //| Ereignisbehandlung für Diagramme | //+------------------------------------------------------------------+ void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- zeigt die Rahmenanzeige nach dem Ende der Optimierung an, wenn auf den Header geklickt wird fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 ist eine Pause in ms zwischen den Aufnahmen } //+------------------------------------------------------------------+
Dieser Code kann auch in jedem Expert Advisor verwendet werden.
Die CFrameGenerator-Klasse wird für die Arbeit mit den Optimierungsergebnissen verwendet. Die Klasse enthält Methoden zur Verarbeitung der Ereignisse des Strategy Testers (OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit()) und die Methode für Diagrammereignisse (OnChartEvent()).
Die OnTester()-Methode der CFrameGenerator-Klasse wird nach jedem Testdurchlauf auf einem Testagenten aufgerufen. Diese Methode ermöglicht die Berechnung der Dynamik der Balanceskurve basierend auf den Handelsergebnissen. Das Diagramm der Balanceskurve ist ein eindimensionales Array, dessen Länge von der Anzahl der ausgeführten Geschäfte abhängt.
Anschließend wird die Funktion TesterStatistics() verwendet, um statistische Daten abzurufen (Nettoertrag, Profitfaktor, Recovery-Faktor, Anzahl der Trades, Anzahl der Geschäfte, maximaler Drawdown-Prozentsatz, Wert des benutzerdefinierten Optimierungskriteriums) und ein Frame (Datenarray des Testdurchlaufs, in unserem Fall) wird generiert und über die Funktion FrameAdd() an das Terminal (vom Testagenten) gesendet.
Die Frames werden in der OnTesterPass()-Methode der CFrameGenerator-Klasse empfangen und verarbeitet. Der Lesevorgang der Frames erfolgt über die Funktion FrameNext(). Die Anfrage nach den Eingabeparametern des Expert Advisors, für die das Frame generiert wurde, erfolgt über die Funktion FrameInputs().
Nach dem Abrufen der Daten werden diese angezeigt und aktualisiert, indem die Methoden der Klassen CSimpleTable, CColorProgressBar und CSpecialChart verwendet werden.
Es sollte angemerkt werden, dass die Ausführung der OnTester()-Verarbeitungsfunktionen auf dem Testagenten nach Abschluss eines weiteren aktuellen Optimierungslaufs erfolgt. Dies ermöglicht die Nutzung der verteilten Netzwerkressourcen des MQL5 Cloud Network, um komplexe mathematische Berechnungen durchzuführen. Zu diesem Zweck sollte der Berechnungsteil in den OnTester-Ereignishandler integriert werden.
Ein Beispiel zur Verwendung der Optimierung zur Beschleunigung mathematischer Berechnungen (kontinuierliche Wavelet-Transformation der Weierstrass-Funktion) wird im Thema "Verwaltung von Optimierungsprozessen in Echtzeit und Übertragung massiver Daten von den Agenten zu MetaTrader 5" gezeigt.
2. Beispiele für die Arbeit mit den Klassen CSimpleTable, CColorProgressBar und CSpecialChart
Die angehängten Skripte Test_SimpleTable.mq5 und Test_CSpecialChart.mq5 enthalten Beispiele für die Arbeit mit den Klassen CSimpleTable, CColorProgressBar und CSpecialChart. Sie sollten in den Ordner terminal_data_folder\MQL5\Scripts kopiert werden.

Abb. 5. Ergebnis der Ausführung des Skripts Test_SimpleTable.mq5

Abb. 6. Ergebnis der Ausführung des Skripts Test_CSpecialChart.mq5
Verwandte Beiträge
- Handelssignale mit MQL5 Wizard: Bullish und Bearish Harami mit CCI bestätigen
- MQL5 Wizard: Trade Signale auf Basis von Kurs-Crossover mit gleitendem Durchschnitt und ADX Bestätigung
- MQL5 Wizard: Handels-Signale mit 3 schwarzen Krähen / 3 weißen Soldaten + CCI für MetaTrader 5
- MQL5 Wizard: Handelssignale durch 3 Schwarze Krähen/3 Weiße Soldaten + RSI
- MQL5 Wizard: Handelssignale mit 3 schwarzen Krähen/3 weißen Soldaten und Stochastik erstellen