The classic forum is still available at https://pipflow.com/oldforum/index.php.
Forum Sign in Register

Optimización Walk-Forward en MATLAB: Un Test Honesto Fuera de Muestra

Started by Support 1 day ago · 0 replies

Optimización Walk-Forward en MATLAB: Un Test Honesto Fuera de Muestra

Un único backtest te dice cómo habría rendido una estrategia con unos parámetros que elegiste después de ver todo el histórico. Eso no es una previsión: es mirar por el retrovisor. La optimización walk-forward es la disciplina que convierte un ajuste a la curva en algo más parecido a una estimación honesta del rendimiento real, y MATLAB tiene todas las piezas para hacerlo bien. Así se construye.

La idea en una frase
Optimiza sobre una ventana de datos pasados, luego opera con los parámetros elegidos hacia delante sobre datos que el optimizador nunca vio — y repite, desplazando ambas ventanas a lo largo del histórico. El rendimiento que reportas se cose únicamente con esos tramos fuera de muestra.

Ventana anclada vs ventana deslizante
  • Deslizante (rolling) — la ventana de entrenamiento tiene longitud fija y avanza, así el modelo aprende siempre de las N barras más recientes y olvida el pasado lejano. Útil cuando el régimen del mercado va cambiando.
  • Anclada (expanding) — la ventana de entrenamiento empieza siempre al principio y crece con el tiempo. Útil cuando crees que los datos antiguos aún guardan estructura que vale la pena conservar.

Ninguna es "la correcta"; elige aquella cuya suposición sobre el mercado puedas defender de verdad.

Construirlo en MATLAB
  • Particiona el timetable. Decide una longitud de entrenamiento y una de prueba — por ejemplo, optimizar con 2 años, operar 6 meses, avanzar 6 meses. Un simple bucle sobre los índices de inicio genera cada pliegue (fold).
  • Optimiza solo dentro del pliegue. Dentro de cada ventana de entrenamiento lanza tu búsqueda de parámetros — una rejilla gruesa, ga del Global Optimization Toolbox, o bayesopt — usando el backtestEngine como función objetivo. Lo esencial: aquí el motor solo ve barras de entrenamiento.
  • Fija los parámetros y avanza. Toma los parámetros ganadores y corre un backtest nuevo sobre el siguiente bloque fuera de muestra. Guarda ese tramo de equity y nada sobre cómo elegiste los parámetros.
  • Cose y evalúa. Concatena cada tramo fuera de muestra en una única curva de equity continua. Esa curva — y no ninguna cifra de entrenamiento — es lo que juzgas.


Qué te dice realmente el resultado
La diferencia entre el rendimiento dentro y fuera de muestra es la cifra más útil que vas a producir. Si el Sharpe en entrenamiento es 2,5 y fuera de muestra es 0,3, no encontraste una ventaja: encontraste una máquina de sobreajustar. Una estrategia que solo se degrada ligeramente fuera de muestra, y que se mantiene positiva en la mayoría de los pliegues, es esa cosa rara que vale la pena operar.

Trampas propias del walk-forward
  • Demasiadas reoptimizaciones. Si reajustas cada semana, mayormente estás ajustando ruido y pagando comisiones por hacerlo. Reoptimiza a un ritmo acorde a lo lento que cambia tu ventaja de verdad.
  • Inestabilidad de parámetros. Vigila los parámetros elegidos a lo largo de los pliegues. Si el "mejor" lookback salta de 10 a 200 y vuelve, la superficie es ruido y ningún valor concreto es real.
  • Datos sucios. El walk-forward no arregla un dataset malo: solo esconde el problema tras un gráfico más convincente. Limpia y alinea tu timetable primero.


En resumen
El análisis walk-forward no va a fabricar una ventaja que nunca existió, y es más lento y mucho menos halagador que un único backtest optimizado. Precisamente por eso vale la pena hacerlo. En MATLAB es un bucle alrededor del motor de backtest más la disciplina de juzgar únicamente el cosido fuera de muestra. Constrúyelo una vez y reutilízalo en cada estrategia que pruebes.

¿Reoptimizas con un calendario fijo o solo cuando el rendimiento en real se rompe? Cuéntanos cómo estructuras tus pliegues abajo.

Sign in to reply.