Por qué un backtest excelente puede no significar nada — y cómo distinguir entre una ventaja real y una ilusión de sobreajuste a la curva.
Terminas el barrido, eliges el juego de parámetros con el Sharpe más alto, y la curva del backtest queda demasiado bonita para ser cierta. Cuando lo pones a correr de verdad, su rendimiento no se distingue del azar. Lo que pasó en medio tiene nombre.
Una estrategia está sobreajustada cuando sus parámetros se han ajustado con tanta precisión a los datos históricos que la estrategia, en esencia, está memorizando el pasado en lugar de aprender una regla generalizable. Se ve excepcional en el backtest y rinde mal — o de forma aleatoria — al operar en real.
El sobreajuste no siempre es intencional. Ocurre de forma natural cuando:
Supón que haces un barrido de 100 combinaciones de parámetros. Incluso si tu estrategia no tiene ninguna ventaja, algunas combinaciones producirán un Sharpe positivo solo por casualidad — aproximadamente 5 de cada 100 con un nivel de significancia del 5%. Si eliges la mejor y la presentas como el rendimiento de tu estrategia, estás presentando ruido como si fuera señal.
Este problema empeora cuantos más parámetros barres. Una estrategia con 2 parámetros independientes en una cuadrícula de 20×20 tiene 400 combinaciones. Una estrategia con 4 parámetros en una cuadrícula de 10×10×10×10 tiene 10,000. Cada dimensión adicional multiplica la probabilidad de toparte con un pico afortunado.
La técnica práctica más importante para evitar el sobreajuste es no elegir el pico.
Observa un mapa de calor de Sharpe de un barrido de parámetros. La mejor celda absoluta podría mostrar un Sharpe de 1.8. Un paso a la izquierda: 0.4. Un paso hacia arriba: 0.3. Ese pico es frágil — existe porque la combinación exacta de parámetros resultó ajustarse a unos pocos eventos de mercado específicos en tus datos de entrenamiento.
En su lugar, busca la meseta: la región donde el Sharpe es consistentemente alto en muchas combinaciones de parámetros vecinas. Si el Sharpe es de 1.2 en un vecindario de 3×3 de valores de parámetros, eso es una señal robusta — la ventaja existe en un rango de parámetros, no solo en un punto específico.
# Blave Agent's find_plateau: picks the neighborhood with the # highest average Sharpe in a 3×3 window around each cell — # not the single maximum cell. best_idx = argmax(neighborhood_average_sharpe)
Por eso el script de barrido de parámetros — el scan.py que vive en la carpeta de cada estrategia — usa find_plateau en lugar de simplemente tomar el mejor Sharpe. Es mucho más probable que un conjunto de parámetros situado sobre una meseta suave se generalice bien, en comparación con uno situado en un pico agudo rodeado de mal rendimiento.
La única forma válida de medir el rendimiento real de una estrategia es probarla con datos que nunca ha visto. Si optimizas los parámetros usando datos de 2020–2023 y luego evalúas en 2024, el rendimiento de 2024 es una estimación genuina out-of-sample.
Si optimizas con 2020–2024 y presentas el rendimiento de 2020–2024: eso es in-sample. Aunque no hayas tenido la intención de sobreajustar, el proceso de optimización usó implícitamente los resultados de 2020–2024 para seleccionar los parámetros. El Sharpe presentado incluye el beneficio de la retrospectiva.
| Método | ¿Válido? | Notas |
|---|---|---|
| Optimizar con todo el historial y presentar el rendimiento de todo el historial | ✗ | In-sample — sobreajuste garantizado |
| Optimizar con el primer 70% y presentar el rendimiento del último 30% | ✓ | División simple entrenamiento/prueba — válido pero limitado |
| Walk-forward: optimizar con una ventana móvil y presentar el siguiente período | ✓✓ | El más realista — mismo método que operar en real |
Otra trampa común de sobreajuste es barrer todo el rango de valores posibles de los parámetros, incluidos los extremos que resultan producir un Sharpe alto en un período histórico inusual.
Blave Agent usa un enfoque distinto para las estrategias basadas en umbrales: deriva el rango de barrido de la propia distribución del indicador. Toma el p5 y el p95 de la distribución histórica del indicador como los dos extremos, y el punto medio aritmético de ambos — no la mediana — como divisoria; los candidatos de entrada caen en la mitad superior (del punto medio al p95) y los de salida en la mitad inferior (del p5 al punto medio). Esto mantiene ambos umbrales anclados en rangos de datos observados, evitando extremos obviamente poco realistas.
Pico agudo en el mapa de calor de Sharpe. La mejor combinación de parámetros está rodeada de valores mucho más bajos. Un paso de parámetro en cualquier dirección reduce el Sharpe en 0.5+. La ventaja no es robusta — es local.
El Sharpe del backtest no sobrevive out-of-sample. La estrategia muestra un Sharpe de 2.0 en el período de entrenamiento y 0.2 en un período de prueba reservado. Cuanto mayor sea la brecha, más sobreajustada está la estrategia.
Muy pocas operaciones. Una estrategia con 12 operaciones en 3 años de backtest casi no tiene poder estadístico. Unas pocas operaciones afortunadas pueden producir un Sharpe de 2.0+ por pura casualidad. Exige al menos 30–50 operaciones completas antes de considerar significativas las métricas del backtest.
Parámetros sospechosamente redondos. Si tus mejores parámetros son SMA(50) / SMA(200) o RSI(14), o exactamente 1.0 / −1.0, estos suelen ser el resultado de un barrido que tuvo suerte en un valor "predeterminado" bien conocido. Pueden funcionar por las razones equivocadas.
La estrategia solo funciona en un régimen de mercado. Si el rendimiento del backtest está determinado enteramente por un período alcista o bajista, y es plano o negativo en todos los demás, es posible que la estrategia haya aprendido ese régimen específico en lugar de una regla general.
No hay un límite universal, pero sí un principio útil: cada parámetro libre adicional debe tener una razón previa para existir en la lógica de la estrategia. No añadas un parámetro porque te permita ajustar mejor los datos — añádelo porque representa una dimensión genuina del mecanismo de mercado que estás explotando.
Una estrategia con dos parámetros que representan conceptos significativos (una ventana de señal rápida y una ventana de confirmación lenta, por ejemplo) es más defendible que una estrategia de seis parámetros en la que varios de los parámetros se añadieron para "eliminar" períodos de pérdidas específicos visibles en el gráfico.