Riesgo cuantitativo: del VaR al copiloto de riesgo
VaR y Expected Shortfall exactos, stress testing y el LLM como capa de explicación, nunca de cálculo.
Objetivos de aprendizaje
- Calcular e interpretar el Value at Risk por los tres métodos estándar (delta-normal, simulación histórica y Monte Carlo/FHS) y el Expected Shortfall con la representación variacional de Rockafellar–Uryasev.
- Validar un modelo de VaR con los tests de ratio de verosimilitud de Kupiec (POF) y de cobertura condicional de Christoffersen, y relacionarlos con el semáforo regulatorio.
- Modelar la volatilidad con EWMA de RiskMetrics (\(\lambda = 0{,}94\)) y GARCH(1,1), incluyendo la predicción a \(k\) pasos con reversión a la media.
- Seleccionar el ratio de desempeño adecuado (Sharpe, Sortino, Omega, Calmar, Sterling, Ulcer Index) conociendo sus convenciones y sus sesgos documentados, en particular la sobreestimación del Sharpe bajo autocorrelación (Lo, 2002).
- Descomponer el riesgo de cartera con la descomposición de Euler (Component/Marginal VaR) y diseñar programas de stress testing histórico, hipotético y reverso conforme a BCBS d450 y FRTB.
- Construir un copiloto de riesgo con LangChain en el que herramientas deterministas calculan, el LLM narra la atribución y un
interruptescala al humano — y justificar por qué el LLM nunca calcula la cifra de riesgo.
Los módulos 4 a 6 construyeron la capa de comprensión: fuentes de datos, RAG documental y prompts con salida estructurada. Con este módulo el curso entra en el Bloque III —razonar y decidir— y cambia de registro: aquí la protagonista es la matemática exacta y el LLM queda confinado al rol que la regla de oro le asigna (§1.2.2): narrar, orquestar y alertar, nunca calcular.
7.1 Medición del riesgo con fórmulas exactas
La gestión de riesgo cuantitativa descansa sobre un conjunto pequeño de fórmulas cuya procedencia es verificable: el RiskMetrics Technical Document de J.P. Morgan/Reuters (1996), los documentos del Comité de Basilea (d450, d457) y la literatura académica canónica (Rockafellar–Uryasev, Kupiec, Christoffersen, Bollerslev). Este módulo las presenta tal cual aparecen en las fuentes primarias, con la convención de pérdidas positivas: \(r_t\) denota el rendimiento logarítmico del día \(t\); \(\alpha\) es el nivel de significancia de cola (0,01 para VaR al 99 %); \(z_\alpha = \Phi^{-1}(1-\alpha)\) es el cuantil normal estándar de la cola derecha de pérdidas; \(\varphi\) y \(\Phi\) son la densidad y la función de distribución de la normal estándar.
7.1.1 VaR, Expected Shortfall y validación
VaR paramétrico (delta-normal). Bajo rendimientos normales, el VaR a confianza \(1-\alpha\) y horizonte \(h\) días para una cartera de valor \(V\) con media diaria \(\mu\) y volatilidad diaria \(\sigma\) es (graphrag.com) :
con \(z_{0{,}05} = 1{,}645\) (95 %) y \(z_{0{,}01} = 2{,}326\) (99 %). La escala temporal aplica la regla de la raíz cuadrada del tiempo, \(\sigma(h) = \sigma\sqrt{h}\), válida únicamente bajo rendimientos i.i.d. Para una cartera multi-activo con pesos \(w\) y matriz de covarianzas \(\Sigma\) (The Database for Multimodal AI) :
Caso numérico. Una cartera de \(V = 100{,}000{,}000\) USD con \(\sigma = 1{,}1\%\) diaria y \(\mu \approx 0\) tiene \(\mathrm{VaR}_{0{,}01}(1) = 100{,}000{,}000 \times 2{,}326 \times 0{,}011 = 2{,}558{,}600\) USD; a 10 días, \(\mathrm{VaR}_{0{,}01}(10) = 2{,}558{,}600 \times \sqrt{10} \approx 8{,}091{,}000\) USD. El método es rápido y lineal en los factores, pero falla con no-linealidades (opciones) y con colas gordas (graphrag.com) .
VaR histórico (simulación histórica). Se reaplican los movimientos históricos de factores de los últimos \(T\) días (típicamente 250) a la cartera actual y se ordenan los P&L hipotéticos \(L_{(1)} \le L_{(2)} \le \dots \le L_{(T)}\); el VaR es el cuantil empírico (arXiv.org) :
Con \(T = 250\) y \(\alpha = 0{,}05\), el VaR al 95 % es el 13.º peor día (\(0{,}05 \times 250 = 12{,}5\)). No exige supuestos distribucionales y captura las colas de la muestra, pero al 99 % con 250 días solo hay unas 2,5 observaciones de cola, lo que produce alta variación muestral y respuesta lenta a cambios de régimen (arXiv.org) .
VaR Monte Carlo y FHS. Se simulan \(N\) trayectorias de factores bajo un modelo calibrado (GBM, Student-t, GARCH), se revalúa la cartera y se toma el cuantil de la distribución simulada (arXiv.org) :
donde \(\hat{F}_{L,N}\) es la CDF empírica de las \(N\) pérdidas simuladas. La variante Filtered Historical Simulation (Barone-Adesi, Bourgoin y Giannopoulos) ajusta un GARCH(1,1), extrae los residuos estandarizados \(z_t = r_t/\sigma_t\) y simula \(\tilde r = \hat\sigma_{t+1} z^{*}\) remuestreando \(z^{*}\) con reemplazo; la evidencia comparativa muestra que el Monte Carlo normal subestima la cola izquierda frente a FHS (arXiv.org) .
Expected Shortfall / CVaR. Para una variable de pérdida \(L\) con CDF continua, el VaR y el ES se definen como (🦜️🔗 LangChain) :
Bajo normalidad existe forma cerrada:
Al 99 % el factor es \(\varphi(2{,}326)/0{,}01 \approx 2{,}665\); al 97,5 %, \(\varphi(1{,}960)/0{,}025 = 0{,}0584/0{,}025 = 2{,}338\), cifra central en el diseño de FRTB (§7.2). A diferencia del VaR, el ES es una medida coherente en el sentido de Artzner et al. (1999): satisface subaditividad, la propiedad que el VaR viola (🦜️🔗 LangChain) . La representación variacional de Rockafellar–Uryasev (2000) convierte la estimación y optimización del CVaR en programación lineal (🦜️🔗 LangChain) :
con \((x)_+ = \max(x, 0)\); el minimizador \(c^{*}\) es el propio VaR. El estimador empírico en simulación histórica es simplemente el promedio de las \(\lfloor T\alpha \rfloor\) peores pérdidas.
Backtesting de VaR. Un modelo de VaR que no se valida es una opinión. Con el indicador de excepción \(I_t = \mathbf{1}\{L_t > \mathrm{VaR}_t\}\), el test de proporción de fallos de Kupiec (1995) contrasta la tasa observada \(N/T\) contra la nominal \(p\) (CurvedTrading) :
Caso numérico. Con \(T = 250\) días, \(p = 0{,}01\) y \(N = 7\) excepciones (esperadas: 2,5), \(LR_{POF} \approx 5{,}50\), por encima del crítico \(\chi^2_1(0{,}95) = 3{,}84\): el modelo se rechaza al 5 % (con \(N = 6\), \(LR_{POF} \approx 3{,}56\), justo por debajo del umbral). Christoffersen (1998) descompone la cobertura condicional en \(LR_{cc} = LR_{uc} + LR_{ind} \sim \chi^2_2\), donde el término de independencia usa las probabilidades de transición \(\hat\pi_{01} = n_{01}/(n_{00}+n_{01})\) y \(\hat\pi_{11} = n_{11}/(n_{10}+n_{11})\), detectando rachas de excepciones que el test de Kupiec no ve (langchain.ac.cn) . Ambos tests son exigidos por los marcos de modelos internos de Basilea II/III (langchain.ac.cn) .
En palabras llanas: el dique, la crecida y el inspector
Piensa en una cartera como una ciudad junto a un río. El VaR al 99 % es la altura del dique que solo se desborda un año de cada cien: te dice dónde está el borde, pero nada de lo que hay al otro lado. El Expected Shortfall responde a la pregunta que el dique no contesta —«cuando se desborde, ¿cuánta agua entra?»—: es la profundidad media de la inundación en los años malos, no su frecuencia. Por eso dos carteras con el mismo VaR pueden esconder inundaciones muy distintas, y por eso FRTB calcula el capital con el ES.
El test de Kupiec es el inspector de diques: si el dique se desborda siete veces en 250 años cuando prometía 2,5, no hace falta discutir de hidrología — el dique está mal dimensionado. Y el test de Christoffersen añade el matiz fino: no es lo mismo siete crecidas repartidas al azar que siete seguidas; las rachas delatan que el modelo no está viendo algo persistente.
7.1.2 Volatilidad: la materia prima de todo número de riesgo
Volatilidad realizada. Con \(M\) observaciones intradía equiespaciadas del log-precio y rendimientos \(r_{t,i} = p_{t,i} - p_{t,i-1}\) (QVeris AI) :
Bajo una difusión con saltos, \(RV_t\) es estimador consistente de la variación cuadrática cuando \(M \to \infty\) (Andersen–Bollerslev); con ruido de microestructura, la frecuencia óptima práctica es de 5 minutos (QVeris AI) .
EWMA / RiskMetrics. La recursión del RiskMetrics Technical Document (4ª ed., 1996) es (graphrag.com) :
Expandida, \(\sigma_t^2 = (1-\lambda)\sum_{i=1}^{\infty}\lambda^{i-1} r_{t-i}^2\): pesos geométricos decrecientes con memoria efectiva \(\approx 1/(1-\lambda) \approx 17\) días para \(\lambda = 0{,}94\). Es un IGARCH sin reversión a la media (\(\omega = 0\), \(\alpha+\beta = 1\)), y su versión multivariante \(\Sigma_t = \lambda\Sigma_{t-1} + (1-\lambda)\, r_{t-1} r_{t-1}^{\top}\) es siempre semidefinida positiva (graphrag.com) .
En la práctica institucional. Tres décadas después de su publicación, \(\lambda = 0{,}94\) sigue siendo el estándar de facto para volatilidad diaria en mesas de riesgo: el RiskMetrics Technical Document (J.P. Morgan/Reuters, 17-dic-1996, hoy distribuido por MSCI) fijó ese parámetro y la industria lo heredó como punto de partida de casi todo motor de VaR paramétrico (graphrag.com) . El propio documento original advertía que "ninguna sofisticación analítica sustituirá la experiencia y el juicio profesional en la gestión de riesgos" (Godel Discount) — una frase de 1996 que describe con precisión el principio rector de este módulo para los copilotos con LLM. En el extremo más reciente, FinCon (NeurIPS 2024) usa el CVaR del peor 1 % de P&L diarios como señal de gating que cambia el comportamiento del agente gestor (Github) : la métrica de cola decide, el modelo de lenguaje narra.
GARCH(1,1). El modelo de Engle (1982) y Bollerslev (1986) introduce reversión a la media (Bright Data) :
La varianza incondicional (nivel de largo plazo) es \(\bar\sigma^2 = \dfrac{\omega}{1-\alpha-\beta}\), y la predicción a \(k\) pasos revierte geométricamente hacia ella:
La suma \(\alpha+\beta\) mide la persistencia de los choques de volatilidad; EWMA es el caso límite \(\omega = 0\), \(\alpha+\beta = 1\) (Bright Data) . Caso numérico. Con \(\alpha+\beta = 0{,}97\), un pico de volatilidad que duplica el nivel de largo plazo (\(\sigma_{t+1}^2 = 2\bar\sigma^2\)) tarda \(k \approx \ln(0{,}5)/\ln(0{,}97) \approx 23\) días en reducir el exceso a la mitad.
Drawdown máximo y asimetría de recuperación. Sea \(V_t\) la curva de equity y \(\overline{V}_t = \max_{s\le t} V_s\) el máximo histórico; el drawdown es \(D_t = (V_t - \overline{V}_t)/\overline{V}_t \le 0\) y (Investopedia) :
La recuperación es asimétrica: una pérdida \(d\) requiere una ganancia \(g = \dfrac{d}{1-d}\) para volver al máximo — una caída del 50 % exige una subida del 100 %, y una del 90 %, una del 900 % (Investopedia) . Es la métrica de riesgo que los inversores realmente sienten, y la que ancla los ratios Calmar y Sterling.
En palabras llanas: la volatilidad viene en rachas (y tiene memoria corta)
La volatilidad no se reparte como monedas al aire: los días turbulentos se agrupan con días turbulentos y los tranquilos con tranquilos. Ese clustering es justo lo que la normal i.i.d. ignora y lo que EWMA y GARCH capturan. EWMA es un promedio con memoria deliberadamente corta: con \(\lambda = 0{,}94\) el día más reciente pesa un 6 % y la memoria efectiva son unos 17 días — reacciona rápido a un cambio de régimen, a precio de «olvidar» que existe un nivel de largo plazo (es un IGARCH: los choques no revierten). GARCH(1,1) añade exactamente eso: una gravedad que tira de la varianza hacia \(\bar\sigma^2\). Con \(\alpha+\beta = 0{,}97\), un pico que duplica el nivel de largo plazo tarda unos 23 días en desinflarse a la mitad (el cálculo del módulo). Regla práctica: EWMA para reaccionar, GARCH para proyectar a \(k\) pasos.
La recuperación de un drawdown no es simétrica
Perder un 20 % no se arregla ganando un 20 %: se arregla ganando un 25 %. La recuperación exige \(g = d/(1-d)\), una función convexa que se dispara en cuanto la caída se agranda — el módulo lo fija en los extremos: \(-50\%\) exige \(+100\%\) y \(-90\%\) exige \(+900\%\). Es la razón aritmética de que los ratios anclados al drawdown (Calmar, Sterling, Ulcer Index) castiguen tan duramente las pérdidas profundas y de que el control del tamaño de posición importe más que la puntería: el tiempo de recuperación crece más rápido que la pérdida.

