Proxima Alpha - Powered by Santander

Santander

Últimos 7 días

chat_bubble_outlineActúa como quantitative c...
chat_bubble_outlineActúa como quantitative c...
chat_bubble_outlineEx 28.- Top Cheflabel
chat_bubble_outlineEx 27.- top 25 Q-Alabel
chat_bubble_outlineEx 26.- Panel estructurado de ...label
chat_bubble_outlineEx 25.- Optimización regulator...label
chat_bubble_outlineEx 24.- WWRlabel
chat_bubble_outlineEx 23.- Insurance 1label
chat_bubble_outlineEx 25.- Counterparty Credit Ri...label
chat_bubble_outlineEx 24.- VaR Backtesting Workfl...label
chat_bubble_outlineEx 23.- VaR 2label
chat_bubble_outlineEx 22.- Merton - Credit Risklabel
chat_bubble_outlineEx 21.- Framework de análisis ...label
chat_bubble_outlineEx 20.- Claims, reserveslabel
chat_bubble_outlineEx 19.- credit card scoringlabel
chat_bubble_outlineEx 18.- credit scoring mediant...label
chat_bubble_outlineEx 17.- Mortality, Lee Carterlabel
chat_bubble_outlineEx 16.- business cycle analysi...label
chat_bubble_outlineEx 15.- Portfolio Optimizationlabel
chat_bubble_outlineEx 14.- First-to-Defaultlabel
chat_bubble_outlineEx 13.- Bond Optimizationlabel
chat_bubble_outlineEx 12.- Brinson-Fachler Attrib...label
chat_bubble_outlineEx 11.- Forecasting de tasas d...label
chat_bubble_outlineEx 10.- Asian Basketlabel
chat_bubble_outlineEx 9.- Price a Swaption Using ...label
chat_bubble_outlineEx 8.- Black-Karasinskilabel
chat_bubble_outlineEx 7.- Weather derivativeslabel
chat_bubble_outlineEx 6.- pricing sobre electrici...label
chat_bubble_outlineEx 5.- Option chainlabel
chat_bubble_outlineEx 4.- Semiconductorlabel
chat_bubble_outlineEx 3.- Hurricane Natural Catas...label
chat_bubble_outlineEx 2.- Catastrophe Risklabel
chat_bubble_outlineEx 1 .- Geopolitical risklabel
chat_bubble_outlineUnderstant it first: You ...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlinedibuja el precio de BBVA....
chat_bubble_outlinedibuja el precio de BBVA....
chat_bubble_outlinedime que hay en Movement4...
chat_bubble_outlinedile a quant_calculations...
chat_bubble_outlinedile a quant que haga una...
chat_bubble_outlinellama a quant_calculation...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlinedile a quant que me diga ...
chat_bubble_outlinedile a quant que haga una...
chat_bubble_outlinedile a quant que haga una...
settings Ajustes
help_outlineAyuda
chevron_right
📗
cva-swap-por...xlsx106.7 KB
OBJETIVO Replicar en Python el ejemplo “Counterparty Credit Risk and CVA” usando: - cva-swap-portfolio.xls - librerías pip: pandas, numpy, scipy, QuantLib, plotly/openpyxl BASE DEL EJEMPLO - Portfoli...

Blackmont

Replicación en Python del ejemplo “Counterparty Credit Risk and CVA”

1. Revisión cuidadosa del fichero de entrada

He analizado el Excel que has proporcionado y la copia equivalente en el workspace de Proxima (file-W2tu9oTd3knhEGso43TzbG.xlsx). La estructura usada en el pipeline es:

  • Hoja Swap Portfolio

    • 30 filas × 9 columnas.
    • Columnas (validado exactamente):
    • CounterpartyID
    • NettingID
    • Principal
    • Maturity
    • LegType
    • LegRateReceiving
    • LegRatePaying
    • LatestFloatingRate
    • Period
    • Contiene swaps vanilla de tipos de interés.
    • El campo Maturity viene en formato Excel (números de serie y/o fechas) y se ha parseado con cuidado (tratando seriales y strings y asegurando que no queden NaT).
  • Hoja CDS Spreads

    • 5 filas × 6 columnas.
    • Columnas (validado exactamente):
    • Date
    • cp1, cp2, cp3, cp4, cp5
    • Date: fechas de vencimiento de los CDS (convertidas a datetime sin errores).
    • cp1–cp5: spreads de CDS en bps por contraparte.

Se ha verificado que:

  • Hay swaps vivos a la fecha de Settle.
  • Las columnas coinciden exactamente con las que pedías en el PASO 1.

2. Implementación del pipeline en Python (resumen técnico)

