![Walk-Forward-Optimierung in MetaTrader 5 - mit eigenen Händen](https://c.mql5.com/i/articles/overlay.png)
Walk-Forward-Optimierung in MetaTrader 5 - mit eigenen Händen
Die Arbeit mit einem Expert Advisor impliziert, dass sich die Phasen der Optimierung und des Handels in vorgegebenen Abständen wiederholen, und dass der Trader positive (oder mindestens verlustfreie) Ergebnisse innerhalb einer langen Periode erwartet. Um die Funktionsfähigkeit eines Systems zu überprüfen, muss man diese Phasen mehrfach wiederholen, d.h. die Optimierung und das Forward-Testen mit einer ständigen Verschiebung der aktuellen Periode aus der Vergangenheit in die virtuelle Zukunft im Tester starten.
Dieses Verfahren heißt Walk-Forward-Optimierung und wird von vielen Tradern angewandt. Leider erlaubt der integrierte MetaTrader Strategietester es nicht, diese Optimierung mit einem Knopf zu starten. Stattdessen muss man den Start des Testers mithilfe externer Tools automatisieren und Berichte des Forward-Testens zusammenführen. Es wäre praktisch, die Forward-Analyse auf eine einfachere Weise, ausschließlich mit Tools von MetaTrader und MQL und ohne Routineaufgaben durchzuführen.
Wir können das in Form einer MQL-Bibliothek implementieren, die in jeden Expert Advisor ganz einfach miteinbezogen werden kann. Die einzige Voraussetzung dafür sind Programmierkenntnisse, weil man den Quellcode des Expert Advisors anpassen muss.
Entwurf
Bevor wir den Funktionsprinzip der Bibliothek beschreiben, führen wir einige Begriffe ein.
Der Zeitraum, in welchem die Optimierung durchgeführt wird, wird gewöhnlich als in-sample Daten bezeichnet. Die nachfolgende Testperiode — als out-of-sample Daten. Einfachheitshalber werden wir dafür auch die Begriffe "Zeitfenster für die Optimierung" (oder einfach "Fenster") und die "Schrittweite des Testens" (oder einfach "Schrittweite", "Test") verwenden.
Die Idee der Umsetzung einer Walk-Forward-Optimierung ist einfach. Im Tester wählt man einen Gesamtzeitraum D, der viel größer als eine übliche Optimierungsperiode sein muss, indem man das Anfangsdatum in die Vergangenheit, zum Punkt B, verschiebt. Dann erlauben wir dem Expert Advisor nur im Rahmen des aktuellen Fensters W von einer vordefinierten Größe und mit der Schrittweite des Testens S zu handeln, dabei D > W >> S. Zum Beispiel, in D muss ein Fenster W und noch ein Dutzend Schritte S hineinpassen.
Das Fenster wird im Anfangspunkt B beginnen, es muss aber später um eine Schrittweite mehrfach nach rechts verschoben werden, bis die rechte Grenze des Fensters das Enddatum des Gesamtzeitraums der Optimierung D erreicht.
Die Werte für die Optimierung sollten nur basierend auf dem Handel innerhalb des Fensters W berechnet werden. Die Kennzahlen des Handels in S werden wir auch zählen und für die weitere Analyse speichern. Auf diese Weise kann man für jedes konkrete Fenster optimale Parameter ermitteln und, wenn man die Nummer des Durchlaufs kennt, einen Link zu den entsprechenden Werten des Testens erhalten.
Dies wiederholt die klassische Walk-Forward Analyse, mit dem Unterschied, dass der Handel in S nicht mit der Ersteinzahlung beginnt, sondern mit dem Betrag, den der Expert Advisor innerhalb der Zeit W verdient hatte. Diese Besonderheit beschränkt die Anwendung der Bibliothek nur auf Strategien mit fester Lotgröße. Die meisten Trader werden wohl zustimmen, dass die Überprüfung mit einer festen Lotgröße der erste Punkt der Analyse jedes Expert Advisors ist, auch wenn man später Money Management zu aktivieren plant.
Wir können den oben beschriebenen "fragmentarischen" Handel implementieren, indem wir dem Expert Advisor spezielle Input-Parameter hinzufügen, die die Größe des Zeitfensters W, die Schrittweite S und die Nummer des Schritts vorgeben, der die Verschiebung des Fensters innerhalb des Gesamtzeitraums D als die Anzahl der Schritte definiert. Zum Beispiel, wenn die Verschiebung gleich 0 ist, beginnt das Fenster im Startpunkt B. Wenn sie gleich 1 ist, beginnt das Fenster im Moment S und endet im Moment S+W. Wenn die Verschiebung gleich 2 ist, beginnt das Fenster im Punkt 2*S und endet in 2*S+W, und so weiter. Wir können den Tester verschiedene Verschiebungen durchsuchen lassen, indem wir die Optimierung nach dem entsprechenden Parameter aktivieren. So organisieren wir eine Vielzahl von Durchläufen des Testers in den Abschnitten, die sowohl in-sample als auch out-of-sample Daten beinhalten, indem wir die längs der Achse der virtuellen Zeit bewegen.
Es bleibt nur diesen Mechanismus als eine Walk-Forward-Optimierung anzupassen. Dafür müssen wir sicherstellen, dass die Optimierung nur nach den Kennzahlen des Handels in jedem Fenster W durchgeführt wird, und sie alle nachfolgenden Testperioden S ignoriert. Dafür kann man benutzerdefiniertes Optimierungskriterium in den Einstellungen des Testers auswählen, es in der Bibliothek basierend auf den Trades innerhalb des aktuellen Fensters W berechnen und es mithilfe des Event-Handlers OnTester in den Tester zurückgeben. Darüber hinaus muss die Bibliothek die Kennzahlen des Handels in jeder nachfolgenden Testperiode S berechnen und speichern. Nach dem Abschluss der Optimierung werden wir eine Vielzahl von Sets von Parametern für jedes Fenster W mit einer Verschiebung um i Schritte haben, aus denen der beste Set ausgewählt wird. Nach der Nummer des Durchlaufs können wir direkt die Kennzahlen des Handels in der nachfolgenden Testperiode S erhalten. Wenn wir diese vereinen, erhalten wir einen vollständigen Bericht über das Forward-Testen innerhalb von D.
Abb.1 Bildung eines Walk-Forward Tests
Die Größen W und S können sich variieren. Man kann zum Beispiel das Optimierungsfenster als 3 Monate auswählen und den Forward-Schritt als 1 Monat. Wenn die Gesamtperiode des Testens D gleich 12 Monate ist, müssen im Tester die Schritte S mit einer Verschiebung von 0 bis 9 (einschließlich) durchlaufen werden. 9 wurde durch eine einfache Berechnung erhalten:
N = (D - W) / S = (12 - 3) / 1 = 9 (1)
In allen Iterationen außer der letzten befindet sich rechts vom W-Fenster der Schritt des Forward-Tests. Aber wenn die Verschiebung gleich 9 ist, nähert sich das Fenter W ganz dicht an das Enddatum an, und der Forward-Test wird nicht mehr möglich sein. Wenn die Walk-Forward-Optimierung sich als erfolgreich erweist, werden die optimalen Parameter dieses letzten Schritts zum empfehlenswerten Set für das Online-Trading.
Den Erfolg der Forward-Optimierung kann man nach verschiedenen Kriterien einschätzen, die wir unten betrachten werden. Uns ist es schon klar, dass die zusammengeführten Schritte des Forward-Testens die Kontostand-Kurve bilden, die durch die üblichen Kennzahlen, Profit-Faktor, Sharpe-Ration, mathematische Erwartung usw. charakterisiert wird.
Gehen wir auf eine andere Frage ein: welche Größe des Fensters W und welche Schrittweite S ausgewählt werden müssen. Es ist logisch, den Tester die optimalen Werte ermitteln zu lassen. Analog zur üblichen Suche durch die Schritte des Forward-Tests mithilfe eines speziellen Inputparameters aus der Bibliothek können wir der Liste der zu optimierenden Parametern auch die Parameter hinzufügen, die das Zeitfenster und die Schrittweite vorgeben.
Die Durchführung einer Walk-Forward-Optimierung mit der Ermittlung der besten Fenstergröße und Schrittweite wird als Cluster-Analyse (cluster walk-forward analysis) bezeichnet.
Mithilfe der Bibliothek können wir basierend auf den Ergebnissen der Optimierung aller drei Parameter einen Bericht erstellen, der eine Tabelle der Ertragskraft des Forward-Testens für verschiedene Kombinationen der Fenstergröße und Schrittweite beinhaltet, sowie einen detaillierten Bericht für jede Zelle der Tabelle, in welchem alle Schritte der Forward-Tests mit entsprechenden Werten von W und S zusammengeführt sind.
Neben den zwei beschriebenen Arbeitsmodi, der Clusteranalyse und dem kontinuierlichen Forward-Testens (in der englischsprachigen auch als rolling walk forward bezeichnet), unterstützt die Bibliothek einen weiteren Modus — den Anker-Modus (anchored walk forward optimization). Er unterscheidet sich vom Rolling-Walk-Forward dadurch, dass das Anfangsdatum des Fensters W sich nie ändert, das Fenster aber bei jedem Schritt durch das Einschließen der Testperiode der vorherigen Iteration immer größer wird. Nehmen wir das Beispiel, in welchem das ursprüngliche Zeitfenster drei Monate beträgt. Vermuten wir, dass der Gesamtzeitraum D im Januar beginnt. Daraus folgt, dass nach dem ersten Schritt, in welchem die Optimierung anhand der Periode von Januar bis März und das Testen im April durchgeführt wird, der zweite Schritt die Optimierung innerhalb der Periode von Januar bis April und das Testen im Mai aktiviert, der dritte Schritt — Optimierung in der Periode von Januar bis Mai, Testen - im Juni, usw.
Es bleibt nur die Idee umzusetzen. Programmierer und Autoren von Expert Advisor können ein solches Tool für sich selbst erstellen. Das ist eine umfangreiche, aber einfache Aufgabe. Für diejenigen, die ein fertiges Produkt erhalten möchten, gibt es die fertige Bibliothek WalkForwardOptimizer (WFO), sowohl für MetaTrader 4, als auch für MetaTrader 5. Sie unterscheiden sich durch einige Nuancen voneinander, die die Version für MetaTrader 5 noch attraktiver machen. Die Vorteile der Version:
- die Bibliothek ist als ein Modul implementiert, das Optimierungsdaten sammelt und auf ihrer Basis einen Bericht erzeugt. In der Version für MetaTrader 4 werden die Dateien im Ordner tester/Files generiert, aus welchem sie in den Ordner MQL4/Files manuell übertragen werden müssen. Um einen Bericht basierend auf diesen Daten zu erzeugen, muss man ein separates Skript starten (alle Links sind am Ende des Artikels zu finden);
- die meisten Routineaufgaben, wie z.B. das Löschen temporärer Dateien vor dem Beginn einer neuen Optimierung, wurden ausgeschlossen;
- die Namen und Werte der Parameter des Expert Advisors werden automatisch ermittelt (in MT4 müssen diese Informationen durch den Aufruf der entsprechenden Funktionen explizit übergeben werden);
- es wird eine Multi-Thread-Optimierung unterstützt, darunter auch unter Verwendung von Agenten des MQL5 Cloud Network.
Umsetzung
Die Programmoberfläche der Bibliothek muss also die Eingabeparameter bereitstellen, mit deren Hilfe der Tester für die Ausführung einer Forward-Optimierung eingestellt werden kann. Sie sind in der Header-Datei beschrieben:
input WFO_TIME_PERIOD wfo_windowSize = year; input int wfo_customWindowSizeDays = 0; input WFO_TIME_PERIOD wfo_stepSize = quarter; input int wfo_customStepSizePercent = 0; input int wfo_stepOffset = 0; input string wfo_outputFile = ""; input WFO_ESTIMATION_METHOD wfo_estimation = wfo_built_in_loose; input string wfo_formula = "";
Die Parameter wfo_windowSize und wfo_stepSize erlauben es, die Fenster- und Schrittgröße der Optimierung zu setzen. Für die Angabe in Standard-Einheiten ist die Aufzählung WFO_TIME_PERIOD definiert:
#define DAYS_PER_WEEK 7 #define DAYS_PER_MONTH 30 #define DAYS_PER_QUARTER (DAYS_PER_MONTH*3) #define DAYS_PER_HALF (DAYS_PER_MONTH*6) #define DAYS_PER_YEAR (DAYS_PER_MONTH*12) #define SEC_PER_DAY (60*60*24) #define SEC_PER_WEEK (SEC_PER_DAY*DAYS_PER_WEEK) #define SEC_PER_MONTH (SEC_PER_DAY*DAYS_PER_MONTH) #define SEC_PER_QUARTER (SEC_PER_MONTH*3) #define SEC_PER_HALF (SEC_PER_MONTH*6) #define SEC_PER_YEAR (SEC_PER_MONTH*12) #define CUSTOM_DAYS -1 enum WFO_TIME_PERIOD { none = 0, year = DAYS_PER_YEAR, halfyear = DAYS_PER_HALF, quarter = DAYS_PER_QUARTER, month = DAYS_PER_MONTH, week = DAYS_PER_WEEK, day = 1, custom = CUSTOM_DAYS };
Als Basis-Einheit dient ein Tag. Kleinere Schritte sind nicht verfügbar. Der Tester selbst erlaubt es, Daten genau bis auf Tag zu setzen. Denjenigen, die Intraday-Forward-Optimierung in der Praxis anwenden, wird eine alternative Variante angeboten, die genau bis auf einen Balken funktioniert.
Bitte beachten Sie, dass die Elemente Woche, Monat, Quartal und Jahr als Konstanten (feste Anzahl der Tage) definiert sind. Es gibt keine Ausrichtung nach den zeitlichen Grenzen der Perioden. Dies erlaubt es, die Effizienz der Berechnungen zu erhöhen und das Fenster mit jeder Größe auf eine einheitliche Weise unabhängig von den Grenzen von Kalenderwochen und -monaten zu verschieben. Wenn man die Periode "Monat" (month) auswählt, definiert als 30 Tage, und es vom Anfang irgendeinen Monats an gezählt wird, kann der Wechsel jeden nachfolgenden Monats vor oder nach dem "Monatsschritt" erfolgen (weil Monate sich durch die Anzahl der Tage voneinander unterschieden). Wenn man mit der Monatsmitte beginnt, fällt der Schritt auf die Mitte der nachfolgenden Monate, aber auch mit der Verschiebung des Monatstags.
Den Wert custom kann man für wfo_windowSize oder wfo_stepSize in den folgenden Parametern setzen — jeweils wfo_customWindowSizeDays und wfo_customStepSizePercent — beliebige Fenstergröße und Schrittweite. Wie wir anhand der Namen der Parameter sehen können, wird das Zeitfenster in Tagen und die Schrittweite in Prozent vom Fenster definiert.
Mithilfe dieser Parameter werden die Größen während der Cluster-Optimierung durchlaufen. Die Größen sollten so ausgewählt werden, dass der minimale (anfängliche) Prozent und seine Änderungen mit einem vorgegebenen Inkrement, angewandt auf das kleinste Fenster, eine gerade Anzahl der Tage ergeben würden. Zum Beispiel: wenn sich das Fenster von 10 bis 50 mit der Schrittweite 10 ändert, hat es keinen Sinn, die Schrittweite kleiner als 10% zu setzen, weil das einen Tag vom kleinsten Fenster ausmacht. Darüber hinaus sollte das Inkrement für den Forward-Schritt auch nicht kleiner als 10% sein, denn sollte es 5% betragen, würde die zweite Iteration bei der Fenstergröße 30 den Test auf einem Abschnitt von 15% (die anfänglichen 10% plus ein Schritt 5%) implizieren, was 4.5 ergibt. Diese Einstellung würde zu keinem fatalen Fehler führen und die Bibliothek würde die Arbeit routinemäßig fortsetzen, es kann aber sein, dass die Schritte des Forward-Testens nicht genau angepasst sind, und dies würde sich auf die Genauigkeit der Berechnungen auswirken.
In diesem Zusammenhang kann leider die Bibliothek keine Mittel für die Vereinfachung der Einstellung und deren Überprüfung bieten. Der Nutzer (und in unserem Fall kennt er sich mehr oder weniger mit dem Programmieren aus) muss die Parameter selbständig überprüfen. Als eine der Methoden zur Lösung dieses Problems kann eine andere Organisation der Bibliothek sein — insbesondere, die Arbeit mit der Genauigkeit bis auf einen Balken. Gehen wir darauf ein.
Wenn die Parameter wfo_windowSize und wfo_stepSize gleich none sind, wird die Bibliothek quasi deaktiviert.
Der Parameter wfo_stepOffset, wenn er zu den zu optimierenden Parametern gehört, erlaubt es die Schritte der Forward-Tests zu durchlaufen. Das Inkrement muss immer 1 sein. Der Höchstwert wird nach der Formel (1) berechnet, in welche die maximale Größe des Fensters W und die minimale Schrittweite S eingefügt werden.
Der Parameter wfo_outputFile setzt den Namen der CSV-Datei, in welche Werte der Durchläufe der Optimierung geschrieben werden. Die Datei wird im Ordner MQL5/Files (MT5) oder tester/Files (MT4) erzeugt.
Der Parameter wfo_estimation legt den Wert fest, der für die Optimierung in den Strategietester übergeben wird. Der Wert kann einer der Werte aus der Aufzählung WFO_ESTIMATION_METHOD sein:
enum WFO_ESTIMATION_METHOD
{
wfo_built_in_loose,
wfo_built_in_strict,
wfo_profit,
wfo_sharpe,
wfo_pf,
wfo_drawdown,
wfo_profit_by_drawdown,
wfo_profit_trades_by_drawdown,
wfo_average,
wfo_expression
};
- wfo_built_in_loose (standardmäßig) und wfo_built_in_strict sind Kennzahlen, die aus Sharpe-Ratio, Profit-Faktor, Gewinngröße und der Anzahl von Trades zusammengesetzt wurden;
- wfo_profit — Gewinn;
- wfo_sharpe — Sharpe-Ratio;
- wfo_pf — Profit-Faktor;
- wfo_drawdown — invertierter relativer Rückgang (100 - DD), der basierend auf der Kontostand-Kurve berechnet wird;
- wfo_profit_by_drawdown — Gewinn, geteilt durch den relativen Rückgang;
- wfo_profit_trades_by_drawdown — Profit, multipliziert mit der Anzahl von Trades und geteilt durch den relativen Rückgang;
- wfo_average — durchschnittlicher Gewinn eines Trades;
- wfo_expression — benutzerdefinierte Formel einer Kennzahl.
Der Parameter wfo_formula ist die benutzerdefinierte Formel für die Berechnung einer Kennzahl, wenn wfo_estimation durch den gleichen wfo_expression gesetzt wurde. Mehr Informationen über akzeptable Formeln und weitere Einstellungen im Benutzerhandbuch der Bibliothek lesen.
Alle Parameter haben das Präfix wfo_, damit man sie von den Parametern des Expert Advisors einfach unterschieden könnte.
Bitte beachten Sie: sobald Sie eine Header-Datei Ihrem Expert Advisor hinzufügen, werden in ihm die beschriebenen Inputparameter erstellt, mit anderen Worten — Metaparameter, denn diese steuern den Optimierungsvorgang.
Man sollte auch betonen, dass die Überschrift notwendige Typen und Meta-Parameter nur deklariert. Damit die mit ihrer Hilfe vorgegebenen Informationen in die Bibliothek kommen, wird ein Set offener Funktionen benötigt — die Programmoberfäche der Bibliothek. Sie sind auch in der Header-Datei als eine Import-Befehl beschrieben (hier und weiter wird eine Version für MetaTrader 5 betrachtet):
#import "WalkForwardOptimizer.ex5" void wfo_setEstimationMethod(WFO_ESTIMATION_METHOD estimation, string formula); void wfo_setPFmax(double max); void wfo_setCloseTradesOnSeparationLine(bool b); void wfo_OnTesterPass(); int wfo_OnInit(WFO_TIME_PERIOD optimizeWindow, WFO_TIME_PERIOD optimizeStep, int optimizeStepOffset, int optimizeCustomW, int optimizeCustomS); int wfo_OnTick(); double wfo_OnTester(); void wfo_OnTesterInit(string optimizeLog); void wfo_OnTesterDeinit(); #import
Die Funktionen mit dem Präfix wfo_set sind optional. Sie erlauben es, einen Modus zu aktivieren, wenn man sie nicht aufruft, werden standardmäßige Werte verwendet. Die Funktionen mit dem Präfix wfo_On sind Eventhandler. Sie müssen unbedingt dem Quellcode des Expert Advisors hinzugefügt werden.
Hier ist ein Beispiel für den Quellcode des Expert Advisors mit einer integrierten Bibliothek. Alle Parameter der Funktionen wurden den Meta-Paramtern entnommen.#include <WalkForwardOptimizer.mqh> ... int OnInit(void) { // Ihr Code ist hier ... // optional, standardmäßig wfo_built_in_loose wfo_setEstimationMethod(wfo_estimation, wfo_formula); // optional, standardmäßig DBL_MAX wfo_setPFmax(100); // optional, standardmäßig false // wfo_setCloseTradesOnSeparationLine(true); // obligatorisch, alle Parameter aus der Header-Datei int r = wfo_OnInit(wfo_windowSize, wfo_stepSize, wfo_stepOffset, wfo_customWindowSizeDays, wfo_customStepSizePercent); return(r); } void OnTesterInit() { wfo_OnTesterInit(wfo_outputFile); // obligatorisch } void OnTesterDeinit() { wfo_OnTesterDeinit(); // obligatorisch } void OnTesterPass() { wfo_OnTesterPass(); // obligatorisch } double OnTester() { return wfo_OnTester(); // obligatorisch } void OnTick(void) { int wfo = wfo_OnTick(); if(wfo == -1) { // warten bis das Zeitfenster beginnt // nicht handeln return; } else if(wfo == +1) { // auf das Ende des Tests nach dem Fenster und Forward warten // nicht handeln return; } // Ihr Code ist hier ... }
wfo_OnInit übergibt alle notwendigen Daten der Bibliothek: Fenstergröße, Schrittweite, Nummer des Schritts, benutzerdefinierte Fenstergröße und die benutzerdefinierte Schrittgröße in Prozent von der Fenstergröße. Sie gibt 0 wenn erfolgreich oder einen Fehlercode zurück (zum Beispiel, INIT_PARAMETERS_INCORRECT), wenn die gesetzten Parameter falsch sind.
wfo_OnTick verwaltet die Optimierung des Expert Advisors innerhalb des Fensters der Optimierung und des Forward-Tests. Sie gibt 0 zurück, wenn der aktuelle Tick (Balken) innerhalb des Fensters liegt, wo der Expert Advisor handeln darf, und -1 oder +1, wenn der Tick außerhalb des Zeitfensters liegt und der Handel vorläufig deaktiviert werden muss (-1 heißt, noch nicht kam, und +1 - dass das Fenster bereits vorbei ist).
wfo_OnTester berechnet und gibt die vorgegeben Kennzahl der Effizienz zurück.
wfo_setCloseTradesOnSeparationLine setzt den Modus des Schließens aller Marktorders und Löschens aller Pending Orders im Moment, wenn die Grenze zwischen dem Fenster und dem Forward-Test gekreuzt wird.
Praxis
Nachdem der Expert Advisor mit der eingebauten Bibliothek kompiliert wurde, kann man mit der Einstellung des Testers beginnen.
Wählen wir einen konkreten Datenbereich in der Gruppe der Felder Intervall: das ist die Gesamtperiode D, die oben beschrieben wurde. Gewöhnlich ist das Enddatum entweder heute oder ein Tag neben heute.
Im Feld Vorwärtstest sollte man Nein (eingebauter Forward-Test passt uns nicht) auswählen.
Als Ausführungsmodus ist Regular , nach Balken oder nach Kontrollpunkten, zu empfehlen. Es sei daran erinnert, dass unser Walk-Forward durch das Hinzufügen von Meta-Parametern funktioniert, die in die Optimierung miteinbezogen werden (in Ergänzung zu den Arbeitsparametern des Expert Advisors) und dadurch die Rechenbelastung erhöhen.
Im Feld Optimierung kann man einen langsamen Modus (Brute-Force-Methode) oder einen schnellen (unter Verwendung eines genetischen Algorithmus) auswählen; das Optimierungskriterium muss unbedingt benutzerdefiniert sein.
Die Verwendung eines genetischen Algorithmus ist erlaubt, man muss aber einige Nuancen beachten. Der genetische Algorithmus lässt viele Kombinationen von Inputparametern aus, inklusive Kombinationen von Meta-Parametern, die die Fenstergröße, Schrittweite und die Nummer des Schritts vorgeben, deswegen können einige Forward-Tests fehlen. Dieses Problem kann bei einer großen Dimension des Suchraums bemerkbar sein (wenn es viele Parameter des Expert Advisors oder deren Inkremente gibt), aber in den anderen Fällen kann man dies unberücksichtigt lassen. Die Auslassungen werden im Bericht markiert. Basierend auf dieser Information kann man die Entscheidung treffen, ob der Raum der Optimierung reduziert werden muss.
Dieses Problem tritt häufig bei der Cluster-Optimierung auf. Die Rolling oder Anchor Forward-Optimierung sind diesem Problem weniger ausgesetzt.
Der genetische Algorithmus kann "Prioritäten" zwischen den Optimierungsfenstern mit verschiedenen Verschiebungen je nach Ertragskraft ungleichmäßig setzen. Zum Beispiel, wenn der erste Monat des Handels objektiv schwieriger, als der zweite war, wird der Tester mehr mit wfo_stepOffset mit dem Wert 1, als 0 arbeiten. Mit anderen Worten erzielt die genetische Optimierung anhand einer Vielzahl von Fenstern innerhalb des Datenbereichs nicht so optimale Ergebnisse wie die genetische Optimierung anhand des konkreten Fensters W (mit der deaktivierten Bibliothek). Die einzig mögliche Lösung dieses Problems ist die Verwendung einer langsamen Brute-Force-Methode für alle Parameter und Meta-Parameter.
Andererseits überprüft Walk-Forward den Algorithmus anhand von out-of-sample Daten sowie ermittelt die beste Tiefe der Historie für die Optimierung und die Schrittweite der Neuoptimierung (wie oft man nach neuen Einstellungen suchen muss). Diese Funktionen werden auch ohne Ermittlung der optimalen Parameter normal ausgeführt.
Stellen Sie die Parameter des Expert Advisors, die optimiert werden müssen, wie gewöhnlich ein. Die Konfigurierung der Meta-Parameter hängt davon ab, welcher Modus der Walk-Forward Optimierung aktiviert werden muss.
Rolling-Walk-Forward-Optimierung in vordefinierten Perioden- Wählen Sie das Zeitfenster mithilfe von wfo_WindowSize in der Liste aus
- Wählen Sie die Schrittweite des Forward-Tests in der Liste in wfo_stepSize aus
- Starten Sie die Optimierung für wfo_stepOffset in einem Bereich von 0 bis zur beliebigen Anzahl der Schritte, die in die verfügbare Historie hineinpasst, mit der Schrittweite 1.
- Wählen Sie custom in der Liste des Parameters wfo_WindowSize aus
- Geben Sie die Anzahl der Tage in wfo_customWindowSizeDays ein
- Wählen Sie die custom Größe für den Parameter wfo_stepSize aus
- Geben Sie die Größe in wfo_customStepSizePercent ein, als Prozent von der Fenstergröße
- Starten Sie die Optimierung für wfo_stepOffset in einem Bereich von 0 bis zur beliebigen Anzahl der Schritte, die in die verfügbare Historie hineinpasst, mit der Schrittweite 1.
- Wählen Sie die Größe des Zeitfensters als custom in wfo_WindowSize aus.
- Aktivieren Sie die Optimierung für wfo_customWindowSizeDays für jeden passenden Bereich und Inkrement in Tagen.
- Setzen Sie die Größe des Forward-Schritts in wfo_stepSize auf custom.
- Aktivieren Sie die Optimierung für wfo_customStepSizePercent für jeden passenden Bereich und Inkrement in Prozent von der Fenstergröße (empfehlenswerter Bereich 5-30%, Schrittweite 5-10%).
- Starten Sie die Optimierung für wfo_stepOffset in einem Bereich von 0 bis zur beliebigen Anzahl der Schritte, die in die verfügbare Historie hineinpasst, mit der Schrittweite 1.
- Wählen Sie die Größe des Zeitfensters als custom in wfo_WindowSize aus.
- Aktivieren Sie die Optimierung für wfo_customWindowSizeDays im gewünschten Zeitraum. Als Inkrement wählen Sie die Anzahl der Tage, die gleich der Länge des vorgegebenen Zeitraums ist, der weiter gesetzt wird (z.B., geben Sie 30 Tage ein, wenn Sie die Schrittweite "Monat" verwenden möchten).
- Wählen Sie die Schrittweite in der Liste der vorgegebenen Konstanten wfo_stepSize aus, dabei muss die Konstante gleich dem Inkrement sein, das für die Größe des Zeitfensters angegeben wurde.
- Deaktivieren Sie die Optimierung für wfo_stepOffset und setzen Sie ihn auf 0.
Wenn alles eingestellt ist, starten wir die Optimierung und warten, bis sie abgeschlossen ist. Im Gegensatz zur standardmäßigen Optimierung kann man bei der Arbeit mit der Bibliothek die Optimierung nicht stoppen und dann wieder fortsetzten. Das ist damit verbunden, dass das Stoppen und die Fortsetzung des Testers keine entsprechenden Events in MQL5 API haben, deswegen kann der Cache der Daten der Bibliothek nicht mit dem Cache des Testers synchronisiert werden. Mit anderen Worten führt jeder Klick auf den Start-Button zu einer vollständigen Initialisierung der Bibliothek, unabhängig vom internen Status des Testers, und die Bibliothek beginnt die Daten der Durchläufe vom Anfang an zu sammeln. Wenn eine gestoppte Optimierung fortgesetzt wird, gehen alle vor der Pause von der Bibliothek gesammelten Daten verloren. Es ist zu empfehlen, alle Dateien aus dem Ordner tester/cache vor dem Beginn einer Walk-Forward-Optimierung zu löschen.
Während der Optimierung erstellt WFO spezielle globale Variablen (diese werden in eine "Archivdatei" mit der Erweiterung GVF gespeichert) und eine CSV-Datei mit den Daten im Ordner MQL5/Files. Danach wird eine HTML-Seite mit der Auswertung der Ergebnisse automatisch erzeugt. Die Namen der GVF- und HTML-Dateien fallen mit dem Namen der CSV-Datei zusammen, die durch den Parameter wfo_outputFile in der Bibliothek gesetzt wurde.
Nehmen wir einen einfachen Expert Advisor als Beispiel und schauen wir, welche Berichte man mithilfe der Bibliothek in verschiedenen Modi erhalten kann. Der Expert Advisor wurde vom MQL5 Wizard basierend auf den Strategien Envelopes und WPR erzeugt. Er steht kostenlos im Market zur Verfügung.
Achtung! Der Expert Advisor erhebt keinen Anspruch, übermäßigen Gewinn zu erzielen. Das ist ein durchschnittliches Muster, dessen Aufgabe ist, die Rolle des Versuchskaninchens für die Bibliothek zu spielen.
Wir werden mit dem Chart EURUSD D1 experimentieren. Versuchen wir, einen einfachen Rolling-Walk-Forward-Bericht zu erhalten. Der Gesamtzeitraum - 2015.01.01-2017.06.01.
Abb.2 Einstellungen des Strategietesters
Im Expert Advisor gibt es den Parameter EnableWFO, der standarmäßig gleich false ist. In diesem Fall ist die Bibliothek deaktiviert und der Expert Advisor handelt im gewöhnlichen Modus. Um die Bibliothek zu aktivieren, muss man das Flag auf true setzen.
Der standardmäßige Wert in wfo_windowSize ist year; der standardmäßige Wert im Paramter wfo_stepSize ist quarter. Dies setzt die Verschiebung des Zeitfensters mit der Größe ein Jahr mit der Schrittweite "Quartal", und das Quartal ist ein einzelner Forward-Test. Daraus ergibt sich: (2.5 Jahre - 1 Jahr) / 3 Monate = (30 - 12) / 3 = 6 Schritte des Forward-Testens.
Legen wir den Namen der Datei demo.csv in wfo_outputFile fest.
Aus den Parametern des Expert Advisors werden Stop Loss und Take Profit Levels, Periode und Abweichung von Envelopes und die WPR Periode optimiert. Der Set von Parametern (wfo-demo-rolling.set) ist am Ende des Artikels angehängt.
Abb.3 Einstellungen des Expert Advisors
Nach der Optimierung erhalten wir den Bericht demo.html, der wie folgt aussieht.
Abb.4 Bericht der Rolling-Walk-Forward-Optimierung
Wie man aus dem Bericht sieht, verhält sich der Expert Advisor in den Forward-Perioden sehr schlecht. Aber aus der Praxis kennen wir, das ein negatives Ergebnis auch ein Ergebnis ist.
Versuchen wir nun einen Cluster-Bericht zu erhalten und die Größe des Fensters und die Schrittweite anzupassen, mit welchen der Profit stabil bleibt. Dafür wählen wir custom in den Parametern wfo_windowSize und wfo_stepSize aus, und danach stellen wir wfo_customWindowSizeDays für eine Optimierung von 90 bis 180 Tage mit der Schrittweite 30 und wfo_customStepSizePercent — von 10 bis 30% mit der Schrittweite 10 ein. Erhalten wir die maximale Anzahl der Schritte in wfo_stepOffset als Quotient: (2.5 Jahre - 90 Tage) / (90 Tage * 10%) = 810 / 9 = 90. Der Set der Parameter (wfo-demo-cluster.set) ist im Anhang zu finden.
Unten ist ein Beispiel für den erhaltenen Bericht angeführt (mehr Informationen zu den Kennzahlen gibt es im nächsten Kapitel — Analyse).
Abb.5 Bericht der Cluster-Walk-Forward-Optimierung
Viele Zellen der Tabelle zeigen zufriedenstellende Ergebnisse. Schauen wir genauer hin, was sich hinter der Konfiguration mit einem Fenster von 120 Tagen und einer Schrittweite von 30% verbirgt. Klicken wir dafür auf der entsprechenden Zelle, und wir sehen Details zum Forward-Test.
Abb.6 Rolling Walk-Forward Bericht
Obwohl das Ergebnis positiv ist, ist die Kontostand-Kurve nicht besonders beeindruckend. Wenn wir uns die anderen Varianten anschauen, kommen wir zur Schlussfolgerung, dass der Expert Advisor mit den zurzeit ausgewählten Parametern nicht genug stabil ist. Entweder muss der Set der Handelsstrategien korrigiert werden, oder man muss andere Parameter optimieren, die wir nicht mit einbezogen haben.
Es dauert immer lange, bis ein Expert Advisor zufriedenstellende Ergebnisse liefert, und die Verwendung der Technologie Walk-Forward erleichtert die Aufgabe in der Hinsicht, dass man viele Varianten schnell auszuschließen kann, deren Überprüfung durch übliche Methoden viel aufwändiger wäre. Dabei erfolgt die Suche nach den Wegen für die Verbesserung von Charakteristiken des Roboters weitgehend wie früher nach Gefühl. Walk-Forward gibt hier keine Empfehlungen. Am besten ist diese Methode anzuwenden, wenn wir bereits einen mehr oder weniger profitablen Expert Advisor haben und man herausfinden muss, ob seine Errungenschaften angepasst sind und ob sie sorgfältig genug geprüft wurden.
Analyse
Der erzeugte Bericht beinhaltet verschiedene Daten je nach ausgewähltem Modus der Bibliothek. Bei der Cluster-Analyse beginnt der Bericht mit einigen Tabellen, die resultierende Kennzahlen vieler Walk-Forward-Tests enthalten. In jeder Tabelle entsprechen die Spalten der Größe des Fensters W in Tagen, und die Zeilen — der Schrittweite S in Prozent. Jede Zelle in der Tabelle ist ein Hyperlink. Durch einen Klick auf den Link wird der entsprechende Bericht eines Walk-Forward Tests geöffnet. Auf diese Weise kann man prüfen, wie sich jeder Wert ergeben hat.
In den Tabellen der Cluster-Analyse werden die folgenden Kennzahlen ausgegeben:
- Annualisierter Gewinn (annualized profit/loss) — hypothetischer Gewinn des Expert Advisors umgerechnet auf ein Jahr. Der Gewinn wird proportional der Optrimierungs- und Testperioden umgerechnet.
- Effizienz (efficiency) — das Verhältnis zwischen dem annualisierten Gewinn in der Testperiode und dem im Optimierungszeitraum eines und desselben Durchlaufs.
- Stabilität (consistency) — Prozentanteil gewinnbringender Durchläufe unter allen Testdurchläufen eines zusammengeführten Vorwärtstests.
- Vollständigkeit (completeness) — Anzahl der Forward-Schritte, die für konkrete Kombinationen der Fenstergröße und des Forward-Schritts gemacht wurden. Diese Zahl kann wegen der Auslassung einiger Parameterwerte kleiner als die abgerufene Zahl während der genetischen Optimierung sein. Die Anzahl der ausgelassenen Schritte wird in Klammern in Kleindruck angegeben.
- Anzahl der Tage (days in step) — Anzahl der Tage in einem Schritt für jede Kombination der Fenstergröße und der Schrittweite; wird für die Umwandlung der Schrittweite aus Prozenten in Tage verwendet.
Der annualisierte Gewinn, Effizienz und Stabilität sind die Hauptkriterien für die Einschätzung des Erfolges eines Forward-Testens. Natürlich, je höher diese Werte sind, desto besser. Der Wert der Stabilität sollte über 50% liegen. Die besten Varianten werden in den Tabellen der Cluster-Analyse mit grün hervorgehoben.
Darüber hinaus sollte man den Rückgang, die mathematische Erwartung und die Standardabweichung des Profits beachten — sie sind in den detaillierten Standardberichten verfügbar.
Die Berichte von standardisierten Forward-Tests werden nicht nur als detaillierte Berichte für Varianten der Cluster-Analyse zusammengestellt, sondern auch als Ergebnisse einer einfachen Rolling-Walk-Forward-Optimierung.
Für einen Standardtest oder einen Walk-Forward-Test im Anker-Modus stellt der Bericht eine Tabelle mit allen Durchläufen des Testers dar, die diesen vereinigten Forward gebildet haben. In jeder Zeile werden die Kennzahlen des Handelssystems ausgegeben — Profit, Profitfaktor, Gesamtzahl von Trades und profitabler Trades, Rückgang und Sharpe Ration — separat für den Optimierungszeitraum und den Testzeitraum. Die Werte der Optimierung werden mit blau hervorgehoben, der Testperiode - mit gelb. Wenn der letzte Schritt die "aktuelle" Zeit (das Enddatum des Testens) umfasst, wird er in grün hervorgehoben. D.h. das sind die letztbekannten und deswegen für den "aktuellen" Handel anwendbare Parameter. Natürlich ist die "aktuelle" Zeit nur in dem Fall wirklich aktuell, wenn das Enddatum der Optimierung auf "heute" gesetzt wurde.
In den ersten drei Spalten des Forward-Berichts werden die Nummer des Durchlaufs des Testers, das Anfangsdatum des Zeitfensters der Optimierung (in-sample), das Anfangsdatum der Testperiode (out-of-sample) und das Enddatum ausgegeben. In der letzten Spalte des Berichts werden die Werte der Parameter ausgegeben, die während der Optimierung innerhalb des Fensters ermittelt wurden. Sie können die Namen der Parameter sehen, sobald sich der Mauszeiger über der Überschrift der Spalte befindet.
Bei der Verwendung der genetischen Optimierungsmethode werden die Nummern der Durchläufe im integrierten Bericht nicht als eine Zahl, sondern als "Nummer der Generation, Nummer der Instanz" angezeigt, deswegen kann man die Entsprechungen zwischen den Zeilen des eingebauten Berichts und den Zeilen des Berichts der WFO-Bibliothek nur nach Parametern finden. Bei der Verwendung der langsamen Optumierungsmethode besteht dieses Problem nicht, weil die Nummern der Durchläufe in den beiden Berichten übereinstimmen. Dies ist eine Besonderheit der MetaTrader 5 Plattform und nicht der Bibliothek.
Durch einen Doppelklick auf der entsprechenden Zeile des integrierten Testerberichts kann der Nutzer den Handel des Expert Advisors in einem konkreten Zeitraum der Walk-Forward Optimierung und dem nachfolgenden Schritt des Walk-Forward Testens wiederholen. Bitte beachten Sie, dass es außerhalb dieses Datenbereichs nicht gehandelt wird. Um zu sehen, wie der Expert Advisor mit diesem Set von Parametern handeln würde, deaktivieren Sie die Bibliothek oder setzen Sie wfo_windowSize auf none.
Nach der Tabelle wird die Grafik der Kontostand-Kurve schematisch dargestellt.
Ziehen wir eine Zwischenbilanz. Es ist uns gelungen, die Walk-Forward-Optimierung in einer vereinfachten Form im Metatrader-Tester zu implementieren. Sie funktioniert und liefert interessante Ergebnisse. Aber die Einstellung der Parameter der Bibliothek ist eine nicht triviale Aufgabe. Einige Nutzer haben Schwierigkeiten mit der Auswahl konkreter Meta-Parameter. Das andere Problem ist mit der Leistungsfähigkeit verbunden. Da die Arbeit der Bibliothek auf zusätzlichen Meta-Paramtern basiert, die in die Optimierung mit einbezogen werden, wird der Suchraum deutlich größer und benötigt demzufolge mehr Rechenkapazitäten. Kann man die Situation auf irgendeine Weise vereinfachen? Ja, das ist möglich. Aber dafür müssen wir das Rad neu erfinden, d.h. die Funktionsweise der Bibliothek umdenken und quasi eine andere Bibliothek implementieren.
Walk-Forward für Faule und Beschäftigte
Die neue Bibliothek wird auch in den Expert Advisor eingebunden, sie exponiert aber keine Parameter und setzt keine Einstellung voraus. Die Optimierung des Expert Advisors wird im (erweiterten) Gesamtzeitraum D gestartet. Der Unterschied von der gewöhnlichen Optimierung besteht nur in dieser Periode, denn die standardmäßige Optimierung wird vom Nutzer im ausgewählten Zeitfenster W durchgeführt. Während der Optimierung in D sammelt die neue Bibliothek Informationen über alle Trades, die vom Expert Advisor ausgeführt werden (für verschiedene Sets von Parametern). Mit anderen Worten wird für jeden Durchlauf eine Datei erzeugt, in welche der aktuelle Kontostand, Floating Profit und die Anzahl offener Positionen auf jedem Balken geschrieben werden. Nach dem Abschluss der Optimierung kann man basierend auf diesen Daten verschiedene Walk-Forward-Berichte erstellen, die ähnlich den oben beschriebenen sind. In MetaTrader 4 kann das ein separates Skript tun, in MetaTrader 5 - die Bibliothek selbst.
Die Versionen dieser Bibliothek sind sowohl für MetaTrader 4, als auch für MetaTrader 5 verfügbar. Betrachten wir hier zur Abwechslung die Implementierung für MetaTrader 4. Die vollständige Dokumentation mit detaillierten Informationen zu den Unterschieden zwischen den Versionen wurde im Blog veröffentlicht.
Erläutern wir das Funktionsprinzip der "leichten Version" der Bibliothek.
Bei der Verwendung dieser Bibliothek führt der Tester praktisch keine Optimierung durch, sondern durchläuft verschiedene Kombinationen der Inputparameter. Die Auswahl der optimalen Sets für jedes Fenster erfolgt während der Zusammenstellung des Berichts. Das Skript sondert das benötigte in-sample Fenster W aus dem Gesamtzeitraum D aus, berechnet die Werte der Effizienz für alle Durchläufe des Testers (jeder Durchlauf — ein separater Set von Parametern) und ermittelt die beste Variante. Weiter muss man die Kennzahlen der Effizienz des Handels im nachfolgenden Schritt S ermitteln.
Dieser Algorithmus implementiert Walk-Forward auf eine unkonventionelle Weise. Dies erlaubt es, Einfachheit bei der Anwendung zu erreichen, hat aber auch Nebeneffekte. Bei der Verwendung der genetischen Optimierungsmethode gibt es eine gewisse Voreingenommenheit, weil die zu prüfenden Sets der Parameter im globalen Sinne optimal sind (innerhalb des Gesamtzeitraums D, und nicht im aktuellen Fenster W). Dies kann man als einen Blick in die Zukunft betrachten. Von der anderen Seite, werden die im globalen Sinne besten Parameter kleinere Profite erzielen, als die Parameter, die bei einer lokalen Optimierung im Fenster W ermittelt werden könnten.
Dieses Problem besteht auf jeden Fall nicht bei der langsamen Brute-Force-Methode.
Es ist auch zu betonen, dass der Expert Advisot im Gesamtzeitraum D handelt, das hat zwei Folgen.
Erstens, kann der Kontostand zum Anfang eines konkreten Zeitraums W zufällig sein. Analog zu WFO, heißt das, dass die neue Bibliothek nur auf die Strategien mit einer festen Lotgröße angewandt werden kann.
Zweitens können einige Positionen während ihres Bestehens die Grenzen des Zeitfensters überschreiten. D.h. wenn das Zeitfenster beginnt, kann eine offene Position bereits existieren und Floating Profit haben, oder eine Position kann innerhalb des Zeitfensters eröffnet und während eines Forward-Tests geschlossen werden. Diese Ungenauigkeit ist die Sühne für die Vereinfachung des Vorgangs. Mit der Erhöhung der Anzahl von Trades wird der negative Effekt auf die kleinste Größe reduziert. Bei der Verwendung eines Netting-Kontos kann höchstens eine Position die Werte beim Einstieg und eine beim Ausstieg verzerren. Wenn 100 doppelte Trades Einstieg/Ausstieg ins Fenster W fallen, beträgt der durchschnittliche Fehler bei den Berechnungen höchstens 2% vom durchschnittlichen Volumen.
Das Interface der Bibliothek in der Header-Datei wfL.mqh ist ganz einfach.
#import "wfL.ex4" int wfl_OnInit(const int cleanUpTimeout); void wfl_OnTick(); #import
Das Einbinden in den Code des Expert Advisors wird auch wesentlich vereinfacht.
#include <wfL.mqh> int OnInit() { // ... Code wfl_OnInit(60); } void OnTick() { // ... Code wfl_OnTick(); }
Die Optimierung wird gleich durchgeführt, wie die oben beschriebene Optimierung für die WFO-Bibliothek.
Der Optimierungszeitraum muss mindestens 200 Balken beinhalten, es sind aber 1000 und mehr zu empfehlen. Denn die Aufteilung des Gesamtzeitraums in Zeitfenster und Schritte der Forward-Tests erfolgt nach Balken, und die Sets der Größe des Fensters und der Schrittweite, die überprüft werden, sind im Code der Bibliothek vordefiniert: die Größe des Fensters variiert von 10% bis 50% mit einem Inkrement von 10% (bitte beachten Sie, dass die Größe des Fensters als Prozentanteil des Gesamtzeitraums D gesetzt wird), die Schrittweite S — von 5% bis 30% mit einem Inkrement von 5%.
Nach dem Abschluss der Optimierung wird im Ordner Tester/Files ein Verzeichnis erzeugt:
<EA name>-<Symbol>-<Timeframe>-<Date>-<Time>
Der Ordner beinhaltet CSV-Dateien mit den Metadaten, die die Bibliothek während jeden Durchlaufs des Testers gesammelt hat. Jeder Eintrag in der Datei beinhaltet Informationen zu einem Balken: Datum und Zeit, Kontostand, Floating Profit und die Anzahl der offenen Trades. Mithilfe dieser Information kann man Profite und Verluste in jedem Fenster innerhalb der Periode berechnen. Die Informationen über einzelne Trades werden nicht gespeichert und nicht analysiert.
Nachdem dieser Ordner samt alle Dateien aus Tester/Files in MQL4/Files verschoben wurde, kann man das Skript für die Erzeugung des Berichts starten. Geben Sie den Namen des Ordners im Inputparameter ein. Darüber hinaus wird das Kriterium der Optimierung angegeben, nach welchem die besten Parameter innerhalb von konkreten Zeitfenstern ausgewählt werden. Die verfügbaren Kriterien sind die gleichen, wie in der vollständigen Version der WFO-Bibliothek. Als Ergebnis erhalten wir einen Cluster-Bericht mit Walk-Forward Tests (ein Beispiel ist oben angeführt).
Alle kleinen Nachteile, die oben erwähnt wurden, heben eine hohe Leistung und die Einfachheit der Anwendung auf. Da es in diesem Fall keine Meta-Parameter gibt, bringt die Walk-Forward-Optimierung keinen Ressourcenaufwand im Vergleich zur gewöhnlichen Optimierung nach ausgewählten Parametern des Expert Advisors hinein.
Fazit
Wir haben verschiedene Prinzipien der Entwicklung und Umsetzung der Technologie einer Walk-Forward-Optimierung im Rahmen der verfügbaren Tools des integrierten Testers betrachtet. Die beschriebenen fertigen Bibliotheken erlauben es, den Ansatz mit minimalem Aufwand zu testen. Einerseits, unterscheidet sich die resultierende Walk-Forward-Variante von der klassischen Variante durch einige Vereinfachungen und Begrenzungen der Biliotheken, andererseits, sichern diese Vereinfachungen die Benutzerfreundlichkeit und erfordern keine externen Programme. Solange MetaTrader keine integrierte Option hat, die Walk-Forward Optimierung durchzuführen, stellen solche Bibliotheken eine akzeptable Alternative dar.
Tabelle der Produkte
Mit einem Klick auf das Icon öffnet sich die Seite des entsprechenden Produkts.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/3279
![Der naive Bayes-Klassifikator für die Signale einer Reihe von Indikatoren](https://c.mql5.com/2/27/MQL5-avatar-naiveClass-001.png)
![TradeObjects: die Automatisierung des Handels aufgrund der graphischen Objekte in MetaTrader](https://c.mql5.com/2/29/MQL5_TradeObjects__1.png)
![Tiefe neuronale Netzwerke (Teil I). Datenaufbereitung](https://c.mql5.com/2/48/Deep_Neural_Networks_01.png)
![Verwendung eines Cloud-Speichers für den Datenaustausch zwischen Terminals](https://c.mql5.com/2/28/7l8-fbt8.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.