WalkForwardOptimizer MT5
- Bibliotecas
- Stanislav Korotky
- Versión: 1.17
- Actualizado: 9 abril 2025
- Activaciones: 5
WalkForwardOptimizer biblioteca le permite realizar rolling y cluster walk-forward optimización de asesores expertos (EA) en MetaTrader 5.
Para utilizar la biblioteca incluya su archivo de cabecera WalkForwardOptimizer.mqh en el código fuente de su EA, añada la llamada a las funciones proporcionadas según corresponda.
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. También se genera un informe comprensible como página HTML.
This is a library. It requires a user to have some developer skills. If you do not have source codes of your EA (if it's a 3-rd party commercial EA) or do not understand the sources codes (if it's made for you by custom developer), please, contact the author/developer of the EA (source codes) to solve all problems. If he thinks there is a bug in the library, then let the author/developer contact me directly. I need technical details (which are hard to receive from non-developers) to provide proper support.
El texto está acortado debido al límite de tamaño - descargue el archivo completo desde Comentarios.
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}; #import "WalkForwardOptimizer MT5.ex5" // !después de la instalación debe ser copiado en MQL5/Bibliotecas 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 optimizeOn, 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 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 = "";
Ejemplo de uso
#include <WalkForwardOptimizer.mqh> ... int OnInit(void) { // su código real va aquí ... wfo_setEstimationMethod(wfo_estimation, wfo_formula); // wfo_built_in_loose por defecto wfo_setPFmax(100); // DBL_MAX 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); return(r); } void OnTesterInit() { wfo_OnTesterInit(wfo_outputFile); // obligatorio } void OnTesterDeinit() { wfo_OnTesterDeinit(); // obligatorio } void OnTesterPass() { wfo_OnTesterPass(); // obligatorio } double OnTester() { return wfo_OnTester(); // obligatorio } void OnTick(void) { int wfo = wfo_OnTick(); if(wfo == -1) { // puede hacer algunas cosas no comerciales, como recopilar estadísticas de barras o ticks. return; } else if(wfo == +1) { // puede hacer cosas no comerciales return; } // su código real va aquí ... }

Excellent library! its very simple to setup and not too complex, just make sure to locate the ex5 library correctly (hidden in the market directory, this left me confused for a bit lmao) all in all. 5/5 would use it constantly