Figura 7.A. La curva \(g = d/(1-d)\) frente a la diagonal simétrica: a partir de caídas del 30 % la recuperación exigida se despega con violencia. Elaboración propia.
7.1.3 Ratios de desempeño ajustado por riesgo
El catálogo completo, con sus convenciones y trampas documentadas:
Sharpe. Introducido como reward-to-variability ratio (Sharpe, 1966) (AlphaLog) :
La anualización con \(\sqrt{12}\) o \(\sqrt{252}\) exige rendimientos i.i.d.; con autocorrelación serial positiva — típica de estrategias de hedge funds con valoraciones suavizadas — el Sharpe anualizado puede sobreestimarse hasta un 65 % (Lo, 2002) (Alpha Vantage) . Es la advertencia metodológica más ignorada de la industria.
Sortino. Sustituye la volatilidad total por la desviación downside respecto al rendimiento mínimo aceptable \(\tau\) (canvasbusinessmodel.com) :
Omega (Keating–Shadwick, 2002). Usa toda la distribución, sin supuestos de momentos (canvasbusinessmodel.com) :
con forma empírica \(\hat\Omega(\theta) = \dfrac{\frac{1}{n}\sum_{i=1}^n (R_i-\theta)^{+}}{\frac{1}{n}\sum_{i=1}^n (\theta-R_i)^{+}}\) (Macroption) .
Calmar. \(\mathrm{Calmar} = \dfrac{\mathrm{CAGR}}{|\mathrm{MDD}|}\), típicamente sobre ventanas de 36 meses; introducido por Terry W. Young (1991) (quantvps.com) . Sesgo de ventana: un track record que aún no ha vivido su crisis exhibe un Calmar artificialmente alto (quantvps.com) .
Sterling. La definición original de Deane Sterling Jones (1981) es (Alpha Vantage) :
con \(APR\) el retorno anual compuesto y \(ALD\) el promedio de los máximos drawdowns anuales. El 10 % reflejaba el rendimiento de los T-bills en 1981; coexisten variantes con \(-10\%\) y versiones modernas con \(R_f\) (langfuse.com) . Regla editorial: citar siempre la convención usada.
Ulcer Index (Martin & McCann, 1987). Raíz cuadrática media de los drawdowns porcentuales desde el último máximo (TrueFoundry) :
El cuadrado penaliza conjuntamente la profundidad y la duración de las caídas; es la base del Ulcer Performance Index, \(UPI = (R_p - R_f)/UI\) (TrueFoundry) .
Tracking error e information ratio. Para una cartera activa frente a su benchmark \(b\) (🦜️🔗 LangChain) :
La ley fundamental de la gestión activa de Grinold (1989) descompone el IR en habilidad y amplitud: \(IR \approx IC \cdot \sqrt{BR}\), donde \(IC\) es el coeficiente de información (correlación entre previsión y realización) y \(BR\) el número de apuestas independientes (NextFuture) .
Momentos de orden superior y VaR modificado. Los rendimientos de renta variable exhiben asimetría negativa y exceso de curtosis (kosmoy.com) :
(normal: \(S = 0\), \(K = 3\)). La expansión de Cornish–Fisher (Zangari, 1996) corrige el cuantil gaussiano (AgenticWire) :
y Boudt, Peterson y Carl (2008) extienden la corrección a un ES modificado coherente, \(\mathrm{ES}_{\mathrm{mod}} = \sigma\frac{\varphi(z)}{\alpha}\left[1 + \frac{z}{6}S + \frac{z^2-1}{24}K_{\mathrm{exceso}}\right] - \mu\) (AgenticWire) . La expansión deja de ser monótona para \(|S| \gtrsim 2\) o \(K \gtrsim 6\): verificar la monotonía de \(z_{CF}\) en \(\alpha\) antes de reportarla (AgenticWire) .
La siguiente tabla sintetiza las métricas de riesgo principales del módulo.
Tabla 7.1 — Métricas de riesgo: fórmula, horizonte, supuestos y limitación principal
| Métrica | Fórmula resumida | Horizonte típico | Supuestos clave | Limitación principal |
|---|---|---|---|---|
| VaR delta-normal | \(V z_\alpha \sigma \sqrt{h}\) | 1–10 días | Normalidad, i.i.d., linealidad | Subestima colas gordas y no-linealidades (graphrag.com) |
| VaR histórico | \(L_{(\lceil T(1-\alpha)\rceil)}\) | 1 día (250 obs.) | La historia representa el futuro | ~2,5 obs. de cola al 99 %; lento ante régimen nuevo (arXiv.org) |
| VaR Monte Carlo / FHS | \(\hat F^{-1}_{L,N}(1-\alpha)\) | 1–10 días | Modelo de factores bien calibrado | Riesgo de especificación; coste de revaluación (arXiv.org) |
| ES / CVaR | \(\frac{1}{\alpha}\int_0^\alpha \mathrm{VaR}_u\,du\) | 1–10 días | Cola bien estimada | Backtesting estadísticamente difícil (kosmoy.com) |
| EWMA RiskMetrics | \(\lambda\sigma_{t-1}^2 + (1-\lambda)r_{t-1}^2\) | Diario | \(\lambda = 0{,}94\) universal | Sin reversión a la media (IGARCH) (graphrag.com) |
| GARCH(1,1) | \(\omega + \alpha\varepsilon^2 + \beta\sigma^2\) | Diario–mensual | Estacionariedad, \(\alpha+\beta<1\) | Persistencia mal estimada en crisis (Bright Data) |
| MDD | \(\min_t (V_t - \overline V_t)/\overline V_t\) | Todo el historial | Curva de equity fiel | Depende de la ventana; mira al pasado (Investopedia) |
Interpretación. Ninguna fila de la tabla es dominante: cada métrica codifica un supuesto distinto sobre dónde reside el riesgo. El VaR delta-normal comprime toda la distribución en dos parámetros y es imbatible en velocidad y atribución analítica (§7.2.1), pero su precio es la normalidad; la simulación histórica renuncia al supuesto distribucional a cambio de depender de una única trayectoria pasada, con apenas 2,5 observaciones efectivas en la cola del 99 % sobre 250 días. El ES corrige la ceguera del VaR a la severidad de cola y es coherente (subaditivo), pero su validación estadística es más difícil — razón por la que FRTB calcula capital con ES y hace backtesting con VaR. Las medidas de volatilidad condicional (EWMA, GARCH) alimentan a todas las anteriores: un error de calibración en \(\sigma\) se propaga linealmente al VaR. El MDD, por último, no es una medida probabilística sino histórica, y por ello complementa — no sustituye — a las medidas de cola: responde a la pregunta del inversor ("¿cuánto puedo llegar a sufrir y durante cuánto tiempo?") que ningún cuantil contesta.