Se ha implementado un pipeline completo en Python que replica tu especificación paso a paso, usando:

  • pandas, numpy, openpyxl
  • QuantLib (modelo Hull–White 1F y curvas)
  • plotly (gráficos interactivos)

Parámetros fijados según tu enunciado:

  • Settle: 14‑Dec‑2007
  • Modelo de tipos: Hull–White 1F con
    • α=0.2\alpha = 0.2α=0.2
    • σ=0.015\sigma = 0.015σ=0.015
  • Curva inicial (zero) con semestral y day count tipo 30/360:
    • Tenores: 3M, 6M, 1Y, 5Y, 7Y, 10Y, 20Y, 30Y
    • Tipos: 3.30%, 3.40%, 3.50%, 4.00%, 4.20%, 4.40%, 4.80%, 4.75%
  • Escenarios: 1000
  • Recuperación: 40% → LGD = 60%
  • Supuesto: independencia exposición–default (sin WWR)

Se han seguido tus pasos 1–18: lectura de inputs, construcción de curva, simulación Hull–White, valoración de swaps, netting, perfiles de exposición, lectura de CDS, construcción de curvas de default, CVA unilateral por contraparte y exportación de resultados.


3. Resultados clave

3.1 Métricas principales

A partir de la ejecución del pipeline se obtienen:

  • CVA por contraparte (unilateral, LGD 60%)
CounterpartyIDCVA (unidades de nocional)
13771.03
24589.56
31289.06
417081.27
511486.68
  • CVA total de la cartera

  • Total CVA = 38217.61

  • Perfil de exposición de cartera (resumen)

De la tabla de resumen (PortfolioExposureSummary):

  • En la fecha inicial (Settle 14‑Dec‑2007):
    • EE_Portfolio ≈ 99 365.50
    • PFE95_Portfolio ≈ 99 365.50
  • En la fecha final de simulación (última fecha de grid, por ejemplo 27‑Nov‑2014):
    • EE_Portfolio ≈ 33 202.21
    • PFE95_Portfolio ≈ 33 837.99

Interpretación:

  • La exposición esperada (EE) y el percentil 95 (PFE 95%) disminuyen en el tiempo, lo que es coherente con una cartera de swaps que va amortizando su riesgo conforme vencen los contratos.

  • Indicadores agregados de riesgo de exposición

    • EPE_Portfolio ≈ 268 955.30
    • EffectiveEPE_Portfolio ≈ 576 190.95
    • MPFE_Portfolio ≈ 1 343 745.74

Estos valores reflejan:

  • EPE: media temporal (ponderada por year‑fractions) de la EE → exposición típica a lo largo del horizonte.

  • Effective EPE: EPE construido sobre la Effective EE (running maximum), que captura la exposición “regulatoria” con efecto horizonte.

  • MPFE (Maximum PFE): máximo a lo largo del tiempo del PFE al 95%, representando una cota alta de exposición potencial bajo estrés (sin ser un VaR propiamente dicho).

  • Valoración inicial de la cartera

    • MTM inicial cartera (un escenario de referencia, t = 0):
    • InitialPortfolioMTM ≈ 59 253.06
    • Cociente MTM / nocional total:
    • InitialMTM_to_Notional ≈ 0.003027

Es decir, la cartera está cerca de fair value (MTM ~0.3% del nocional total), como cabía esperar de un portafolio de swaps relativamente bien balanceado.


4. Entregables generados

Todos los ficheros se han guardado en el workspace de Proxima y deben descargarse usando exactamente estos nombres (siguiendo el formato de enlace que indicas):

4.1 Excel con resultados

  • Excel consolidado con inputs y outputs (PASO 17):

Download file

Contiene las hojas:

  • Inputs
  • Yield Curve
  • Simulation Dates
  • Swap MTM
  • Exposures
  • Exposure Profiles
  • Discounted EE
  • Default Probabilities
  • CVA
  • Charts (descripción y nombres de los ficheros HTML de gráficos).

4.2 Gráficos en HTML (PASOS GRÁFICOS 1–11)

Los siguientes gráficos Plotly se han exportado como HTML independientes:

  • GRÁFICO 1 — Yield Curve at Settle Date
  • GRÁFICO 2 — Scenario Yield Curve Evolution (Hull–White, un escenario)
  • GRÁFICO 3 — Swap Prices Along One Scenario
  • GRÁFICO 4 — Total Portfolio MTM Across Scenarios
  • GRÁFICO 5 — Portfolio Exposure Across Scenarios
  • GRÁFICO 6 — Portfolio Exposure Profiles (EE, PFE95, Effective EE)
  • GRÁFICO 7 — Counterparty Exposure Profiles (ejemplo cp1)
  • GRÁFICO 8 — Discounted Expected Exposure Portfolio
  • GRÁFICO 9 — Discounted Expected Exposure by Counterparty
  • GRÁFICO 10 — Default Probability Curve (por contraparte)
  • GRÁFICO 11 — CVA by Counterparty

