Quant Lab: laboratorio de estrategias
Curvas de capital
Capital inicial nominal de 100 k$ con el mismo warm-up de indicadores para las cinco estrategias; el eje x es el índice de días de la evaluación (d0…d120). Algunas curvas arrancan por debajo de 100 k$ porque el primer punto ya incorpora las posiciones abiertas al salir del warm-up.
Métricas
| Estrategia | Rank Sharpe | Retorno total | CAGR | Vol anual | Sharpe | Max DD | Deflactado | % días + |
|---|---|---|---|---|---|---|---|---|
| Momentum 12-1 canónico el clásico de Jegadeesh-Titman: lookback 252d saltando el último mes, 2 largos, rebalanceo mensual — viable gracias al histórico largo | 1 | +108548.1% | +43.0% | 41.5% | 0.97 | -41.6% | 98% | 50.0% |
| Momentum XS 126-21 largo los 2 valores con más momentum (lookback 126d, salta el último mes), rebalanceo mensual — Chan adaptado a muestra corta | 3 | +13924.0% | +28.7% | 45.1% | 0.69 | -90.5% | 79% | 50.3% |
| Reversión Bollinger z±1 entrada cuando el precio cae bajo -1σ de su media de 20d, salida al volver a la media; sin stops (Chan) | 5 | +622.4% | +10.6% | 26.2% | 0.35 | -69.2% | 25% | 31.0% |
| Trend cruce MA 20/100 largo cuando la media de 20 sesiones supera a la de 100 | 6 | +46.5% | +2.0% | 12.2% | -0.12 | -29.0% | 0% | 1.5% |
| Vol targeting 12% cartera equiponderada escalada a volatilidad objetivo del 12% (cap 1.5x) | 4 | +1101.0% | +13.6% | 14.2% | 0.67 | -25.1% | 76% | 53.9% |
| Buy & hold equiponderado benchmark pasivo: mismo peso en todo el universo | 2 | +4745.8% | +21.9% | 23.6% | 0.78 | -58.3% | 88% | 55.3% |
Sharpe anualizado con √252. La columna «Deflactado» es el Sharpe deflactado de López de Prado: la probabilidad de que el Sharpe observado supere al máximo esperable POR AZAR tras probar N estrategias — por debajo del 95%, escepticismo; por debajo del 80%, probablemente ruido.
Correlación entre estrategias
| Mom. 12-1 | Momentum | Reversión | Trend | Vol target | Equipond. | |
|---|---|---|---|---|---|---|
| Mom. 12-1 | 1.00 | 0.63 | 0.25 | 0.02 | 0.47 | 0.47 |
| Momentum | 0.63 | 1.00 | 0.30 | 0.03 | 0.47 | 0.50 |
| Reversión | 0.25 | 0.30 | 1.00 | 0.03 | 0.36 | 0.44 |
| Trend | 0.02 | 0.03 | 0.03 | 1.00 | 0.07 | 0.08 |
| Vol target | 0.47 | 0.47 | 0.36 | 0.07 | 1.00 | 0.83 |
| Equipond. | 0.47 | 0.50 | 0.44 | 0.08 | 0.83 | 1.00 |
Correlación de retornos diarios entre estrategias. El valor del laboratorio no está en elegir la «ganadora» sino en combinar señales poco correlacionadas: la ley fundamental de la gestión activa (Grinold-Kahn, IR = IC·√BR) dice que con un breadth mínimo de solo 8 valores ninguna señal aislada puede sostener un information ratio alto, y la única palanca restante es sumar apuestas independientes. Ojo con los pares de correlación muy alta en la matriz (p.ej. vol targeting vs equiponderado): son casi la misma cartera y apenas aportan diversificación mutua.
Patrones a través de las décadas (histórico completo)
la prueba ácida de un patrón: ¿gana en los 90, en la burbuja, en 2008, en la década ZIRP y en la era post-2022? Lo que solo funciona en un régimen es ajuste de curva, no patrón.
| estrategia | 2007-2015 | 2016-2025 |
|---|---|---|
| Momentum 12-1 canónico | +14.9% | +62.3% |
| Momentum XS 126-21 | -10.1% | +65.7% |
| Reversión Bollinger z±1 | -3.9% | +23.3% |
| Trend cruce MA 20/100 | +4.4% | +0.1% |
| Vol targeting 12% | +13.5% | +13.8% |
| Buy & hold equiponderado | +19.9% | +23.7% |
CAGR por periodo. El desglose por décadas usa hasta 30 años de histórico FMP (Ultimate).
Agente Machine Learning — validación purgada (López de Prado)
Probabilidad de subida a 21 días (a 2011-08-30)
| ticker | prob. | valor |
|---|---|---|
| MANALIPETC.NS | 50% |
señal solo si |retorno 21d| > 0.5·σ·√21 (umbral de vol, LdP). Entre 45% y 55% el modelo no opina de verdad; su confianza en el comité escala con el acierto OOS — si no bate al azar, habla bajito por diseño.
Diseño según la biblioteca: k-fold normal MIENTE con labels solapados (el label de hoy comparte 20 de 21 días con el de mañana → el modelo memoriza en train lo que se le pregunta en test), por eso validación walk-forward con purga y embargo de 21 días (AFML cap. 7); label con umbral de volatilidad ±0.5σ√21 (cap. 3); bagging antes que boosting porque en finanzas el enemigo es la varianza (cap. 6); momentum normalizado por la vol de cada acción para el panel conjunto (Chan).
Análisis técnico por valor
RSI(14), MACD(12,26,9), posición en bandas de Bollinger (20, 2σ) y distancia a los extremos de 52 semanas. El técnico aquí es contexto y timing — vota acotado dentro del agente cuantitativo, no manda solo.
| ticker | 60 sesiones | RSI14 | MACD | Bollinger | vs máx 52s | vs mín 52s | medias | lectura |
|---|---|---|---|---|---|---|---|---|
| LLY | 57.3 | positivo | 0.61 | -2% | +91% | >MA50 >MA200 | pegado a máximos de 52s (efecto 52-week high) | |
| CVX | 61.1 | alcista | 0.73 | -6% | +37% | >MA50 >MA200 | cruce MACD alcista reciente | |
| GOOGL | 45.9 | positivo | -0.13 | -15% | +73% | <MA50 >MA200 | sin extremos | |
| ORCL | 54.2 | positivo | 0.61 | -55% | +27% | <MA50 <MA200 | -55% desde máximos de 52s | |
| NVDA | 58.0 | positivo | 0.53 | -8% | +32% | >MA50 >MA200 | sin extremos | |
| AVGO | 58.4 | positivo | 0.56 | -13% | +45% | >MA50 >MA200 | sin extremos | |
| MU | 47.0 | positivo | -0.09 | -28% | +651% | <MA50 >MA200 | -28% desde máximos de 52s | |
| VSAT | 59.7 | positivo | 0.74 | -6% | +228% | >MA50 >MA200 | sin extremos | |
| AMZN | 61.0 | positivo | 0.47 | -4% | +37% | >MA50 >MA200 | sin extremos | |
| TSLA | 43.5 | positivo | -0.07 | -32% | +12% | <MA50 <MA200 | -32% desde máximos de 52s | |
| HD | 59.2 | positivo | 0.75 | -15% | +20% | >MA50 >MA200 | sin extremos | |
| MCD | 53.1 | positivo | 0.55 | -19% | +4% | >MA50 <MA200 | sin extremos | |
| DIS | 61.6 | positivo | 0.73 | -12% | +13% | >MA50 <MA200 | sin extremos | |
| BABA | 62.6 | positivo | 0.56 | -32% | +35% | >MA50 <MA200 | -32% desde máximos de 52s | |
| HIMS | 48.3 | positivo | -0.08 | -51% | +110% | <MA50 >MA200 | -51% desde máximos de 52s | |
| XOM | 65.1 | positivo | 0.73 | -6% | +55% | >MA50 >MA200 | sin extremos | |
| WMT | 51.4 | positivo | 0.41 | -16% | +19% | <MA50 <MA200 | sin extremos | |
| CAT | 43.5 | positivo | -0.23 | -21% | +109% | <MA50 >MA200 | sin extremos | |
| GE | 55.7 | positivo | 0.37 | -3% | +39% | >MA50 >MA200 | sin extremos | |
| OMAB | 51.3 | positivo | 0.23 | -17% | +16% | >MA50 >MA200 | sin extremos | |
| PAC | 34.8 | positivo | -0.62 | -29% | +3% | <MA50 <MA200 | -29% desde máximos de 52s | |
| ASR | 39.8 | positivo | -0.42 | -27% | +1% | <MA50 <MA200 | -27% desde máximos de 52s | |
| PNG.V | 48.6 | positivo | 0.13 | -39% | +87% | <MA50 <MA200 | -39% desde máximos de 52s | |
| FCX | 60.1 | positivo | 0.64 | -4% | +97% | >MA50 >MA200 | sin extremos | |
| JPM | 66.6 | negativo | 0.78 | +0% | +29% | >MA50 >MA200 | pegado a máximos de 52s (efecto 52-week high) | |
| COP | 67.0 | positivo | 1.2 | -5% | +51% | >MA50 >MA200 | sobre la banda superior de Bollinger | |
| AAPL | 42.1 | negativo | -0.71 | -10% | +36% | <MA50 >MA200 | sin extremos | |
| MSFT | 77.7 | positivo | 0.68 | -6% | +43% | >MA50 >MA200 | RSI 77.7 sobrecomprado | |
| META | 49.9 | negativo | -0.1 | -24% | +14% | >MA50 <MA200 | sin extremos | |
| AMD | 45.6 | negativo | -0.36 | -18% | +214% | <MA50 >MA200 | sin extremos | |
| GS | 47.7 | negativo | -0.27 | -10% | +47% | <MA50 >MA200 | sin extremos | |
| SNEX | 36.1 | negativo | -0.82 | -29% | +77% | <MA50 >MA200 | -29% desde máximos de 52s | |
| JNJ | 55.4 | negativo | 0.23 | -3% | +54% | >MA50 >MA200 | sin extremos | |
| UNH | 41.5 | negativo | -0.87 | -8% | +58% | <MA50 >MA200 | sin extremos | |
| ABBV | 52.5 | negativo | -0.18 | -5% | +30% | >MA50 >MA200 | sin extremos | |
| MOH | 39.9 | negativo | -0.38 | -20% | +59% | <MA50 >MA200 | sin extremos | |
| PG | 46.1 | negativo | -0.53 | -12% | +8% | <MA50 <MA200 | sin extremos | |
| NEE | 42.2 | negativo | -0.54 | -12% | +25% | <MA50 <MA200 | sin extremos | |
| SO | 38.9 | negativo | -0.75 | -6% | +11% | <MA50 >MA200 | sin extremos | |
| LIN | 40.1 | negativo | -0.44 | -10% | +27% | <MA50 >MA200 | sin extremos | |
| MANALIPETC.NS | 58.3 | negativo | 0.67 | -10% | +70% | >MA50 >MA200 | sin extremos | |
| BAC | 70.4 | negativo | 0.95 | +0% | +39% | >MA50 >MA200 | RSI 70.4 sobrecomprado; pegado a máximos de 52s (efecto 52-week high) | |
| MELI | 64.1 | negativo | 1.09 | -23% | +25% | >MA50 >MA200 | sobre la banda superior de Bollinger | |
| KO | 57.1 | bajista | 0.24 | -3% | +34% | >MA50 >MA200 | cruce MACD bajista reciente | |
| HON | 43.1 | bajista | -0.44 | -11% | +18% | <MA50 >MA200 | cruce MACD bajista reciente |
Bollinger >+1 = sobre la banda superior; el efecto 52-week high (cerca de máximos tiende a continuar) está documentado empíricamente — por eso pegado a máximos suma y lejos de máximos avisa de tendencia dañada.
Qué mantendría hoy cada estrategia
| Estrategia | Estado | Cartera vigente |
|---|---|---|
| Momentum 12-1 canónico | 2 posiciones | PNG.V MANALIPETC.NS |
| Momentum XS 126-21 | 2 posiciones | MU AMD |
| Reversión Bollinger z±1 | 15 posiciones | AAPL META MU TSLA GS SNEX UNH ABBV MOH PG CAT PAC NEE SO LIN |
| Trend cruce MA 20/100 | 0 posiciones | en liquidez — sin señal activa hoy |
| Vol targeting 12% | 45 posiciones | AAPL MSFT GOOGL META ORCL NVDA AVGO AMD MU VSAT AMZN TSLA HD MCD DIS MELI BABA JPM BAC GS SNEX JNJ UNH LLY ABBV HIMS MOH XOM CVX COP PG KO WMT CAT HON GE OMAB PAC ASR PNG.V NEE SO LIN FCX MANALIPETC.NS |
| Buy & hold equiponderado | 45 posiciones | AAPL MSFT GOOGL META ORCL NVDA AVGO AMD MU VSAT AMZN TSLA HD MCD DIS MELI BABA JPM BAC GS SNEX JNJ UNH LLY ABBV HIMS MOH XOM CVX COP PG KO WMT CAT HON GE OMAB PAC ASR PNG.V NEE SO LIN FCX MANALIPETC.NS |
Cartera que cada regla mantendría al cierre del último día evaluado (paper trading, sin costes de transacción).
Advertencia anti-sobreajuste
muestra de ~20.6 años (histórico largo FMP) y 6 estrategias probadas. El Sharpe deflactado (López de Prado) es la probabilidad de que el Sharpe observado NO sea fruto del azar tras 6 pruebas: por debajo de 0.95, escepticismo. Con 8 valores el breadth sigue siendo mínimo (Grinold-Kahn) — el valor está en COMBINAR señales poco correlacionadas, no en elegir la 'ganadora'
Metodología — fundamentada en la biblioteca
- Universo: 8 acciones, ~252 barras diarias; warm-up común de 63 días antes de evaluar (las señales usan lookbacks de hasta 126+21 días sobre el histórico disponible).
- Momentum XS: lookback 126d + skip 21d (adaptación del 12-1 canónico de Chan/Kent Daniel: 252/21, hold 25d, que consumiría todo el histórico), 2 largos, rebalanceo mensual.
- Reversión: bandas de Bollinger sobre media de 20d, entrada z=−1, salida z=0, sin stop-loss (Chan: nunca mejoró APR ni Sharpe en mean reversion).
- Trend: cruce de medias 20/100 — el máximo razonable con 1 año de datos; 50/200 solo como referencia.
- Vol targeting: objetivo 12% anual (rango 10-15% en la literatura), vol realizada móvil de 20d anualizada, cap de apalancamiento 1.5× sin floor.
- Evaluación: Sharpe anualizado √252·media/desv; máximo 2-3 parámetros libres por estrategia; mismo código para backtest y ejecución simulada.
- Algorithmic Trading: Winning Strategies and Their Rationale — Chan (2013) — pp. 157-160 — plantilla del momentum cross-sectional de Kent Daniel (lookback 252, hold 25, tranches solapadas) de la que se adapta el Momentum XS 126-21.
- Algorithmic Trading — Chan (2013) — pp. 84-87 — estrategia de bandas de Bollinger por z-score (entrada ±1σ, salida en la media): en su ejemplo casi duplica el Sharpe (0.5 → 0.96) frente al modelo lineal simple.
- Advances in Financial Machine Learning — López de Prado — pp. 180-183 — el backtest NO es herramienta de investigación: especificar el modelo completo antes de backtestear y, si falla, empezar de cero — no recalibrar; deflactar el Sharpe por el número de trials.
- Active Portfolio Management — Grinold & Kahn — pp. 154-158 — ley fundamental IR = IC·√BR: con breadth de 8 valores la única vía de mejora es combinar varias señales poco correlacionadas.
- Quantitative Strategies for Achieving Alpha — Tortoriello (2008) — pp. 277-280 — test de relative strength por quintiles: el momentum de precio puro tiene el peor Sharpe de quintil superior (0.44) y pérdidas máximas del 33-57% — condicionarlo con un segundo filtro y mirar siempre el max drawdown.
- Los Sharpe de esta página son brutos: con 5 estrategias probadas hay sesgo de selección y deberían deflactarse por el número de trials (Bailey-López de Prado).
- Muestra de ~1 año: cualquier ranking puede ser ruido; exigir validación CPCV con purga y embargo (~1-5 días) antes de asignar capital real.
- Test de meseta de parámetros (Narang): variar 20/100 a 10/50 en el crossover no debe cambiar el signo del resultado; si lo cambia, la estrategia es frágil.
- Test de aleatorización de fechas de entrada (Chan): mantener el nº de trades y permutar fechas; exigir p<0.05 antes de creer el backtest.
- Si el benchmark pasivo encabeza el ranking (mira la tabla de métricas), ninguna señal activa generó alfa en la muestra — motivo extra para no sobre-optimizar.