WalkForwardOptimizer
- Bibliotheken
- Stanislav Korotky
- Version: 1.6
- Aktualisiert: 19 Oktober 2020
- Aktivierungen: 5
Sobald die Bibliothek in den EA eingebettet ist, können Sie die Optimierung gemäß der im Benutzerhandbuch beschriebenen Vorgehensweise starten. Wenn die Optimierung abgeschlossen ist, werden die Zwischenergebnisse in einer csv-Datei und einigen speziellen globalen Variablen gespeichert. Anschließend können Sie die Ergebnisse mit dem mitgelieferten Skript WalkForwardReporter betrachten und analysieren, das verständliche Berichte als html-Seiten erzeugt. Das Skript ist kostenlos.
Header-Datei WalkForwardOptimizer.mqh
#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}; 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}; extern WFO_TIME_PERIOD wfo_windowSize = year; extern int wfo_customWindowSizeDays = 0; extern WFO_TIME_PERIOD wfo_stepSize = quarter; extern int wfo_customStepSizePercent = 0; extern int wfo_stepOffset = 0; extern string wfo_outputFile = ""; extern WFO_ESTIMATION_METHOD wfo_estimation = wfo_built_in_loose; extern string wfo_formula = ""; #import "WalkForwardOptimizer.ex4" void wfo_setEstimationMethod(WFO_ESTIMATION_METHOD estimation, string formula); void wfo_setHeader(string s); void wfo_setPFmax(double max); void wfo_setGVAutomaticCleanup(bool b); void wfo_setCleanUpTimeout(int seconds); int wfo_OnInit(WFO_TIME_PERIOD optimizeOn, WFO_TIME_PERIOD optimizeStep, int optimizeStepOffset, int optimizeCustomW, int optimizeCustomS, string optimizeLog); int wfo_OnTick(); double wfo_OnTester(string payload = ""); void wfo_setCloseTradesOnSeparationLine(bool b); #import
Beispiel für die Verwendung in Ihrem Quellcode
#include <WalkForwardOptimizer.mqh> ... int OnInit() { ... wfo_setEstimationMethod(wfo_estimation,wfo_formula); // wfo_built_in_loose standardmäßig wfo_setHeader("EnvelopeRange,EnvelopeLength"); // "Nutzlast" als Standard wfo_setPFmax(100); // DBL_MAX standardmäßig // kann auf true gesetzt werden, nur wenn die Genetik nicht verwendet wird // wfo_setGVAutomaticCleanup(true); // standardmäßig falsch // wfo_setCloseTradesOnSeparationLine(true); // standardmäßig falsch // dies ist der einzige erforderliche Aufruf in OnInit, alle Parameter kommen aus dem Header int r = wfo_OnInit(wfo_windowSize, wfo_stepSize, wfo_stepOffset, wfo_customWindowSizeDays, wfo_customStepSizePercent, wfo_outputFile); return(r); } double OnTester() { // der übergebene String mit optimierbaren Arbeitsparametern von EA sollte mit dem in wfo_setHeader angegebenen Header übereinstimmen // der Parameter ist optional, Sie können EA ohne Parameter haben // der Aufruf von wfo_OnTester ist erforderlich return wfo_OnTester(DoubleToStr(EnvelopeRange, 1) + "," + IntegerToString(EnvelopeLength)); } void OnTick() { int wfo = wfo_OnTick(); // erforderlich in OnTick if(wfo == -1) // dieser Tick liegt vor dem Optimierungsfenster { return; } else if(wfo == +1) // dieser Tick ist nach dem Optimierungsfenster und dem Vorwärtstest { return; } ... // Ihr eigentlicher Code kommt hier hin }

This library is a must have if you are trying to do a Walk Forward Analysis on MT4, and the author was very helpful when I had asked him questions. I would rent again!