Resumen rápido
Un backtesting robusto no se mide por el beneficio, sino por la capacidad del sistema de mantener resultados en condiciones diferentes. Las métricas clave son: Sharpe Ratio >1.5, Profit Factor >1.5, Maximum Drawdown <20%. Usa Walk-Forward Analysis (mínimo5 períodos) y simulaciones Montecarlo (1000+ iteraciones) para validar cualquier estrategia antes de operar con dinero real.
El error más común es optimizar excesivamente los parámetros para encajar con datos históricos. Esto produce resultados espectaculares en backtesting pero fracasos rotundos en trading real.
"Un sistema que funciona en todos los backtests probablemente no funcionará en ninguno."
Métricas de Robustez
Sharpe Ratio
Mide el exceso de rendimiento por unidad de riesgo. Un Sharpe Ratio superior a 1.5 se considera bueno, superior a 2.0 es excelente.
Fórmula: Sharpe = (Rp - Rf) / σp
- Rp = Rendimiento del portfolio
- Rf = Tasa libre de riesgo
- σp = Desviación estándar del rendimiento
Profit Factor
Relación entre las ganancias brutas y las pérdidas brutas. Un Profit Factor superior a 1.5 indica un sistema con ventaja estadística.
Fórmula: PF = Suma(Ganancias) / Suma(Pérdidas)
Maximum Drawdown
La mayor caída desde un máximo hasta un mínimo. Indica el peor escenario de pérdida que podrías haber experimentado.
- Menos del 10%: Excelente
- 10-20%: Aceptable
- Más del 20%: Riesgoso
Walk-Forward Analysis
El walk-forward analysis es la técnica más fiable para validar un sistema de trading. Consiste en dividir los datos en períodos de entrenamiento y validación secuenciales.
Comparación: Optimización vs Walk-Forward
Montecarlo Simulation
Las simulaciones Montecarlo permiten evaluar la distribución de posibles resultados future, reordenando las operaciones históricas para generar miles de escenarios posibles.
import numpy as np
def montecarlo_simulation(returns, n_simulations=1000):
"""Simula múltiples equity curves reordenando las operaciones"""
results = []
for _ in range(n_simulations):
shuffled = np.random.permutation(returns)
equity = np.cumprod(1 + shuffled) * 10000
results.append(equity[-1])
return {
'mean': np.mean(results),
'median': np.median(results),
'percentile_5': np.percentile(results, 5),
'percentile_95': np.percentile(results, 95),
'probability_of_profit': np.mean(np.array(results) > 10000)
}
Checklist de Validación
- ☐ Walk-forward analysis con al menos 5 períodos
- ☐ Montecarlo simulation con 1000+ iteraciones
- ☐ Out-of-sample testing (datos no vistos)
- ☐ Análisis de regímenes de mercado
- ☐ Test de estrés con spread ampliado
- ☐ Verificación de slippage y comisiones
Distribución Montecarlo - 1000 simulaciones
Conclusión
Un backtesting robusto no se mide por el beneficio mostrado, sino por la capacidad del sistema de mantener resultados similares en condiciones diferentes. Usa walk-forward, Montecarlo y métricas de riesgo para validar cualquier estrategia antes de operar con dinero real.