Modelado y pronóstico de volatilidad en MATLAB: GARCH, EGARCH y la Econometrics Toolbox
La mayoría de las estrategias de principiante asumen, sin decirlo, que la volatilidad es constante: un stop fijo, un tamaño de posición fijo, un rango diario "normal" fijo. El mercado no está de acuerdo. La volatilidad se agrupa: a los días tranquilos les siguen días tranquilos y, cuando llega un shock, los movimientos grandes tienden a juntarse durante un tiempo antes de que todo se calme. Si tu modelo de riesgo ignora eso, dimensionará las posiciones demasiado grandes justo cuando el mercado es más peligroso. Este artículo muestra cómo modelar ese comportamiento en MATLAB con la Econometrics Toolbox y cómo convertir un pronóstico de volatilidad en algo que puedas usar de verdad.
¿Por qué GARCH?
GARCH —Heterocedasticidad Condicional Autorregresiva Generalizada— es la herramienta de referencia. La idea es sencilla aunque el nombre no lo sea: la varianza de hoy es una mezcla de una media a largo plazo, la varianza de ayer y el tamaño del shock de ayer. Esa estructura reproduce dos rasgos que vemos en las series de rendimientos reales:
Un GARCH(1,1) suele ser suficiente. Su ecuación de varianza condicional es:
El término ARCH es la reacción al último shock; el término GARCH es la memoria de la varianza pasada. Su suma es la persistencia: la lentitud con la que decae la volatilidad. Valores cercanos a 1 (0,95–0,99 es lo típico en datos diarios) significan que los shocks se disipan despacio.
El flujo de trabajo en MATLAB
La Econometrics Toolbox representa el modelo como un objeto que creas, estimas (estimate) sobre los datos y luego usas para inferir (infer) o pronosticar (forecast). Parte de una serie de precios y trabaja con rendimientos logarítmicos:
Escalar los rendimientos a porcentaje y pasar 'Offset',NaN (para que el modelo ajuste la pequeña media no nula en lugar de asumir cero) ayudan a que el optimizador converja. La opción 'Distribution','t' importa: los rendimientos financieros tienen colas más gordas que una normal, y una innovación t de Student ajusta mucho mejor los extremos.
Apalancamiento: cuando las caídas asustan más al mercado
El GARCH simple trata igual un shock de +3% y uno de −3%. En los índices de renta variable no son iguales: una caída brusca eleva la volatilidad más que una subida del mismo tamaño. Dos variantes capturan esa asimetría, y ambas son una línea en MATLAB:
Ajústalas igual con estimate y luego compara el AIC/BIC de summarize frente a tu GARCH(1,1). Si el término de apalancamiento es significativo y los criterios de información mejoran, el modelo asimétrico está justificando su parámetro extra.
Convertir un pronóstico en una decisión
Un número de volatilidad solo sirve si cambia lo que haces. Tres usos habituales:
Errores que conviene evitar
En resumen
La volatilidad es una de las pocas cosas del mercado que es genuinamente predecible a corto plazo, y GARCH es una forma compacta y bien entendida de capturarla. En MATLAB todo el bucle —crear, estimar, inferir, pronosticar— son un puñado de líneas, y la recompensa es un modelo de riesgo que se aprieta cuando el mercado es peligroso y se relaja cuando está tranquilo. Solo eso ya te pone por delante de cualquier estrategia que siga apostando el mismo tamaño todos los días.
Este es contenido educativo, no una recomendación de inversión. Los modelos son aproximaciones; valida siempre fuera de muestra y gestiona tu riesgo.
La mayoría de las estrategias de principiante asumen, sin decirlo, que la volatilidad es constante: un stop fijo, un tamaño de posición fijo, un rango diario "normal" fijo. El mercado no está de acuerdo. La volatilidad se agrupa: a los días tranquilos les siguen días tranquilos y, cuando llega un shock, los movimientos grandes tienden a juntarse durante un tiempo antes de que todo se calme. Si tu modelo de riesgo ignora eso, dimensionará las posiciones demasiado grandes justo cuando el mercado es más peligroso. Este artículo muestra cómo modelar ese comportamiento en MATLAB con la Econometrics Toolbox y cómo convertir un pronóstico de volatilidad en algo que puedas usar de verdad.
¿Por qué GARCH?
GARCH —Heterocedasticidad Condicional Autorregresiva Generalizada— es la herramienta de referencia. La idea es sencilla aunque el nombre no lo sea: la varianza de hoy es una mezcla de una media a largo plazo, la varianza de ayer y el tamaño del shock de ayer. Esa estructura reproduce dos rasgos que vemos en las series de rendimientos reales:
- Agrupamiento de volatilidad: a los movimientos grandes les siguen movimientos grandes; a la calma, la calma.
- Reversión a la media de la varianza: la volatilidad se eleva tras un shock, pero vuelve poco a poco hacia su nivel de largo plazo.
Un GARCH(1,1) suele ser suficiente. Su ecuación de varianza condicional es:
varianza(t) = Constante + ARCH * innovacion(t-1)^2 + GARCH * varianza(t-1)El término ARCH es la reacción al último shock; el término GARCH es la memoria de la varianza pasada. Su suma es la persistencia: la lentitud con la que decae la volatilidad. Valores cercanos a 1 (0,95–0,99 es lo típico en datos diarios) significan que los shocks se disipan despacio.
El flujo de trabajo en MATLAB
La Econometrics Toolbox representa el modelo como un objeto que creas, estimas (estimate) sobre los datos y luego usas para inferir (infer) o pronosticar (forecast). Parte de una serie de precios y trabaja con rendimientos logarítmicos:
% prices: vector columna de cierres diarios
r = 100 * diff(log(prices)); % rendimientos log, escalados a % para estabilidad
% GARCH(1,1) con media ajustada (Offset) e innovaciones t de Student (colas gordas)
Mdl = garch('GARCHLags',1,'ARCHLags',1,'Offset',NaN,'Distribution','t');
EstMdl = estimate(Mdl, r); % ajuste por maxima verosimilitud
summarize(EstMdl); % tabla de parametros, errores estandar, logL/AIC
% Volatilidad condicional (dentro de muestra)
v = infer(EstMdl, r); % varianzas condicionales
condVol = sqrt(v); % volatilidad condicional diaria
% Pronostico de varianza a 10 dias de mercado
vF = forecast(EstMdl, 10, 'Y0', r);
sigmaF = sqrt(vF); % volatilidad diaria pronosticada
annualVol = sqrt(252) * sigmaF; % anualizadaEscalar los rendimientos a porcentaje y pasar 'Offset',NaN (para que el modelo ajuste la pequeña media no nula en lugar de asumir cero) ayudan a que el optimizador converja. La opción 'Distribution','t' importa: los rendimientos financieros tienen colas más gordas que una normal, y una innovación t de Student ajusta mucho mejor los extremos.
Apalancamiento: cuando las caídas asustan más al mercado
El GARCH simple trata igual un shock de +3% y uno de −3%. En los índices de renta variable no son iguales: una caída brusca eleva la volatilidad más que una subida del mismo tamaño. Dos variantes capturan esa asimetría, y ambas son una línea en MATLAB:
MdlE = egarch(1,1); % EGARCH: modela la log-varianza, permite asimetria
MdlG = gjr(1,1); % GJR-GARCH: anade un termino extra para shocks negativosAjústalas igual con estimate y luego compara el AIC/BIC de summarize frente a tu GARCH(1,1). Si el término de apalancamiento es significativo y los criterios de información mejoran, el modelo asimétrico está justificando su parámetro extra.
Convertir un pronóstico en una decisión
Un número de volatilidad solo sirve si cambia lo que haces. Tres usos habituales:
- Objetivo de volatilidad (vol targeting). Escala el tamaño de la posición de forma inversa a la volatilidad pronosticada para que cada operación arriesgue una cantidad aproximadamente constante: unidades = riesgoObjetivo / sigmaF. Las posiciones se encogen solas cuando el mercado se agita.
- Stops adaptativos. Fija la distancia del stop como un múltiplo de sigmaF en vez de un número fijo de pips, para que tus stops respiren con el mercado.
- Valor en Riesgo (VaR). Un VaR a un día al 99% es aproximadamente mu - z * sigmaF, donde z sale del cuantil de la t ajustada: más ancho que el basado en la normal, precisamente por las colas gordas.
Errores que conviene evitar
- Pocos datos. GARCH necesita unos cientos de observaciones para estimar de forma estable. Unas pocas semanas te darán un sinsentido con aspecto muy convincente.
- Ignorar el modelo de la media. Si los rendimientos están autocorrelacionados, modela la media (un ARIMA/offset) antes que la varianza, o el GARCH recogerá estructura que en realidad no es volatilidad.
- Exceso de confianza dentro de muestra. Juzga el modelo con pronósticos rodantes fuera de muestra: reestima periódicamente y compara el pronóstico con la volatilidad realizada, igual que harías un test walk-forward de una estrategia.
- Olvidar la persistencia cercana a 1. Si ARCH + GARCH suman prácticamente 1, el proceso está cerca de ser integrado (IGARCH) y los pronósticos a largo plazo apenas revierten a la media: interprétalos en consecuencia.
En resumen
La volatilidad es una de las pocas cosas del mercado que es genuinamente predecible a corto plazo, y GARCH es una forma compacta y bien entendida de capturarla. En MATLAB todo el bucle —crear, estimar, inferir, pronosticar— son un puñado de líneas, y la recompensa es un modelo de riesgo que se aprieta cuando el mercado es peligroso y se relaja cuando está tranquilo. Solo eso ya te pone por delante de cualquier estrategia que siga apostando el mismo tamaño todos los días.
Este es contenido educativo, no una recomendación de inversión. Los modelos son aproximaciones; valida siempre fuera de muestra y gestiona tu riesgo.