4.3 Notebook y script Python (PASO 18)

Se han generado dos artefactos de código completos:

  • Script .py limpio con todo el pipeline:

Download file

  • Notebook Jupyter reproducible:

Download file

Ambos contienen:

  • Lectura del Excel
  • Construcción de curva inicial
  • Configuración Hull–White 1F
  • Simulación de tipos y factores
  • Valoración de swaps en grid (fecha × escenario)
  • Netting y construcción de exposiciones
  • Cálculo de perfiles (EE, PFE, EPE, MPFE, Effective EE/EPE)
  • Curvas de default a partir de CDS
  • Cálculo de CVA por contraparte y total
  • Exportación a Excel + HTML de gráficos

5. Comentarios sobre metodología y limitaciones

Coherencia con tu especificación

  • Se respetan Settle, recovery, número de escenarios, parámetros Hull–White y estructura de la curva.
  • Se ha aplicado netting por CounterpartyID + NettingID, y netting “trivial” por trade en caso de NettingID ausente.
  • El cálculo de default está basado en spreads de CDS por tramo con hazard piecewise‑constant: λi=spreadi/LGD\lambda_i = \mathrm{spread}_i / \mathrm{LGD}λi​=spreadi​/LGD y construcción de H(t)H(t)H(t) y PD(t)=1−e−H(t)PD(t) = 1 - e^{-H(t)}PD(t)=1−e−H(t) por contraparte.

Principales supuestos/approximaciones (explícitos)

  1. Day count: se ha utilizado 30/360 (versión USA) para:
  • curva inicial,
  • year‑fractions del grid,
  • tiempos de CDS.

Esto busca aproximarse al “Basis 0” que mencionas, pero podría diferir ligeramente de la implementación original en MATLAB si esta usaba otra convención.

  1. Estructura de las piernas del swap:
  • Se ha construido una discretización simple anual de flujos desde Settle hasta Maturity, con factores de devengo derivados de 30/360.
  • El “spread” flotante se aproxima mediante el zero curve base + factor simulado Hull–White, con un esquema tipo “par‑swap” en cada fecha para MTM.
  • Este enfoque es robusto para MTM y para un ejercicio de CVA, pero podría diferir en el detalle de generación de cupones respecto a un calendario IRS estándar (semiannual fixed vs quarterly floating, etc.).
  1. Modelo Hull–White:
  • Se usa un esquema analítico simple de OU para el factor y se superpone al nivel base de la curva para generar tasas y descuentos.
  • No se calibra el modelo a vol alguna, sino que se fijan parámetros α,σ\alpha, \sigmaα,σ exógenos, tal como pedías.
  1. CDS y hazard rates:
  • Se asume piecewise‑constant hazard por tramo CDS.
  • Se usa una relación simple spread / LGD, sin ajuste de curva de descuento diferente de la curva de tipos base y sin tener en cuenta detalles como frecuencia de pago del CDS, accrual de default, etc.
  • Esto es suficiente para un ejercicio estructural de CVA, pero distinto a una calibración industrial completa de curvas de default.

6. Siguientes pasos recomendados

Si tu objetivo es docencia / replicar el ejemplo:

  1. Revisar en el Excel de resultados:

    • Hoja CVA para comparar CVA_cp con el ejemplo de referencia MATLAB.
    • Hojas Exposure Profiles y Default Probabilities para comprobar forma de EE, PFE y PD vs tus expectativas.
  2. Si tienes valores objetivo del ejemplo MATLAB (por ejemplo CVA por contraparte), puedo ayudarte a:

    • Ajustar ligeramente las convenciones (day count, frecuencia de cupones, tratamiento de CDS) para alinear números.
  3. Para uso productivo o más cercano a mercado:

  • Refinar:
  • Convenciones IRS (calendarios, Business Day Adjustment, Actual/360 o 30/360 según mercado).
  • Curvas OIS vs Libor/Euribor (multi‑curva).
  • Calibración de Hull–White a volatility smiles o a caps/floors.
  • Bootstrap CDS “completo” usando las funciones específicas de QuantLib para CDS.

Si quieres, en el siguiente paso puedo:

  • Explicarte en detalle el código del script/notebook (secciones y funciones).
  • O centrarme en la comparación numérica con el ejemplo MATLAB si me compartes los valores de referencia.

Nuestro Asistente es una herramienta de inteligencia artificial. La información generada no debe considerarse asesoramiento oficial