WalkForwardOptimizer
- Bibliotecas
- Stanislav Korotky
- Versión: 1.6
- Actualizado: 19 octubre 2020
- Activaciones: 5
Una vez que la biblioteca está incrustado en EA, puede iniciar la optimización de acuerdo con el procedimiento descrito en la Guía del usuario. Cuando finaliza, los resultados intermedios se guardan en un archivo csv y en algunas variables globales especiales. A continuación, puede ver y analizar los resultados por medio del script WalkForwardReporter, que genera informes comprensibles como páginas html. El script es gratuito.
Archivo de cabecera 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
Ejemplo de uso en su código fuente
#include <WalkForwardOptimizer.mqh> ... int OnInit() { ... wfo_setEstimationMethod(wfo_estimation,wfo_formula); // wfo_built_in_loose por defecto wfo_setHeader("EnvelopeRange,EnvelopeLength"); // "Payload" por defecto wfo_setPFmax(100); // DBL_MAX por defecto // se puede establecer en true, sólo si no se utiliza la genética // wfo_setGVAutomaticCleanup(true); // false por defecto // wfo_setCloseTradesOnSeparationLine(true); // false por defecto // esta es la única llamada necesaria en OnInit, todos los parámetros provienen de la cabecera int r = wfo_OnInit(wfo_windowSize, wfo_stepSize, wfo_stepOffset, wfo_customWindowSizeDays, wfo_customStepSizePercent, wfo_outputFile); return(r); } double OnTester() { // la cadena pasada con parámetros de trabajo optimizables de EA debe coincidir con la cabecera especificada en wfo_setHeader // el parámetro es opcional, puede tener EA sin parámetros // la llamada a wfo_OnTester es necesaria return wfo_OnTester(DoubleToStr(EnvelopeRange, 1) + "," + IntegerToString(EnvelopeLength)); } void OnTick() { int wfo = wfo_OnTick(); // necesario en OnTick if(wfo == -1) // este tick es anterior a la ventana de optimización { return; } else if(wfo == +1) // este tick es después de la ventana de optimización y la prueba de avance { return; } ... // su código real va aquí }

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!