Informe ejecutivo – Cartera de UST 10Y / 20Y / 30Y a 1 mes
1. Revisión del fichero y tratamiento de datos
He revisado cuidadosamente tu Excel HistoricalYTMData.xlsx (file-CYTTFgyXTE4cAoPnSrZbuF):
-
Sheets y estructura:
tsYTMMats: sin filas de datos; los headers son las maturities en años: 0.5, 1, 2, 3, 5, 7, 10, 20, 30.tsYTMRates: 2500 filas × 9 columnas, yields para esas mismas maturities.tsYTMObsDates: 2500 filas × 1 columna, fechas en número de serie Excel/MATLAB.
-
Conversión y alineación:
- Las fechas se han convertido desde serial Excel a
datetimecon origen 1899‑12‑30 y se han usado como índice temporal. - Las columnas se han alineado a las maturities
[0.5, 1, 2, 3, 5, 7, 10, 20, 30]en años.
- Las fechas se han convertido desde serial Excel a
-
Limpieza, missing y outliers:
- Se han identificado:
- Missing iniciales:
missing_before(contado en el código). - Outliers: yields
< 0o> 20%y saltos diarios> 100 bps(0.01). - Todos esos puntos se han marcado como
NaNy posteriormente: - Interpolación temporal (
method='time'). - Relleno
ffill/bfill. - Resultado: no quedan NaN tras limpieza y la serie es regular en el tiempo.
Esto garantiza una base razonablemente limpia para estimar invariantes y simular curvas.
2. Curvas históricas de YTM y visualizaciones
Se han generado las siguientes figuras interactivas (HTML):
-
Evolución temporal de yields por maturity:
Muestra la dinámica de toda la curva: tramos cortos más volátiles, largos más suaves.
-
Curvas históricas seleccionadas (varias fechas):
Permite comparar la forma de la curva (pendiente, convexidad) en distintas fases de mercado.
-
Heatmap tiempo–maturity:
Visualiza de un vistazo niveles y regímenes de tipos a lo largo de toda la curva.
3. Invariantes de mercado (ΔYTM) y proyección mensual
Se han calculado cambios diarios de YTM:
- ΔYTMt=YTMt−YTMt−1 para cada maturity.
A partir de ellos:
-
Medias diarias y mensuales de ΔYTM (resumen):
Para cada maturity se ha estimado media diaria y proyectado a 1 mes (~21 días):
Ejemplo 10Y (a partir del código):
- Media diaria 10Y ≈ −1.24×10−5.
- Media mensual 10Y ≈ −2.60×10−4 (ligera tendencia a la baja en yields largos).
-
Se ha estimado la matriz de covarianza diaria de ΔYTM y se ha escalado a 1 mes:
- μ1m=21μ1d.
- Σ1m=21Σ1d.
-
La matriz mensual se ha regularizado suavemente para garantizar definición positiva (Cholesky exitoso tras, si hacía falta, añadir un pequeño
eps·I).
4. Simulación de escenarios de curva a 1 mes
Supuestos:
- ΔYTM1m multivariante normal con la media y covarianza mensuales anteriores.
- Punto de partida: última curva observada.
Pasos:
- Simulación de 10 000 escenarios de cambios mensuales en todas las maturities.
- Reconstrucción de curvas futuras: YTMfuture(i)=YTMlast+ΔYTM(i).
- Interpolación por maturity para vencimientos efectivos (por paso de 1 mes):
- 10Y → 9.9167 años.
- 20Y → 19.9167 años.
- 30Y → 29.9167 años.
Visualización de un subconjunto de curvas simuladas:
Se observa un “abanico” de posibles curvas alrededor de la actual.
5. Bonos, pricing y retornos simulados
Definición de bonos UST:
- Bonos bullet, cupón fijo, frecuencia semestral, valor nominal 100, day count Act/365:
- UST_10Y: 10 años, cupón 4.00 %.
- UST_20Y: 20 años, cupón 4.25 %.
- UST_30Y: 30 años, cupón 4.50 %.
Pricing inicial (curva actual):
Precios obtenidos (a partir de la última curva):
- 10Y:
initialPrice_10Y ≈ 112.45. - 20Y:
initialPrice_20Y ≈ 113.04. - 30Y:
initialPrice_30Y ≈ 115.42.
Todos cotizan sobre la par, consistente con cupones algo superiores al nivel de YTM actual.
Pricing futuro a 1 mes:
- Se reduce el tiempo a vencimiento en 1/12 de año.
- En cada escenario, se toma el YTM interpolado a la maturity ajustada de cada bono para descontar:
- Precio futuro = valor presente de flujos restantes con ese YTM.
- Se añade el cupón devengado del mes:
- cupoˊn_devengado=cupoˊn_anual×100×(1/12).
- Se calculan retornos por escenario: R(i)=P0Pfuturo(i)+cupoˊn_devengado−P0 Estadísticos de retornos por bono:
Se disponen en:
Resumen clave (media mensual y volatilidad):
| Bono | MeanReturn | Volatility |
|---|---|---|
| UST_10Y | 0.0069 | 0.0250 |
| UST_20Y | 0.0079 | 0.0378 |
| UST_30Y | 0.0073 | 0.0372 |
- Los bonos 20Y y 30Y ofrecen algo más de retorno esperado, pero con volatilidad significativamente mayor que el 10Y.
- Distribuciones ligeramente leptocúrticas pero bastante cercanas a normal (skew y kurtosis moderadas).
Distribución simulada de retornos por bono:
6. Optimización de cartera (Equal, Min Var, Max Sharpe, Frontera)
Con la matriz de retornos simulados (10 000 × 3) se ha:
- Estimado media y covarianza de retornos.
- Resuelto problemas con restricciones:
- Fully invested: suma pesos = 1.
- Long-only: pesos ≥ 0.
- Bounds por defecto [0, 1].
Carteras consideradas:
- Equal Weight: [1/3, 1/3, 1/3].
- Minimum Variance: varianza mínima sujeta a restricciones.
- Maximum Sharpe: máximo Sharpe sobre la frontera eficiente (rf = 0).
- Efficient Frontier: 50 puntos de mínima varianza para distintos retornos objetivo.
Visualización de la frontera y carteras clave:
Pesos óptimos y métricas (resumen):
Tabla resumida clave:
| Portfolio | UST_10Y | UST_20Y | UST_30Y | ExpectedReturn | Volatility | Sharpe | VaR95 | VaR99 | CVaR95 | CVaR99 | Duration |
|---|---|---|---|---|---|---|---|---|---|---|---|
| EqualWeight | 0.3333 | 0.3333 | 0.3333 | 0.0074 | 0.0314 | 0.234 | 0.0432 | 0.0637 | 0.0557 | 0.0735 | 13.41 |
| MinVariance | 1.0000 | 0.0000 | 0.0000 | 0.0069 | 0.0250 | 0.274 | 0.0341 | 0.0493 | 0.0435 | 0.0575 | 8.45 |
| MaxSharpe | 1.0000 | 0.0000 | 0.0000 | 0.0069 | 0.0250 | 0.274 | 0.0341 | 0.0493 | 0.0435 | 0.0575 | 8.45 |
Comentarios:
- Min Variance y Max Sharpe coinciden: ambos se concentran al 100 % en UST 10Y.
- Razón: el 10Y tiene un perfil de retorno/volumen muy eficiente y la frontera con restricciones long-only y solo 3 activos hace que el máximo Sharpe esté en un vértice.
- Equal Weight:
- Sube algo el retorno esperado (0.74 % vs 0.69 % mensual) pero con una subida de volatilidad considerable (3.14 % vs 2.50 %) y un Sharpe inferior.
- Además, eleva significativamente VaR y CVaR.
Gráfico comparando pesos:
7. Duración, contribuciones al riesgo y VaR/CVaR
Duraciones aproximadas de las carteras:
- Equal Weight: ≈ 13.41 años.
- Min Variance / Max Sharpe: ≈ 8.45 años.
Conclusión: la cartera óptima (MinVar/MaxSharpe) reduce claramente la duración frente al equal weight, lo que mitiga el riesgo a movimientos de tipos.
Contribuciones marginales al riesgo:
- Para Equal Weight:
- UST_10Y: ~25 % de la varianza.
- UST_20Y: ~39 %.
- UST_30Y: ~36 %.
- Pese a ponderación igual, 20Y y 30Y dominan el riesgo.
- En MinVar/MaxSharpe (100 % 10Y): toda la varianza viene del 10Y.
VaR/CVaR para la cartera Max Sharpe (1 mes):
- VaR95 ≈ 3.41 %.
- VaR99 ≈ 4.93 %.
- CVaR95 ≈ 4.35 %.
- CVaR99 ≈ 5.75 %.
Interpretación: con probabilidad 95 %, la pérdida no superaría ~3.4 % en un mes; en el 5 % peor de los casos, la pérdida media estaría en torno a 4.35 %.
Visualización de distribución de retornos y umbrales VaR para Max Sharpe:
8. Archivos de salida y reporte ejecutivo
Se han generado los siguientes ficheros con resultados detallados:
-
Curvas y YTM:
- Time series YTM:
-
Escenarios y carteras:
- Curvas futuras simuladas:
-
Tablas (CSV):
- Estadísticos de bonos: Download file
- Pesos y métricas por cartera: Download file
- Invariantes YTM: Download file
-
Reporte ejecutivo Markdown:
(NB: el notebook reproducible no se ha listado explícitamente entre los ficheros devueltos; si lo necesitas, podemos generarlo explícitamente en un segundo paso.)
9. Conclusiones y siguientes pasos
Conclusiones principales:
- Bajo el horizonte de 1 mes y los supuestos normales, la cartera óptima (Min Var / Max Sharpe) se concentra al 100 % en UST 10Y:
- Mejor equilibrio riesgo–retorno.
- Duración significativamente menor que Equal Weight.
- Las posiciones en 20Y y 30Y:
- Aportan incremento limitado en retorno esperado, pero empeoran Sharpe y aumentan VaR/CVaR y duración.
- Dominan la contribución al riesgo cuando se ponderan igual.
Limitaciones (a tener en cuenta):
- Supuesto de normalidad de ΔYTM y escalado lineal diaria→mensual (no captura colas gruesas).
- Pricing simplificado por bono (uso de un único YTM interpolado por vencimiento).
- Horizonte de un solo periodo (1 mes) sin rebalanceos intermedios.
Posibles extensiones:
- Introducir un asset libre de riesgo explícito para obtener carteras tangentes con apalancamiento/desapalancamiento.
- Permitir short positions o límites intermedios (por ejemplo, 50 % máximo por bono).
- Trabajar con factores principales de la curva (PCA) en lugar de ΔYTM por maturity.
- Ajustar el horizonte (3–6 meses) o trabajar con ventanas históricas móviles para análisis de robustez.
Si quieres, el siguiente paso puede ser:
- Ajustar restricciones (por ejemplo, peso mínimo en 20Y/30Y) y volver a optimizar.
- Cambiar horizonte a 3 meses o 1 año y repetir toda la simulación/optimización para comparar resultados.

