Método GARCH — pronóstico de volatilidad + dimensionamiento de posiciones
Este skill responde la pregunta que el minorista nunca hace y todo fondo hace a diario: ¿cuánto?
NO predice la dirección. GARCH pronostica la magnitud de los movimientos — cuán violenta será probablemente la jornada de mañana, no hacia dónde irá. Di esto al usuario cada vez que presentes resultados.
Las tres herramientas
Todos los scripts viven en scripts/ y se ejecutan con uv run (las dependencias se resuelven automáticamente mediante metadatos en línea — no es necesario pip-install).
1. garch_forecast.py — el pronóstico
GARCH(1,1) con walk-forward, sin mirar hacia adelante (los parámetros se reestiman cada 21 días en una ventana expansiva; la recursión avanza entre reajustes usando solo datos pasados).
uv run scripts/garch_forecast.py --csv prices.csv --json
uv run scripts/garch_forecast.py --ticker BTC-USD --json
Salida: pronóstico de volatilidad a un día (diaria + anualizada), percentil de volatilidad vs el año anterior, régimen (calma / normal / tormenta).
2. vol_target.py — el tamaño
La idea completa: tamaño = volatilidad_objetivo / volatilidad_pronosticada, limitada a [0.25x, 2.0x].
uv run scripts/vol_target.py --csv prices.csv --target-vol 15 --json
Salida: multiplicador de tamaño de posición. "Ejecuta 0.6x tu línea base" — esa es la respuesta.
3. compare.py — la prueba honesta
Ejecuta las mismas señales dos veces — tamaño fijo vs con targeting de volatilidad — y muestra ambas curvas de capital más estadísticas lado a lado. Incluye una demostración con crossover EMA 9/21; acepta cualquier estrategia mediante --signals mine.csv (columnas: fecha, señal en {-1,0,1}).
uv run scripts/compare.py --csv prices.csv --target-vol 58 --chart equity.png --json
uv run scripts/compare.py --csv prices.csv --signals mine.csv
Salida: CAGR, volatilidad anualizada, Sharpe, drawdown máximo, peor mes, capital final — ambas versiones — más el gráfico de curva de capital con regímenes de tormenta sombreados.
Contrato JSON
Todos los scripts soportan --json. Forma básica de salida:
{
"as_of": "2026-05-23",
"forecast_vol_annualized_pct": 41.2,
"vol_percentile_1y": 78.0,
"regime": "storm",
"position_size_multiplier": 0.6,
"note": "GARCH forecasts magnitude (volatility), not direction."
}
Tres patrones de composición
A. Capa de dimensionamiento — acóplalo a cualquier estrategia existente. Tu estrategia decide si; este skill decide cuánto. Toma la señal de la estrategia, multiplícala por position_size_multiplier, listo.
B. Acelerador de riesgo — interruptor de apagado independiente. Si regime == "storm", reduce toda la exposición al multiplicador independientemente de lo que digan tus señales. Funciona con cualquier agente que gestione posiciones.
C. Arnés de comparación — antes de confiar en cualquier estrategia, ejecútala a través de compare.py y verifica si el targeting de volatilidad mejora su Sharpe / drawdown. Si el dimensionamiento no ayuda, el borde de la estrategia puede ser demasiado débil para sobrevivir en condiciones reales.
Se compone limpiamente con skills de régimen direccional (por ejemplo, clasificadores de toro/oso estilo Markov): su output responde hacia dónde, este responde cuánto. Multiplica los dos.
Valores predeterminados y convenciones
- Cripto:
--periods-per-year 365(predeterminado). Acciones:--periods-per-year 252. - Volatilidad objetivo: 15% es un valor predeterminado conservador razonable. Para una comparación ajustada por riesgo contra una estrategia sin apalancamiento, establece el objetivo aproximadamente igual a la volatilidad realizada de la propia estrategia.
- Datos: ticker de yfinance (necesita internet) o cualquier CSV con columnas de fecha + cierre — se inserta en cualquier pipeline que el usuario ya ejecute.
- Historial mínimo: ~510 observaciones diarias antes del primer pronóstico.
Reglas de honestidad (no negociables)
- Nunca presentes la salida de GARCH como una llamada direccional.
- Nunca ocultes el drawdown o los números del peor mes al informar una comparación.
- Si el targeting de volatilidad NO mejora la estrategia del usuario, dilo claramente — ese resultado es igualmente valioso.