Quant500 Academy

7. Analizadores, pyfolio y validación fuera de muestra

Nivel 12: Backtesting y Métricas de Riesgo Reales

Ya sabes qué métricas mirar. Falta calcularlas sin escribirlas a mano y, sobre todo, calcularlas sobre datos que la estrategia no haya visto durante el diseño.

Analizadores de Backtrader

Backtrader trae analizadores que se enganchan a Cerebro antes de correr la simulación:

cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe',
                    riskfreerate=0.0, annualize=True)
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='dd')
cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name='trades')
cerebro.addanalyzer(bt.analyzers.TimeReturn, timeframe=bt.TimeFrame.Days,
                    _name='timereturn')

resultados = cerebro.run()
strat = resultados[0]

print('Sharpe:', strat.analyzers.sharpe.get_analysis())
print('Drawdown maximo (%):', strat.analyzers.dd.get_analysis()['max']['drawdown'])
print('Operaciones cerradas:', strat.analyzers.trades.get_analysis()['total']['closed'])

cerebro.run() devuelve una lista de instancias de estrategia; con una sola estrategia, el elemento 0 es el tuyo. TradeAnalyzer es especialmente útil porque desglosa operaciones ganadoras y perdedoras, racha máxima y duración media: ahí es donde se descubre que el 90% del beneficio vino de tres operaciones.

Librerías especializadas

Python ofrece varias librerías para calcular métricas de rendimiento y riesgo:

Pyfolio se conecta con Backtrader a través de un analizador dedicado:

cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
resultados = cerebro.run()

pyfoliozer = resultados[0].analyzers.pyfolio
retornos, posiciones, operaciones, gross_lev = pyfoliozer.get_pf_items()

import pyfolio as pf
pf.create_full_tear_sheet(retornos, positions=posiciones,
                          transactions=operaciones)

Pyfolio solo necesita una serie temporal de retornos indexada por fecha, que es lo que produce el analizador. Con ella genera el tear sheet: métricas anualizadas, curva de capital, mapa de calor de retornos mensuales y los peores drawdowns con sus fechas y su duración. Nota práctica: pyfolio y empyrical llevan años sin mantenimiento activo tras el cierre de Quantopian, así que espera conflictos con versiones recientes de pandas; quantstats cubre hoy el mismo terreno.

Lo que ninguna librería puede hacer por ti

Todas estas métricas se calculan sobre la muestra en la que has diseñado la estrategia. Si has ajustado parámetros mirando esos números, ya no son una evaluación: son parte del ajuste, y están contaminadas.

La validación mínima seria es fuera de muestra: reservar un tramo final de historia que no tocas hasta el final, y mirarlo una sola vez. Una sola. En cuanto vuelves atrás a cambiar un parámetro porque el resultado no te gustó, ese tramo ha dejado de ser fuera de muestra.

Mejor todavía es el walk-forward: optimizas en una ventana, evalúas en el tramo inmediatamente siguiente, desplazas la ventana y repites. Obtienes evaluaciones fuera de muestra encadenadas que se parecen a cómo operarías de verdad, reoptimizando de forma periódica. Si el rendimiento walk-forward es una fracción pequeña del rendimiento en muestra, tienes una medida directa de cuánto de tu backtest era sobreajuste.

Quedan dos comprobaciones que no son métricas sino higiene de datos. El sesgo de supervivencia: si tu universo son los componentes actuales del S&P 500, estás operando en el pasado con la lista de los que sobrevivieron. Y el sesgo por datos revisados: el PIB o los beneficios empresariales se publican y luego se corrigen; usar la serie corregida es usar información que nadie tenía entonces. Ambos inflan resultados sin dejar rastro en el gráfico.

El resto de Quant500

Lo que estás aprendiendo, aplicado al índice todos los días:

La cartera del modelo, cada semana en tu correo

Cada sábado, su semana en un minuto: cómo fue, lo mejor y lo peor, y qué directivos compraron con su dinero. Y el día que el modelo se rehace, qué entra y qué sale. Es una simulación, no un consejo. Como mucho un correo a la semana, sin publicidad y sin cuenta; te das de baja con un clic. Lo hace una persona: Pol Gracia.

Cartera modelo con resultados simulados, no una recomendación personalizada. Tu correo se usa solo para esto: privacidad.

Detrás de la Academia y del resto de Quant500 hay una sola persona: Pol Gracia Serrahima.