Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pair Trading — backtest walk-forward con control diario de riesgo

Backtest de una estrategia de statistical arbitrage (pair trading basado en cointegración, no en distancia de precios) con un sistema de control de riesgo diario de 3 capas, corrido en modo walk-forward con capital reciclado — es decir, simulando cómo se operaría de verdad, no un backtest de una sola pasada.

Metodología completa y guía de interpretación de resultados: documentacion_backtest.pdf

Notebook ejecutable de punta a punta: ejecutar_backtest_sin_db.ipynb


Qué hace

  1. Reconstruye qué tickers estaban realmente en el S&P 500 en cada fecha pasada (no la lista de hoy aplicada a todo el histórico — un error común de sesgo de supervivencia).
  2. Descarga precios directo de Yahoo Finance (sin base de datos local) y selecciona pares por cointegración, con 4 filtros de validación en cascada (retest fuera de muestra, estabilidad del beta, test de Chow, half-life).
  3. Corre la estrategia con capital reciclado ventana a ventana (el capital de cada período es el resultado del anterior, no un monto fijo repetido).
  4. Cada día, mientras una posición está abierta, evalúa 3 controles de riesgo independientes (CUSUM, Chu-Stinchcombe-White, ADF) que pueden forzar el cierre — sin mirar al futuro en ningún punto.
  5. Analiza el resultado con CAPM, bootstrap y Sharpe/Drawdown

Por qué es interesante

  • Walk-forward real, no solo un backtest de una pasada: ventanas secuenciales sin solape en el tramo operativo, capital reciclado, universo histórico reconstruido por ventana.
  • Durante el análisis se observó que CUSUM detecta adecuadamente cambios abruptos, pero presenta menor sensibilidad frente a deterioros graduales del hedge ratio. Esta observación se documenta y discute en el informe metodológico.
  • Las limitaciones están documentadas a propósito, no escondidas: el límite real de datos intradía disponibles, el sesgo de supervivencia que queda parcialmente resuelto, el tamaño de muestra de cada análisis estadístico.

Cómo funciona (flujo)

flowchart TD
    A[Universo historico<br/>SP500 reconstruido por fecha] --> B[Descarga masiva de precios<br/>diario 5y / 1h ~2y]
    B --> C[Ventanas walk-forward<br/>train 24m -> in-sample 6m -> operativo ~90d]
    C --> D[Seleccion de pares<br/>cointegracion + Chow + half-life + retest]
    D --> E[Calibracion in-sample<br/>mu, sigma, beta congelados]
    E --> F[Motor de senales 1h<br/>entrada / reversion / stop VaR-tau]
    F --> G{Control diario}
    G -->|CUSUM| G
    G -->|Chu-Stinchcombe-White| G
    G -->|ADF| G
    G -->|3 condiciones a la vez| H[Cierre forzado]
    F --> I[Cierre natural<br/>reversion a la media]
    H --> J[Capital reciclado<br/>siguiente ventana]
    I --> J
    J --> K[Analisis: CAPM, bootstrap,<br/>Sharpe/Drawdown]
Loading

Resultados principales

Métrica Valor
Ventanas operativas [5]
Capital inicial [$ 1350]
Capital final [$1,742.49]
Retorno total [29.07%]
Max Drawdown [-20.20%]
Beta de mercado (CAPM consolidado) [0.31]
IC 95% del bootstrap (PNL) [-700.04, 1,498.55]

Gráficos

Equity global CAPM por ventana
Equity curve + drawdown, todo el backtest Beta de mercado por ventana

Diagnóstico de un par

Spread in-sample + out-of-sample, relación de cointegración y estabilidad (CUSUM/CSW/CUSUMSQ) de un par de ejemplo.

Limitaciones conocidas (declaradas, no escondidas)

  • Los precios se descargan en bloque para la lista de tickers de hoy — un ticker que salió del índice en el pasado no tiene datos descargados, aunque el universo histórico reconstruido sí lo incluya para esa ventana.
  • El histórico de 1h de Yahoo Finance está limitado a ~730 días desde la fecha en que se corre el backtest, sin importar qué rango se pida.
  • Con pocas ventanas operativas, los análisis estadísticos (Sharpe, bootstrap, Rank IC) tienen muestra chica — se documentan como primera lectura, no como conclusión definitiva.

Detalle completo de cada limitación en documentacion_backtest.pdf.

Releases

Packages

Contributors

Languages