Figura 7.1. Distribución sintética de retornos diarios con colas gordas (mezcla normal / Student-t), con el VaR al 99 % y el ES al 97,5 % marcados. Con colas más pesadas que la normal, el ES se separa del VaR hacia la cola: exactamente el comportamiento que FRTB busca capitalizar. Datos generados con fines exclusivamente ilustrativos. Elaboración propia, jul-2026.
Trampa común: anualizar el Sharpe con \(\sqrt{252}\) y mirar para otro lado
La regla \(S_{\mathrm{anual}} = S_{\mathrm{diario}}\sqrt{252}\) solo es válida con rendimientos i.i.d., y casi nadie comprueba ese supuesto antes de aplicarla. El caso peor documentado es el de las estrategias con valoraciones suavizadas (hedge funds con activos ilíquidos marcados a mano): el suavizado crea autocorrelación positiva artificial, que a la vez infla el numerador aparente de estabilidad y, según Lo (2002), puede sobreestimar el Sharpe anualizado hasta un 65 % (§7.1.3). Es la advertencia metodológica más ignorada de la industria porque el sesgo siempre juega a favor del gestor.
Tres defensas prácticas: contrastar la autocorrelación serial (un test de Ljung–Box o el variance ratio de Lo–MacKinlay) antes de anualizar; recalcular el Sharpe con rendimientos de-smoothed o a horizontes más largos; y desconfiar editorialmente de cualquier Sharpe mensual anualizado de una estrategia ilíquida que no documente su esquema de valoración.
7.2 Riesgo de cartera y stress testing
7.2.1 Descomposición de Euler, escenarios y FRTB
Component y Marginal VaR. Con VaR paramétrico \(\mathrm{VaR}_p = z_\alpha \sigma_p V\) y posiciones monetarias \(x_i\), la descomposición de Garman (1996) es (The Database for Multimodal AI) :
equivalentemente, \(\mathrm{CVaR}_i = \mathrm{VaR}_i \cdot \rho_{i,p}\). La propiedad de Euler garantiza la agregación exacta: \(\sum_i \mathrm{CVaR}_i = \mathrm{VaR}_p\) (kosmoy.com) . El Marginal VaR identifica el "peor hedge": la posición con mayor MVaR es aquella cuya reducción corta más riesgo por unidad monetaria. Esta descomposición es, además, la base matemática de la atribución narrativa de riesgo con LLM (§7.3): la herramienta calcula los \(\mathrm{CVaR}_i\), el modelo de lenguaje los explica (The Database for Multimodal AI) . La diversificación subyacente es la de Markowitz: con dos activos, \(\sigma_p^2 = w_A^2\sigma_A^2 + w_B^2\sigma_B^2 + 2 w_A w_B \sigma_A \sigma_B \rho_{AB}\), y cualquier \(\rho < 1\) reduce la varianza frente a la media ponderada — con la advertencia crítica de que en crisis las correlaciones convergen a 1 (2008, marzo 2020) (confident-ai.com) .
Escenarios históricos. Se reaplican los shocks observados en episodios reales a la cartera actual: subprime 2007-08, COVID marzo-2020, Lunes Negro 1987 (−22,6 % del Dow en una sesión), LTCM 1998, shock de tipos 2022. Para cada factor se determinan los peores shocks a 1 y 10 días. Su valor es que preservan las correlaciones reales del estrés: en 2008 las bolsas desarrolladas cayeron a la par, y en marzo de 2020 acciones y bonos del Tesoro se vendieron simultáneamente en la dash for cash (openobserve.ai) .
Escenarios hipotéticos. Shocks extremos plausibles no necesariamente observados. El programa de stress de un banco global documentado combina escenarios históricos ("subprime crisis", "Covid crisis") con un worst case hipotético que mueve cada factor entre ±3 y ±6 desviaciones estándar diarias, ignorando correlaciones históricas (openobserve.ai) .
Reverse stress testing. Los principios BCBS invierten la lógica: "un programa de stress testing debe determinar qué escenarios podrían cuestionar la viabilidad del banco (reverse stress tests) y así descubrir riesgos ocultos e interacciones entre riesgos", partiendo "de un resultado conocido de estrés — brecha de ratios de capital regulatorio, iliquidez o insolvencia — y preguntándose qué eventos podrían conducir a ese resultado" (BCBS 2009, p. 14) (Laminar) . PRA, EBA y FCA lo incorporan a sus marcos (ICAAP/SREP; FG 20/1), y el informe BCBS Range of Practices (2017) documenta que dos tercios de las instituciones lo practican de forma complementaria (xseek.io) . Los Stress Testing Principles de 2018 (BCBS d450) sustituyen a los de 2009 y exigen el stress testing como complemento obligado de los modelos internos, precisamente para cubrir lo que los supuestos del modelo no capturan (kosmoy.com) .
FRTB: de VaR 99 % a ES 97,5 %. La Fundamental Review of the Trading Book (BCBS d352, 2016; revisada en d457, 2019) sustituye en el enfoque de modelos internos el VaR 99 % a 10 días por el ES 97,5 % calibrado sobre un periodo de estrés, con cinco horizontes de liquidez (10/20/40/60/120 días), un conjunto reducido de factores modelables y capital aditivo para los no modelables (NMRF) (kosmoy.com) . La calibración es deliberadamente continua bajo normalidad (Holiday Landmark) :
— casi idénticos (\(2{,}338\sigma \approx 2{,}326\sigma\)) cuando los retornos son normales, pero con el ES creciendo mucho más rápido que el VaR en cuanto aparecen colas gordas: "mismo número en calma, número mayor precisamente en las exposiciones de cola gorda que el VaR históricamente subcapitalizó" (Holiday Landmark) . El backtesting sigue haciéndose sobre VaR 99 % y 97,5 % con el semáforo sobre 250 días — porque el ES no es elicitable de forma clásica y su validación directa es estadísticamente más difícil —, complementado por el P&L Attribution Test (PLAT) a nivel de desk; un desk que falla backtesting o PLAT migra forzosamente del enfoque interno al estandarizado (kosmoy.com) . Calendario de implementación: UE (CRR3) enero de 2026, Reino Unido (PRA) enero de 2027, EE. UU. pendiente (braintrust.dev) .
Tabla 7.2 — FRTB (IMA) frente al enfoque interno anterior (Basel 2.5)
| Dimensión | Marco anterior (Basel 2.5, IMA) | FRTB (IMA, d457) |
|---|---|---|
| Métrica de capital | VaR 99 %, 10 días (+ stressed VaR) | ES 97,5 %, calibrado a periodo de estrés (braintrust.dev) |
| Horizonte | 10 días uniforme | 10/20/40/60/120 días según liquidez del factor (kosmoy.com) |
| Factores de riesgo | Todos modelables por defecto | NMRF con capital aditivo; conjunto reducido ≥ 75 % del ES total |
| Diversificación | Implícita completa | IMCC reconoce solo el 50 % del beneficio (\(\rho = 0{,}5\)) |
| Validación | Semáforo sobre VaR 99 % | Semáforo sobre VaR 99 % y 97,5 % + PLAT a nivel desk (kosmoy.com) |
| Consecuencia del fallo | Multiplicador de capital | Migración forzosa del desk al enfoque estandarizado (kosmoy.com) |
| Entrada en vigor | 2011 (Basel 2.5) | UE ene-2026; UK ene-2027; EE. UU. pendiente (braintrust.dev) |
Interpretación. La reforma corrige quirúrgicamente los tres fallos documentados del VaR — no subaditividad, ceguera a la severidad de cola y prociclicidad por calibración a volatilidad reciente baja (braintrust.dev) — sin romper la continuidad operativa: la aritmética \(2{,}338\sigma \approx 2{,}326\sigma\) garantiza que, en un mundo normal, el capital apenas cambia, mientras que en un mundo de colas gordas el ES exige más precisamente donde el VaR falló en 2008. Los horizontes de liquidez escalonados reconocen que no todos los factores pueden liquidarse en 10 días, y el régimen NMRF penaliza la modelización oportunista de factores con datos escasos. La decisión de mantener el semáforo sobre VaR — y no sobre ES — es una concesión a la estadística: el ES no es elicitable en sentido clásico, así que la validación se queda con el cuantil. Para el lector quant, la lección práctica es que un motor de riesgo moderno debe producir ambas familias de números (VaR para validación, ES para capital) sobre la misma infraestructura de escenarios.
Ejemplo trabajado: Component VaR en una cartera de dos posiciones
Cartera de 100 M USD con dos posiciones: \(x_A = 60\) M en renta variable (\(\sigma_A = 1{,}2\%\) diario) y \(x_B = 40\) M en bonos (\(\sigma_B = 0{,}8\%\)), correlación \(\rho = 0{,}3\), VaR al 99 % (\(z = 2{,}326\)).
Paso 1 — covarianzas. \(\Sigma_{AA} = 0{,}012^2 = 1{,}44\times10^{-4}\), \(\Sigma_{BB} = 0{,}008^2 = 6{,}4\times10^{-5}\), \(\Sigma_{AB} = 0{,}3 \times 0{,}012 \times 0{,}008 = 2{,}88\times10^{-5}\).
Paso 2 — \((\Sigma x)\) en términos monetarios. \((\Sigma x)_A = 1{,}44\times10^{-4}\cdot60\,\text{M} + 2{,}88\times10^{-5}\cdot40\,\text{M} = 8.640 + 1.152 = 9.792\); \((\Sigma x)_B = 1.728 + 2.560 = 4.288\).
Paso 3 — VaR de cartera. \(\sigma_p = \sqrt{x^\top \Sigma x} = \sqrt{60\,\text{M}\times9.792 + 40\,\text{M}\times4.288} \approx 871.230\) USD; \(\mathrm{VaR}_p = 2{,}326 \times 871.230 \approx 2.026.480\) USD.
Paso 4 — Componentes. \(\mathrm{CVaR}_A = z \cdot x_A (\Sigma x)_A / \sigma_p \approx 1.568.550\) USD (77,4 %); \(\mathrm{CVaR}_B \approx 457.930\) USD (22,6 %).
Paso 5 — comprobación de Euler. \(1.568.550 + 457.930 \approx 2.026.480 = \mathrm{VaR}_p\): la agregación es exacta, salvo redondeo. La lectura de mesa: la posición A es el 60 % del nominal pero el 77,4 % del riesgo; reducir 1 USD de A corta unos 2,6 céntimos de VaR frente a 1,1 céntimos por cada USD de B. El Marginal VaR, no el peso, dice dónde recortar.
import numpy as np
def euler_cvar(x: np.ndarray, cov: np.ndarray, z: float = 2.326) -> dict:
"""Component VaR paramétrico con comprobación de agregación de Euler."""
sx = cov @ x
sigma_p = float(np.sqrt(x @ sx))
var_p = z * sigma_p
cvar = x * (z * sx / sigma_p) # CVaR_i = x_i · MVaR_i
return {"var_p": round(var_p, 2),
"cvar": np.round(cvar, 2).tolist(),
"pct": np.round(100 * cvar / var_p, 1).tolist(),
"euler_check": round(float(cvar.sum() - var_p), 2)} # ≈ 0.0
Con x = [60e6, 40e6] y la cov del paso 1 devuelve pct = [77.4, 22.6] y euler_check ≈ 0. Este JSON es exactamente lo que una herramienta euler_attribution entregaría al copiloto de §7.3: la herramienta calcula los Component VaR con su comprobación de agregación, y el modelo de lenguaje se limita a narrarlos citando cada cifra tal como la recibió.
7.3 El copiloto de riesgo con LangChain
7.3.1 Patrón canónico: la herramienta calcula, el LLM narra, el humano veta
La literatura 2024-2026 documenta una transición de "LLMs como analistas de texto" a agentes LLM con herramientas cuantitativas: el LLM razona y orquesta; los números los calcula código determinista (horizontrading.io) . La taxonomía de agentes de trading de 2026 clasifica el control de riesgo como una capacidad nativa del agente — "riesgo como mecanismo de gating en la arquitectura de acción, no post-hoc" (horizontrading.io) — y el caso de referencia es FinCon (NeurIPS 2024): su alerta de riesgo intra-episodio se dispara por una caída súbita del CVaR, definido como la media del peor 1 % de P&L diarios, y al activarse "el agente gestor adopta una postura adversa al riesgo ese día, independientemente del estado de riesgo previo" (Github) . En el ecosistema open source, servidores MCP como wraquant-mcp exponen 218 herramientas (módulos de riesgo, volatilidad, regímenes) a agentes Claude/LangChain; el patrón documentado de conversación es literalmente "VaR(95 %): −2,1 %, CVaR: −3,4 %" calculado por la herramienta y narrado por el agente (quodfinancial.com) . LangChain mantiene además un repositorio de muestra oficial de agente de evaluación de riesgo (langchain-samples/risk-assessment-agent, LangGraph + LangSmith) con escenarios GRC y human-in-the-loop (TS Imagine) , y proyectos como DART separan arquitectónicamente risk_manager.py (Monte Carlo VaR, Kelly, sizing) del analizador LLM (sanj.dev) .
Capa 1: la herramienta determinista. Toda cifra de riesgo se produce en Python, con redondeo controlado y salida estructurada:
import numpy as np
from langchain_core.tools import tool
@tool
def compute_var_es(returns: list[float], confidence: float = 0.99) -> dict:
"""VaR y Expected Shortfall por simulación histórica (pérdidas positivas)."""
r = np.asarray(returns, dtype=float)
losses = np.sort(-r) # pérdidas positivas, ordenadas
alpha = 1.0 - confidence
var = float(np.quantile(losses, confidence))
tail = losses[losses >= var]
es = float(tail.mean()) if tail.size else var
# Redondeo controlado: el LLM recibe la cifra ya fijada, nunca la recalcula
return {"var": round(var, 6), "es": round(es, 6),
"n_tail": int(tail.size), "alpha": alpha, "method": "historical"}
Capa 2: backtesting como herramienta de validación. El mismo principio se aplica al test de Kupiec:
import numpy as np
from scipy.stats import chi2
from langchain_core.tools import tool
@tool
def kupiec_pof(exceptions: int, n_days: int, p: float = 0.01) -> dict:
"""Test POF de Kupiec: H0 = la tasa de excepciones es la nominal p."""
N, T = exceptions, n_days
lr = -2.0 * (np.log((1 - p) ** (T - N) * p ** N)
- np.log((1 - N / T) ** (T - N) * (N / T) ** N))
return {"lr_pof": round(float(lr), 4),
"p_value": round(float(chi2.sf(lr, 1)), 4),
"reject_5pct": bool(lr > chi2.ppf(0.95, 1))}
Capa 3: el agente copiloto con escalado humano. El LLM orquesta las herramientas y redacta la atribución basada en la descomposición de Euler que recibe como JSON; un interrupt detiene el flujo ante cualquier brecha de límite para que decida el risk manager:
from langchain.agents import create_agent
from langchain.agents.middleware import HumanInTheLoopMiddleware
from langgraph.checkpoint.memory import InMemorySaver
SYSTEM = (
"Eres un copiloto de riesgo institucional. NUNCA calcules cifras de riesgo: "
"usa SIEMPRE las herramientas compute_var_es, kupiec_pof y euler_attribution. "
"Narra la atribución solo a partir del JSON que devuelvan las herramientas, "
"citando cada número exactamente como lo recibiste."
)
copilot = create_agent(
model="claude-sonnet-4-6",
tools=[compute_var_es, kupiec_pof, euler_attribution],
system_prompt=SYSTEM,
middleware=[
HumanInTheLoopMiddleware(
interrupt_on={
"escalate_limit_breach": True, # approve / edit / reject / respond
"compute_var_es": False, # lectura segura
},
),
],
checkpointer=InMemorySaver(), # en producción: PostgresSaver (audit log)
)
La arquitectura completa separa tres planos de responsabilidad:
Diagrama 7.1. Arquitectura del copiloto de riesgo: las tools deterministas producen todas las cifras; el LLM narra la atribución basada en Euler; el interrupt escala al humano ante brechas.
Monitorización de límites con alertas en lenguaje natural. Un scheduler ejecuta el cálculo de VaR/ES/MDD contra límites; si hay brecha, el agente compone la alerta —qué límite, cuánto se excede, qué posiciones contribuyen según Component VaR, acción sugerida— y el interrupt la retiene hasta la decisión humana (TS Imagine) :
Diagrama 7.2. Flujo de monitorización de límites: la detección es cuantitativa; el LLM aporta la narrativa de la alerta; el humano retiene la decisión.
from langgraph.types import interrupt
def breach_node(state):
if state["var_99"] <= state["limit"]:
return {"status": "compliant"}
alert = llm.invoke(ALERT_PROMPT + json.dumps(state["euler_breakdown"]))
decision = interrupt({"alert": alert, "state": state}) # pausa hasta el humano
return {"status": decision["action"], "alert": alert}
Ejemplo trabajado: una brecha de límite, de la cifra al veto humano
Recorramos el Diagrama 7.2 con números concretos. Al cierre, el scheduler llama a compute_var_es sobre 250 días de rendimientos y recibe la cifra ya fijada por la herramienta:
{"var": 0.0272, "es": 0.0341, "n_tail": 3, "alpha": 0.01, "method": "historical"}
El VaR 99 % de la cartera equivale a 2,72 M USD contra un límite de 2,50 M: brecha de 220.000 USD. La arista condicional del grafo encamina el estado al nodo de alerta; el LLM recibe además el desglose de euler_attribution (pct = [77.4, 22.6]) y redacta: «VaR 99 % de 2,72 M USD, 220.000 USD por encima del límite; el 77,4 % del riesgo procede de la posición A; se sugiere reducir A en ~10 M USD». Cada número del texto coincide con el JSON — si no, la evaluación de exact-match del ejercicio 4 lo cazaría. Entonces el interrupt pausa el grafo:
decision = interrupt({"alert": alert, "var": 0.0272, "limit": 0.025,
"euler": {"A": 77.4, "B": 22.6}})
El risk manager revisa y reanuda con su decisión, que queda en el checkpoint como evidencia de auditoría:
from langgraph.types import Command
copilot.invoke(Command(resume={"action": "approve", "reduce_A": 10_000_000}),
config={"configurable": {"thread_id": "limit-monitor-1"}})
El flujo completo, con la pausa como ciudadano de primera clase:
Fíjate en lo que no ocurre en ningún paso: el LLM no suma, no promedia, no interpola. La herramienta calcula y redondea; el modelo narra; el humano decide.
7.4 Los límites del modelo y del LLM
7.4.1 Crítica estructural al VaR, alucinación numérica y model risk
La literatura anti-VaR. Nassim Taleb hizo campaña contra el VaR durante más de una década y lo calificó, literalmente, de "un fraude" (NYT Magazine, 4-ene-2009); David Einhorn lo describió como "relativamente inútil como herramienta de gestión de riesgo y potencialmente catastrófico cuando su uso crea una falsa sensación de seguridad… como un airbag que funciona siempre, excepto cuando tienes un accidente" (quodfinancial.com) . La cuantificación del fallo es brutal: bajo normalidad, un evento de \(5\sigma\) debería ocurrir una vez cada ~14.000 años; los mercados de renta variable producen esos eventos aproximadamente una vez por década, y en 2008 libros con VaR 99 % "moderado" sufrieron pérdidas múltiples del VaR (🦜️🔗 LangChain) . A la crítica empírica se suma el defecto matemático demostrado por Artzner et al. (1999): el VaR no es subaditivo, ignora la severidad más allá del cuantil y, calibrado con volatilidad reciente baja, subestima el riesgo en estrés — las tres razones documentadas del cambio regulatorio a ES (braintrust.dev) . Y una advertencia de riesgo endógeno: una técnica de gestión adoptada masivamente se convierte en fuente de riesgo ("portfolio insurance" en 1987; correlaciones a 1,0 en el liquidity crunch de 2008) (latitude.so) .
Nota de riesgo. El benchmark FAITH (ACM ICAIF 2025) mide la alucinación numérica intrínseca de LLMs sobre tablas financieras: el mejor modelo alcanza un 95,6 % de grounding numérico (Claude-Sonnet-4), Gemini-2.5-Pro un 91,9 % y GPT-4.1 un 89,2 %, mientras que los modelos pequeños open source caen a 47,5 % (Llama-3.1-8B) y 30,6 % (Qwen-3-8B), "lo que los hace inadecuados para tareas que requieren fidelidad financiera". Incluso el mejor nivel mantiene un 4-8 % de error, "una consideración significativa en aplicaciones financieras donde la precisión es innegociable" (fixtrading.org) . A ello se añaden la inconsistencia estocástica — condiciones idénticas producen recomendaciones distintas — y la confusión correlación/causalidad (trafix.com) . Consecuencia operativa innegociable para este curso: el LLM narra, nunca calcula. Toda cifra de riesgo proviene de herramientas deterministas con redondeo controlado; la mitigación adicional es la verificación post-hoc de salidas contra un registro de fórmulas, patrón ya implementado en herramientas open source como VectorQuant (
verify_numeric, registro de "known LLM errors" por fórmula) (Neura Market) .
Model risk y el London Whale. En 2012, la Chief Investment Office de JPMorgan perdió 6,2 mil millones de dólares: la investigación interna reveló que el modelo de VaR había sido modificado para reducir a la mitad el riesgo reportado y que el cambio eludió la validación independiente (paperswithbacktest.com) . El marco de referencia histórico fue SR 11-7 (Fed/OCC, 2011), que define "modelo" ampliamente y exige tres pilares — solidez conceptual, validación efectiva con outcomes analysis y backtesting, y gobernanza con inventario — extendidos explícitamente por los supervisores a modelos de IA/ML (paperswithbacktest.com) . Actualización regulatoria (a 29-jul-2026): la carta SR 26-2 de la Reserva Federal (17-abr-2026) rescindió SR 11-7, dejó explícitamente fuera de su perímetro a la IA generativa y agéntica y se declaró no vinculante; sus principios — effective challenge, inventario, validación independiente — persisten como estándar de práctica, pero la gobernanza de agentes LLM queda hoy en un vacío normativo que las firmas cubren con observabilidad (trazas, checkpoints, audit logs) (United Fintech) . La implicación directa no cambia: un copiloto de riesgo con LangChain es, a efectos prácticos, un modelo (o usuario de modelos), y exige inventario, validación independiente, monitoreo de deriva y límites de uso documentados — con el humano reteniendo el veto final sobre cualquier acción consecuente (paperswithbacktest.com) .
La síntesis del módulo es el insight rector del Bloque III: el LLM razona, la matemática decide, el humano veta. Las fórmulas de las secciones 7.1 y 7.2 son la capa que decide; el copiloto de la sección 7.3 es la capa que razona y narra; y el interrupt con audit log es la capa que veta. Debilitar cualquiera de las tres — dejar que el LLM calcule, prescindir del backtesting, o eliminar la aprobación humana — reproduce exactamente los fallos documentados en esta sección.
Trampa común: el HITL decorativo (aprobar sin mirar)
Un interrupt que se aprueba sistemáticamente en tres segundos no es un control: es un peaje visual. El mecanismo de degradación es conocido — alert fatigue: si el sistema interrumpe decenas de veces al día, el humano aprende a pulsar «approve» por reflejo, y cuando llega la brecha real la firma ya está vacía. Las señales de alarma son medibles: tiempo medio de decisión por debajo de unos segundos, tasa de override del 0 % sostenida, siempre el mismo aprobador. Un 0 % permanente de rechazos no significa que el agente sea perfecto; significa que no existe effective challenge — exactamente el fallo organizativo del London Whale de §7.4.1, donde el modelo de VaR se modificó para reportar la mitad y nadie validó el cambio.
Las mitigaciones son de diseño, no de voluntad: interrumpir solo por umbrales cuantitativos explícitos (brecha de límite, no «el modelo está nervioso»); presentar junto a la alerta el desglose de Component VaR, para que haya algo concreto que mirar; exigir un comentario escrito en cada waiver que quede en el audit log; rotar aprobadores; y revisar periódicamente la tasa de rechazo como métrica de salud del propio control.
Ejercicios
- Tool de VaR/ES multi-método. Extienda la herramienta
compute_var_espara soportar los tres métodos (delta-normal, histórico, FHS con GARCH(1,1) y remuestreo de residuos). Verifique sobre una serie sintética con colas Student-t que el delta-normal subestima el VaR 99 % frente a FHS, y documente el tamaño de la brecha. - Backtesting completo de Kupiec y Christoffersen. Implemente como herramientas LangChain el test POF de Kupiec y el test de cobertura condicional de Christoffersen (\(LR_{cc} = LR_{uc} + LR_{ind}\)). Sobre 500 días de un modelo EWMA aplicado al S&P 500, determine en qué ventanas el modelo se habría rechazado al 5 % y si las excepciones se agrupan en rachas.
- Cornish–Fisher con guardarraíles. Implemente el VaR modificado de Cornish–Fisher y el ES de Boudt como tool, con una validación previa que rechace el cálculo (y lo comunique al agente) cuando \(|S| > 2\) o \(K > 6\), verificando además la monotonía de \(z_{CF}\) en \(\alpha\).
- Copiloto de atribución narrativa. Construya el agente de la sección 7.3 con una herramienta
euler_attributionque devuelva los Component VaR por posición (matriz de covarianzas EWMA). Exija en el system prompt que toda cifra narrada coincida exactamente con el JSON de la herramienta, y escriba una evaluación de exact-match numérico sobre 20 atribuciones generadas. - Monitor de límites con interrupt. Implemente el Diagrama 7.2 como un
StateGraphde LangGraph con checkpointer: un nodo determinista de cálculo, una edge condicional de brecha, redacción de la alerta por el LLM yinterrupt()con decisionesapprove/reject. Demuestre que el grafo pausado reanuda correctamente conCommand(resume=...)y que el checkpoint registra la decisión para auditoría. - Semáforo FRTB en miniatura. Simule 250 días de P&L frente a VaR 99 % y 97,5 %, clasifique el desk en verde/ámbar/rojo según el número de excepciones y discuta por qué el regulador mantiene el semáforo sobre VaR y no sobre ES (elicitaridad), contrastando su respuesta con la aritmética \(2{,}338\sigma \approx 2{,}326\sigma\).
Módulo 7 de 15 — LangChain para Trading Cuantitativo. Datos y versiones verificados a julio de 2026; precios y cifras de mercado sujetos a cambio. LangChain 1.3.14 / langchain-core 1.5.2.
Recursos de élite para seguir profundizando
- RiskMetrics Technical Document (J.P. Morgan/Reuters, 1996, vía MSCI): la fuente primaria del \(\lambda = 0{,}94\) y de la recursión EWMA; conviene leer el original al menos una vez.
- BCBS d457 — Minimum capital requirements for market risk (FRTB, 2019): el texto normativo del ES 97,5 %, los horizontes de liquidez 10/20/40/60/120 y el régimen NMRF de la Tabla 7.2.
- BCBS 155 — Principles for sound stress testing practices and supervision (2009): donde nace el reverse stress testing citado en §7.2.1, con la redacción original del principio.
- Rockafellar & Uryasev — Optimization of Conditional Value-at-Risk (2000, PDF): la representación variacional que convierte el CVaR en programación lineal; corto y muy legible.
- FinCon (NeurIPS 2024, arXiv:2407.06567): el sistema multi-agente que usa el CVaR del peor 1 % como señal de gating — el patrón de §7.3 llevado a producción académica.
- LangChain — Human-in-the-loop: la API exacta de
HumanInTheLoopMiddlewareeinterrupt_onusada en el código del módulo. - LangGraph — Human-in-the-loop concepts:
interrupt,Command(resume=...)y persistencia con checkpointers, necesarios para el ejercicio 5. - Reserva Federal — SR 11-7, Guidance on Model Risk Management (2011): el marco histórico de effective challenge y validación independiente; léelo junto a la actualización regulatoria de §7.4.1.
Comprueba lo aprendido
Autoevaluación con feedback inmediato. No se guarda ninguna puntuación: es solo para ti.