![Entwicklung eines Expertenberaters für mehrere Währungen (Teil 7): Auswahl einer Gruppe auf der Grundlage der Vorwärtsperiode](https://c.mql5.com/2/74/Developing_a_multi-currency_advisor_yPart_7c_600x314.jpg)
Entwicklung eines Expertenberaters für mehrere Währungen (Teil 7): Auswahl einer Gruppe auf der Grundlage der Vorwärtsperiode
Einführung
In den vorangegangenen Artikeln habe ich einzelne Instanzen von Handelsstrategien für den gleichen Zeitraum - von 2018 bis 2022 - optimiert. Dies ist ein recht langer Zeitraum, der sicherlich verschiedene Ereignisse enthält, die die Preisdynamik beeinflussen. Andererseits ist er nicht zu groß und die Zeit für einen Durchlauf bleibt klein genug — innerhalb von einigen zehn Sekunden. Der gewählte Zeitraum ist so gestaltet, dass bis zum aktuellen Zeitpunkt noch mehr als ein Jahr verbleibt. Auf diese Weise kann man sehen, wie sich die Strategieinstanzen in dem Abschnitt der Historie verhalten werden, der bei der Optimierung ihrer Parameter nicht verwendet wurde.
Der Standard-MetaTrader 5-Tester kann einzelne Durchläufe und Optimierungen unter Berücksichtigung des Vorhandenseins der sogenannten Vorwärtsperiode durchführen. Dabei teilt der Tester den gesamten angegebenen Prüfzeitraum in zwei Teile auf — der Hauptperiode und der Vorwärtsperiode. Am Ende der Hauptperiode werden alle Handelsgeschäfte geschlossen und der Saldo des Handelskontos wird auf den Ausgangszustand zurückgesetzt. Dann arbeitet der EA wieder mit der Vorwärtsperiode, und alle vom Tester gesammelten Statistiken werden getrennt für die Haupt- und die Vorwärtsperiode berechnet.
Im Bereich des maschinellen Lernens werden die Begriffe „In-Sample“ und „Out-Of-Sample“ (IS und OOS) häufig verwendet, um den Datensatz zu bezeichnen, auf dem Modelle trainiert und getestet werden. In unserem Gebiet wird die Hauptperiode die Rolle des IS spielen, und die Vorwärtsperiode wird OOSsein. Denken Sie daran, dass OOS ein umfassenderes Konzept ist als das der Vorwärtsperiode. Wir können EA-Tests durchführen, ohne die Vorwärtsperiode im Tester anzugeben, aber wenn der Testzeitraum außerhalb des Zeitraums liegt, für den die Optimierung durchgeführt wurde, dann ist dies immer noch ein Test auf OOS.
Da wir in der Vergangenheit nicht viel mit OOS-Tests gearbeitet haben (außer am Ende dieses Artikels), ist es nun an der Zeit zu sehen, ob es möglich ist, vergleichbare Ergebnisse zu erzielen, wenn man mit der Vorwärtsperiode arbeitet, wie es die EAs für die Hauptperiode zeigen.
Vorwärtsperiode für vorgefertigte EAs
Betrachten wir die Ergebnisse der EAs aus dem vorherigen Artikel für eine Gruppe manuell ausgewählter Strategien und die besten Gruppen automatisch ausgewählter Strategien auf der Grundlage des maximalen Gewinns. Ich werde das gesamte Jahr 2023 als Vorwärtsperiode nehmen. Drei Monate des Jahres 2024 werden vorerst in der Reserve belassen. Das gewünschte Ergebnis für uns ist ein Gewinn in der Vorwärtsperiode, der ungefähr fünfmal geringer ist als in der Hauptperiode, weil die Vorwärtsperiode fünfmal kürzer ist als die Hauptperiode. Die Inanspruchnahme (Drawdown) des Terminkontrakts sollte vorzugsweise ungefähr gleich oder geringer sein als die der Hauptperiode.
Beginnen wir mit einer Gruppe von manuell ausgewählten Strategien (BaselineExpert.mq5 EA). Der vertikale Abschnitt der blauen Linie trennt in der Grafik deutlich die Hauptperiode von der Vorwärtsperiode. An dieser Grenze ist der Kontostand wieder gleich 10.000 USD. Der Teil des Diagramms, der sich auf die Vorwärtsperiode bezieht, nimmt nur einen kleinen Teil der gesamten Grafik ein. Wenn wir das genauer untersuchen wollen, können Sie einen separaten Testlauf nur für das Zeitintervall durchführen, das sich hier auf die Vorwärtsperiode bezieht.
Hauptperiode
Vorwärts-Periode
Abb. 1. BaselineExpert.mq5 EA-Ergebnisse für Haupt- und Vorwärtsperiode
In diesem Fall ist deutlich zu erkennen, dass die Ergebnisse auch ohne einen separaten Durchgang für die Vorwärtsperiode deutlich schlechter ausfallen. Dies bedeutet jedoch nicht, dass die Strategie vollständig aufgegeben wird. Die Inanspruchnahme stieg von 10 % auf 12 %, und die Erholungsphase dauerte mehr als sechs Monate. Dies ist jedoch noch keine Trendwende in der Saldenkurve. Oder doch nicht? Wie auch immer man es betrachtet, die Ergebnisse müssen verbessert werden.
Betrachten wir nun die beste Gruppe, die ohne Clustering-Sets ausgewählt wurde (OptGroupExpert.mq5 EA).
Hauptperiode
Vorwärts-Periode
Abb. 2. OptGroupExpert.mq5 EA-Ergebnisse für Haupt- und Vorwärtsperiode
Auch für diese Gruppe von Strategien sind die Ergebnisse deutlich schlechter als erwartet, obwohl am Ende der Vorwärtsperiode noch ein kleiner Gewinn erzielt wurde. Die Inanspruchnahme hat sich um fast das Eineinhalbfache erhöht. Es scheint, dass die beste Gruppe in der Hauptperiode nicht länger ist als die beste Gruppe im Vorlauf.
Betrachten wir nun die Ergebnisse der mit Clustering von Parametersätzen ausgewählten Gruppe (OptGroupClusterExpert.mq5 EA), obwohl bereits der starke Verdacht besteht, dass die Ergebnisse in etwa die gleichen sein werden wie in den beiden vorherigen Fällen.
Hauptperiode
Vorwärtsperiode
Abb. 3. OptGroupClusterExpert.mq5 EA-Ergebnisse für Haupt- und Vorwärtsperiode
Mein Verdacht war in der Tat berechtigt. Die Ergebnisse sind hier ebenso unklar, mit einem noch größeren Rückstand. Daher werden die Ergebnisse für die beste aus der Datei ausgewählte Gruppe, bei der nur ein Satz in einem Cluster übrig ist, nicht dargestellt. Sie sind etwa gleich groß.
Gibt es also Gruppen, deren Ergebnisse in der Vorwärtsperiode unseren Erwartungen entsprechen? Um diese Frage zu beantworten, führen wir eine neue Optimierung durch, allerdings mit einer Vorwärtsperiode, damit wir den EA im Tester nicht manuell in der Vorwärtsperiode für alle Gruppen von Parametersätzen starten müssen, die bei der vorherigen Optimierung ermittelt wurden.
Optimierungsergebnisse mit Vorwärtsperiode
Wir haben also die Optimierungsergebnisse mit einer Vorwärtsperiode für den EA OptGroupClusterExpert.mq5 erhalten. Die verwendete Date mit Parametern war eine Datei mit einem Satz für jeden der 64 Cluster. Für die anfängliche Analyse der Optimierungsergebnisse wird uns wahrscheinlich das gewöhnliche Excel genügen. Exportieren wir die Optimierungsergebnisse der Haupt- und der Vorwärtsperiode in XML-Dateien und speichern sie im Excel-Format:
Abb. 4. Quelldateien mit Optimierungsergebnissen für Haupt- (IS) und Vorwärtsperiode (OOS)
In der Datei für die Vorwärtsperiode gibt es die Spalte „Back Result“, die das in der Hauptperiode mit demselben Satz optimierter Parameter erzielte Ergebnis enthält. Das ist gut, aber wir würden gerne alle anderen Merkmale aus dem Hauptzeitraum daneben sehen. Daher werden wir die Daten aus diesen beiden Tabellen über die Spalte Passschlüssel zu einer einzigen Tabelle zusammenfassen. Die gleichen Werte in dieser Spalte entsprechen den gleichen Kombinationen von Eingängen im Durchgang.
Nach der Zusammenführung färben wir die Daten für den Hauptperiode und den Vorwärtsperiode in unterschiedlichen Farben ein, blenden einige Spalten vorübergehend aus und sortieren die Daten in absteigender Reihenfolge nach dem normalisierten Gewinn in der Hauptperiode:
Abb. 5. Kombinierte Ergebnisse für Haupt- und Vorwärtsperiode
Es ist klar, dass die besten Ergebnisse in der Hauptperiode zumeist negativ ausfallen. Die Ergebnisse sind keineswegs katastrophal (Verlust von 3-5 % der Ersteinlage pro Jahr), aber sie sind sicherlich nicht gut.
Erinnern wir uns daran, wie wir die Werte in der Datei Forward Result und Back Result Spalten erhalten. Dies ist das Ergebnis der Funktion OnTester(), die der EA nach dem Durchlauf zurückgibt. Wir nennen diesen Wert normalisierten Gewinn und berechnen ihn wie folgt:
Result = Profit * (10% / EquityDD),
wobei Profit der während des Testzeitraums erzielte Gewinn ist und EquityDD die maximale, relative Inanspruchnahme von Mitteln während des Testzeitraums.
Die Bedeutung dieses berechneten Wertes ist der geschätzte Gewinn während des Testzeitraums, der erzielt werden könnte, wenn die Größe der eröffneten Positionen so verändert würde, dass die maximale relative Inanspruchnahme 10 % erreicht.
Die Parameterergebnisse können korrekt verglichen werden, wenn der gleiche Positionsskalierungsfaktor für die Vorwärtsperiode und die Hauptperioden verwendet wird: coeff = (10% / EquityDD). Es wäre für uns problematisch, den Wert dieses Verhältnisses für den Hauptzeitraum während des Vorwärtstest zu erhalten, daher nehmen wir jetzt eine solche Anpassung vor. Die Umrechnungsgleichung sieht dann wie folgt aus:
ForwardResultCorrected = ForwardResult * (coeff_IS / coeff_OOS)
= ForwardResult * (EquityDD_OOS / EquityDD_IS)
Nach Anwendung der Anpassung erhalten wir die folgenden Ergebnisse:
Abb. 6. Ergebnisse nach Neuberechnung des normalisierten Gewinns in der Vorwärtsperiode
Wir sehen, dass die Ergebnisse in der Vorwärtsperiode in absoluten Werten gestiegen sind. Dies ist aus den folgenden Gründen richtig. Stellen wir uns vor, wir nehmen zum Beispiel den zweiten Satz von Parametern für den Hauptzeitraum. Ausgehend von der Tatsache, dass der Drawdown bei 1,52 % lag, erhöhen wir die Positionsgröße um das 10 / 1,52 = 6,58-fache, um die angestrebte Inanspruchnahme von 10 % zu erreichen. Wenn wir also noch nichts über die Vorwärtsperiode wissen, müssten wir auch den Umfang der Positionen um das 6,58-fache erhöhen. Wenn aber in diesem Fall der in der Vorwärtsperiode erzielte Gewinn -98 beträgt, sollte der normalisierte Gewinn durch Multiplikation des Gewinns mit demselben Verhältnis von 6,58 berechnet werden. Wir erhalten also -635 statt -240. Der Wert von -240 war kleiner, weil die Inanspruchnahme in der Vorwärtsperiode fast dreimal so groß war (4,03 % statt 1,52 %) und bei der Berechnung des normalisierten Gewinns das Verhältnis 10 / 4,03 = 2,48 betrug, also fast dreimal kleiner war.
Die Ergebnisse sind nicht sehr angenehm. Versuchen wir jetzt, etwas Ermutigenderes zu finden. Zunächst wollen wir sehen, ob wir in der Vorwärtsperiode überhaupt positive Ergebnisse haben. Sortieren wir die Daten nach der Spalte der „Forward Result Corrected“ (korrigierten Vorwärtsergebnisse), so ergibt sich folgendes Bild:
Abb. 7. Ergebnisse sortiert nach dem Ergebnis der Vorwärtsperiode
Dennoch gibt es Gruppen von Sets, die auch in der Vorwärtsperiode positive Ergebnisse aufweisen. Sie entsprechen jenen Gruppen, bei denen der standardisierte Gewinn von etwa 15.000-18.000 in der Hauptperiode erreicht wird. Wir sehen, dass sich hier die Inanspruchnahme zwischen der Haupt- und der Vorwärtsperiode nicht wesentlich unterscheidet und der normalisierte Gewinn in der Vorwärtsperiode etwa ein Fünftel des normalisierten Gewinns in der Hauptperiode beträgt.
Ist es also möglich, gute Gruppen auszuwählen?
Philosophische Frage
Das ist tatsächlich eine sehr schwierige Frage. Sie kann auf unterschiedliche Weise formuliert werden. Zum Beispiel:
- Haben wir das Recht, die Auswahl unter Berücksichtigung der Vorwärtsperiode zu nutzen?
- Würden wir uns nicht selbst täuschen, wenn wir hofften, dass wir mit einer solchen Entscheidung weiterhin ähnliche Ergebnisse erzielen könnten?
- Wie sehr können wir einer solchen Entscheidung vertrauen?
- Werden die Ergebnisse in der neuen Periode für die Vorwärtsperiode offensichtlich besser sein, wenn wir die Gruppe unter Berücksichtigung des Forwards auswählen, als wenn wir ihn nicht berücksichtigen?
- Für welchen zukünftigen Zeitraum können die Ergebnisse wiederholt werden? Ist sie vergleichbar mit dem Vorwärtsperiode?
- Wenn wir zum Beispiel jedes Jahr ein ähnliches Auswahlverfahren durchführen, bedeutet das, dass wir immer eine gute Gruppe für das nächste Jahr haben werden? Was ist mit sechs Monaten? Wie wäre es mit jeder Woche?
Obwohl sie eine gemeinsame Grundlage haben, berühren diese Fragen unterschiedliche Aspekte.
Um zu versuchen, diese Fragen irgendwie zu beantworten, sollten wir uns an den Bayes'schen Ansatz erinnern. Zunächst formulieren wir eine Reihe von Hypothesen (oder Annahmen), dann bewerten wir ihre Wahrscheinlichkeiten, bevor wir neue Daten erhalten. Nach der Durchführung des Experiments aktualisieren wir unsere Schätzungen, um die neuen Daten zu berücksichtigen. Einige Hypothesen werden in unseren Augen immer wahrscheinlicher, während andere immer unwahrscheinlicher werden. Hier betrachten wir die Wahrscheinlichkeit als den Grad unseres Vertrauens in ein bestimmtes Ereignisergebnis.
Unsere Haupthypothese lautet: Die Auswahl einer Gruppe, die die Vorwärtsperiode berücksichtigt, verbessert die Ergebnisse, die im Zeitraum nach dem Vorlauf erzielt werden. Alternativhypothese: Die Auswahl einer Gruppe unter Berücksichtigung der Vorwärtsperiode führt nicht zu besseren Ergebnissen.
Ein mögliches Experiment bestünde darin, eine Anzahl von Gruppen unter Berücksichtigung der Vorwärtsperiode und mehrere Gruppen ohne Auswahl der Vorwärtsperiode auszuwählen. Dann testen wir alle ausgewählten Gruppen in der Zeit nach der Vorwärtsperiode.
Wenn die Gruppen, die mit Blick auf die Vorwärtsperiode ausgewählt wurden, besser abschneiden als die Gruppen, die ohne Vorwärtsperiode ausgewählt wurden, dann ist dies ein schwacher Beweis für die Haupthypothese. Unser Vertrauen in die Gültigkeit der Haupthypothese wird steigen.
Wenn die Ergebnisse für die Gruppen, die ohne Berücksichtigung der Vorwärtsperiode ausgewählt wurden, annähernd gleich oder besser sind, dann ist dies ein schwacher Beweis für die Alternativhypothese. Gleichzeitig kann keine der Hypothesen vollständig zurückgewiesen werden, da die Ergebnisse, die eine Gruppe von Strategien in der Zeit nach der Vorwärtsperiode zeigt, von vielen anderen Faktoren abhängen, abgesehen von der Methode der Auswahl in Gruppen. Es könnte einfach nur eine insgesamt schlechte Zeit für die verwendeten Strategien gewesen sein, und daher könnte die eine oder andere Methode zur Auswahl von Strategien in Gruppen keine spürbaren Auswirkungen gehabt haben.
Mehr können wir uns hier wahrscheinlich nicht leisten.
Die Formulierung „unter Berücksichtigung der Vorwärtsperiode“ kann leicht falsch verstanden werden. Wenn wir die Selektion unter Berücksichtigung der Vorwärtsperiode anwenden, bedeutet dies, dass die Periode, die zuvor eine Vorwärtsperiode (OOS) war, nun keine OOS-Periode mehr ist und zu einer IS-Periode wird, obwohl wir sie weiterhin Vorwärtsperiode nennen. Das bedeutet, dass wir für die Bewertung der Handelsergebnisse eine neue Vorwärtsperiode verwenden müssen (Vorwärts gefolgt von Vorwärts, entschuldigen Sie die Tautologie).
Lassen Sie uns das Experiment, das wir durchführen wollen, um zusätzliche Informationen zu erhalten, genauer beschreiben. Nehmen wir an, wir haben historische Daten für den Zeitraum von 2018 bis einschließlich 2023. Auf dieser Grundlage wollen wir eine Gruppe von Strategien auswählen, die im Jahr 2024 gute Ergebnisse zeigen werden. Dann können wir das auf zwei Arten tun:
- Wir führen die Optimierung für den Zeitraum 2018-2023 (IS) durch und wählen die beste Gruppe auf der Grundlage ihrer Ergebnisse aus.
- Durchführung der Optimierung für 2018-2022 (IS) mit gleichzeitiger Überprüfung für die Vorwärtsperiode bis 2023 (OOS). Wir wählen die beste Gruppe aus, die in beiden Zeiträumen gute und annähernd ähnliche Ergebnisse liefert.
Bei der zweiten Methode werden wir höchstwahrscheinlich nicht die gleiche Gruppe auswählen wie bei der ersten. Seine Ergebnisse werden etwas schlechter sein, aber es dauerte ein Jahr in der OOS-Periode, die nicht an der Optimierung teilgenommen hat. Bei der ersten Methode ist es unmöglich, so etwas über die ausgewählte Gruppe zu sagen, da wir sie nicht außerhalb des IS-Zeitraums überprüft haben. Aber bei der ersten Methode haben wir die Gruppe über einen längeren Zeitraum optimiert (trainiert), da wir bei der zweiten Methode 2022 für die Vorwärtsperiode zuweisen und nicht für die Optimierung verwenden mussten.
Welche dieser Methoden wird besser sein? Versuchen wir, ein solches Experiment durchzuführen, indem wir die Ergebnisse der auf zwei Arten ausgewählten Gruppen beim Handel im Jahr 2024 vergleichen.
Auswahl nach der ersten Methode
Um mit der ersten Methode auszuwählen, müssen wir zunächst eine einzige Kopie der Strategie für den Zeitraum 2018-2023 optimieren. Zuvor hatten wir eine solche Optimierung für den Zeitraum bis 2022 durchgeführt, ohne das Jahr 2023 einzubeziehen. Nach der Optimierung erhalten wir eine Reihe von Parametern, die wir, wie im vorigen Artikel beschrieben, in Cluster einteilen werden. Dann führen wir eine Optimierung durch, um aus acht Parametersätzen gute Gruppen auszuwählen. Schauen wir uns die Ergebnisse der besten gefundenen Gruppen von Sets für den Zeitraum 2018-2023 und 2024 an:
Abb. 8. Ergebnisse der OptGroupClusterExpert.mq5-Optimierung zur Auswahl einer Gruppe für den Hauptperiode 2018-2023
Abb. 9. Die Ergebnisse von OptGroupClusterExpert.mq5 zur Auswahl von Gruppen für einen Zeitraum von drei Monaten im Jahr 2024
Es zeigt sich, dass die besten Gruppen, die im Hauptperiode 2018-2023 gefunden wurden, in der Vorwärtsperiode 2024 im Allgemeinen positive Ergebnisse erzielen, die sich jedoch recht deutlich voneinander unterscheiden. Für eine gründlichere Prüfung wählen Sie die oberste Gruppe aus, weisen ihr den Wert des Skalierungsfaktors scale_ = 10 / 2,04 = 5 zu und lassen sie im Tester für den Hauptperiode 2023 und die Vorwärtsperiode 2024 laufen.
2023
2024 (3 Monate)
Abb. 10. Die Ergebnisse von OptGroupClusterExpert.mq5 der besten Gruppe für 2023 und 2024
Auf der Grundlage dieser Ergebnisse ist es nicht möglich, die Aussichten für das weitere EA-Verhalten mit einer solchen Gruppe von Strategieparametern besonders zu bewerten, aber zumindest konnten wir keinen klar erkennbaren Trend zu einem Rückgang der Saldenkurve im Jahr 2024 feststellen. Wir werden uns diese Ergebnisse merken und später darauf zurückkommen, um sie mit den Ergebnissen zu vergleichen, die mit der zweiten Auswahlmethode erzielt wurden.
Auswählen nach der zweiten Methode
2023
2024 (3 Monate)
Fig. 11. Die Ergebnisse von OptGroupClusterExpert.mq5 für 2023 und 2024
Man beachte, dass die Inanspruchnahme für das Jahr 2023 die berechnete Inanspruchnahme für den Hauptuntersuchungszeitraum um fast das Doppelte übersteigt: 1820 USD anstelle von 1000 USD.
Verwenden Sie den folgenden Algorithmus, um in Gruppen zu selektieren, und berücksichtigen Sie dabei das Jahr 2023 als Vorwärtsperiode:
- Berechnen Sie in der kombinierten Tabelle der Optimierungsergebnisse für 2018-2022 (Hauptperiode) und für 2023 (Vorwärtsperiode) das Verhältnis der Werte in der Haupt- und Vorwärtsperiode für alle Parameter. Zum Beispiel im Falle der Anzahl der Handelsgeschäfte:
TradesRatio = OOS_Trades / IS_Trades.
Je näher diese Verhältnisse bei 1 liegen, desto mehr stimmen die Werte dieser Parameter in den beiden Zeiträumen überein. Führen wir für den Gewinnparameter eine Kennzahl ein, die den unterschiedlichen Zeiträumen Rechnung trägt — in einem Jahr sollte der Gewinn etwa fünfmal geringer sein als in fünf Jahren:
ResultRatio = OOS_ForwardResultCorrected * 5 / IS_BackResult. - Berechnen wir für alle diese Beziehungen die Summe ihrer Abweichungen von der Einheit. Dieser Wert ist unser Maß für die Differenz zwischen den Ergebnissen der einzelnen Gruppen im Haupt- und in der Vorwärtsperiode:
SumDiff = |1 - ResultRatio| + ... + |1 - TradesRatio|. -
Vergessen wir nicht, dass die Inanspruchnahme für jeden Durchgang in der Haupt- und der Vorwärtsperiode unterschiedlich sein kann. Wählen wir die maximalen Inanspruchnahme aus zwei Perioden und berechnen daraus den Skalierungsfaktor für die Größe der eröffneten Positionen, um den standardisierten Drawdown von 10 % zu erreichen:
Scale = 10 / MAX(OOS_EquityDD, IS_EquityDD).
-
Nun wollen wir die Sets mit der Prävalenz von Scale über SumDiff auswählen. Dazu wird der letzte Parameter berechnet:
Res = Scale / SumDiff.
-
Sortieren wir alle Gruppen nach dem im vorherigen Schritt Res berechneten Wert in absteigender Reihenfolge. In diesem Fall befinden sich die Gruppen, deren Ergebnisse in der Haupt- und in der Vorwärtsperiode ähnlicher waren und der Rückstand in beiden Perioden geringer war, an der Spitze der Tabelle.
- Nehmen wir als erstes die Gruppe ganz oben. Um die nächste Gruppe auszuwählen, sortieren wir alle Gruppen aus, die die gleichen Cluster-Indizes wie die erste Gruppe haben, und nehmen wieder die Gruppe, die ganz oben steht. Wiederholen wir dies ein paar Mal und sortieren nun alle Indizes aus, die in den zuvor ausgewählten Gruppen enthalten waren. Die daraus resultierenden vier Gruppen werden wir für den neuen EA übernehmen.
Um die Zusammenarbeit ausgewählter Gruppen auf der Grundlage des EA OptGroupClusterExpert.mq5 zu testen, erstellen wir einen neuen EA und nehmen einige kleinere Änderungen daran vor. Da der EA nicht zur Optimierung verwendet wird, können die Funktionen OnTesterInit() und OnTesterDeinit() aus ihm entfernt werden. Wir können auch die Eingaben entfernen, die die Indizes der in die Gruppe aufzunehmenden Parametersätze angeben, da wir sie im Code auf der Grundlage des durchgeführten Auswahlverfahrens fest codieren werden.
In der Funktion OnInit() erstellen wir zwei Arrays — strGroups für die ausgewählten Gruppen und scales für die Gruppenmultiplikatoren. strGroups sind Zeichenketten, die die Indizes der Parametersätze enthalten, getrennt durch Kommas.
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // Load strategy parameter sets int totalParams = LoadParams(fileName_, params); // If nothing is loaded, report an error if(totalParams == 0) { PrintFormat(__FUNCTION__" | ERROR: Can't load data from file %s.\n" "Check that it exists in data folder or in common data folder.", fileName_); return(INIT_PARAMETERS_INCORRECT); } // Selected set groups string strGroups[] = {"55,12,3,35,48,54,16,40", "11,54,33,30,62,6,10,23", "50,15,8,34,2,36,4,9", "26,42,25,22,36,51,53,0" }; // Scaling factors for selected set groups double scales[] = {4.16, 3.40, 3.33, 2.76 }; // Set parameters in the money management class CMoney::DepoPart(expectedDrawdown_ / 10.0); CMoney::FixedBalance(fixedBalance_); // Create an EA handling virtual positions expert = new CVirtualAdvisor(magic_, "SimpleVolumes_OptGroupForwardCluster"); CVirtualStrategyGroup *groups[ArraySize(strGroups)]; FOREACH(strGroups, { // Form the string from the parameter set indices separated by commas string strIndexes = strGroups[i]; // Turn the string into the array string indexes[]; StringSplit(strIndexes, ',', indexes); // Create and fill the array of all strategy instances CVirtualStrategy *strategies[]; FOREACH(indexes, { // Remove the cluster number from the parameter set string string param = CSVStringGet(params[StringToInteger(indexes[i])], 0, 11); // Add a strategy with a set of parameters with a given index APPEND(strategies, new CSimpleVolumesStrategy(param)) }); // Add the strategy to the next group of strategies groups[i] = new CVirtualStrategyGroup(strategies, scales[i]); }); // Form and add the group of strategy groups to the EA expert.Add(CVirtualStrategyGroup(groups, scale_)); return(INIT_SUCCEEDED); }
Wir speichern diesen Code in der Datei OptGroupForwardClusterExpert.mq5 im aktuellen Ordner.
Schauen wir uns die EA-Testergebnisse an. Wie beim letzten Mal werden wir zwei Zeiträume in einem Durchgang kombinieren - 2023 und die ersten drei Monate des Jahres 2024.
2023
2024 (3 Monate)
Abb. 12. Die Ergebnisse von OptGroupClusterForwardExpert.mq5 für 2023 und 2024
Hier sind die Ergebnisse für das Jahr 2023 deutlich besser: Die steigende Tendenz ist während des gesamten Zeitraums zu beobachten, obwohl es auch einen Zeitraum von März bis Juli gibt, in dem die Saldenkurve kein signifikantes Wachstum aufweist. Die Inanspruchnahme hat sich in diesem Zeitraum ebenfalls verbessert und liegt innerhalb der erwarteten Höchstgrenzen.
Die Ergebnisse für 2024 sind ebenfalls besser, aber nicht besonders erstaunlich. Vielleicht sind drei Monate ein zu kurzer Zeitraum, als dass das Diagramm so schön aussehen würde wie über einen langen Zeitraum von mehreren Jahren.
Vergleicht man diese Ergebnisse mit den Ergebnissen der ersten Methode zur Auswahl guter Gruppen, so ist noch kein klarer Vorteil für eine dieser Methoden erkennbar. Die Ergebnisse sind im Allgemeinen recht ähnlich, aber die zweite Methode erforderte von uns mehr Aufwand als die erste. Da wir jedoch den Handlungsalgorithmus für die zweite Auswahlmethode klar umrissen haben, kann er in Zukunft automatisiert werden.
Schlussfolgerung
Wie wir sehen, hat das durchgeführte Experiment unsere Zuversicht nicht gestärkt, dass es besser ist, eine zusätzliche Periode als Vorlauf zuzuweisen und Gruppen auszuwählen, die die beste Arbeit in beiden Perioden berücksichtigen. Das heißt aber nicht, dass dieser Ansatz nicht genutzt werden sollte. Außerdem haben wir zum Vergleich nur drei Monate aus dem Jahr 2024 herangezogen. Dies ist ein zu kurzer Zeitraum, da wir gesehen haben, dass die angewandte Handelsstrategie Perioden mit Schwankungen des Saldenwachstums um den Nullpunkt haben kann, die bis zu mehreren Monaten dauern können. Daher ist nicht klar, ob die ersten drei Monate des Jahres 2024 den Beginn einer solchen Periode darstellen, die dann von einem Wachstum abgelöst wird, oder ob es überhaupt kein Wachstum geben wird.
Wir könnten versuchen, ein ähnliches Experiment durchzuführen, indem wir die Zeiträume um ein Jahr nach hinten verschieben. In diesem Fall beginnt der Hauptzeitraum im Jahr 2017, die Auswahl nach der zweiten Methode erfolgt im Jahr 2022, und für den Vergleich der beiden Methoden stehen das gesamte Jahr 2023 und der Beginn des Jahres 2024 zur Verfügung.
Wir werden jedoch noch weiter gehen. Nichts hindert uns daran, einige der Gruppen mit der ersten Methode auszuwählen, während wir andere mit der zweiten Methode auswählen und sie in einem EA kombinieren. Aber wie viele Handelsstrategie-Instanzen können wir maximal in einem EA kombinieren, sodass sein Betrieb nicht zu viele Server-Ressourcen beansprucht und keine abnorm hohen Mengen an RAM benötigt? Ich werde versuchen, diese Frage in einem der folgenden Artikel zu klären.
Vielen Dank für Ihre Aufmerksamkeit und bleiben Sie dran!
P.S. Ich habe bei der Vorbereitung dieses Artikels keine Änderungen an den zuvor erstellten Dateien vorgenommen. Ich habe nur eine neue Datei hinzugefügt. Es ist also das einzige, das unten beigefügt ist. Alle anderen Dateien finden Sie im vorherigen Artikel.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/14549
![Erstellen eines täglichen Drawdown-Limits EA in MQL5](https://c.mql5.com/2/83/Creating_a_Daily_Drawdown_Limiter_EA_in_MQL5___LOGO.png)
![Algorithmen zur Optimierung mit Populationen: Vogelschwarm-Algorithmus (BSA)](https://c.mql5.com/2/74/Population_optimization_algorithms_Bird_Swarm_Algorithm_vBSAn____LOGO.png)
![Eine alternative Log-datei mit der Verwendung der HTML und CSS](https://c.mql5.com/2/14/385_10.gif)
![Algorithmen zur Optimierung mit Populationen: Der Wal-Optimierungsalgorithmus (WOA)](https://c.mql5.com/2/73/Whale_Optimization_Algorithm___LOGO.png)
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.