Saltar al contenido
Todos los documentos de la biblioteca

Muestrear factores de descuento en una curva interpolada

Artículo Quant Q&A · Autor: Mike

Resumen

El documento muestra cómo obtener factores de descuento en fechas intermedias entre los vencimientos cotizados que se usan para construir una curva de descuento de QuantLib. Tras construir una curva de descuento loglineal por tramos a partir de tipos de swaps, el ejemplo genera una secuencia de fechas futuras y llama al método de descuento de la curva para cada una. Los valores resultantes forman una muestra espaciada regularmente de la curva, que puede mostrarse junto a las fechas.

El código de ejemplo toma muestras a intervalos de cinco años, aunque la pregunta pide intervalos de seis meses; se aplica el mismo método eligiendo fechas separadas por seis meses. Una segunda respuesta aclara la idea central: la curva puede devolver un factor de descuento para cualquier fecha solicitada, por lo que no hace falta limitar los resultados a los nodos originales de la curva. El ejemplo usa datos sintéticos de swaps en coronas suecas y activa la extrapolación más allá del último plazo de entrada. Por tanto, sus resultados ilustran el uso de la API y no aportan evidencia de mercado; los valores extrapolados dependen de los supuestos y la configuración de la curva.

Ideas clave

  • Una curva de descuento construida puede devolver factores de descuento para fechas entre sus nodos de vencimiento de entrada.
  • Elige el espaciado deseado entre fechas y consulta la curva una vez para cada fecha.
  • El ejemplo toma muestras en pasos de cinco años; para obtener muestras semestrales, basta con cambiar el incremento de fechas.
  • Los factores de descuento más allá del último nodo de la curva pueden depender de la configuración de extrapolación y deben interpretarse teniendo esto en cuenta.

Etiquetas

Texto completo
# QuantLib Python - Discount Factor Interpolation within curve nodes


# QuantLib Python - Discount Factor Interpolation within curve nodes












Generated a discount curve, dCurve.PiecewiseLogLinearDiscount() using input par rate for terms (.5Y, 1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 15Y, 20Y, 30Y) and output discount curve matching the input term structure. Any suggestions on how to output the discount factor curve on a .5Y interval term structure up to 30Y?

## Answer by Xiarpedia (score 1)

https://quant.stackexchange.com/a/77563

Based on your question I created the following curve example:

```
import QuantLib as ql
import pandas as pd

# Set the evaluation date
ql.Settings.instance().evaluationDate = ql.Date(30, 12, 2022)
# Declare a store variable for the helpers
helpers = []
# Create the attributes of the swap
calendar = ql.Sweden()
frequency = ql.Annual
convention = ql.ModifiedFollowing
# Synthetic market data
daycount = ql.Thirty360(ql.Thirty360.BondBasis)
index = ql.IborIndex(
    "MyIndex",
    ql.Period("3M"),
    2,
    ql.SEKCurrency(),
    calendar,
    ql.Following,
    False,
    daycount,
)

tenor = ["4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "25Y", "30Y"]
quotes = [
    3.33,
    3.2775,
    3.235,
    3.205,
    3.1775,
    3.1525,
    3.1325,
    3.095,
    3.0275,
    2.92,
    2.815,
    2.6925,
]
for r, m in zip(quotes, tenor):
    rate = ql.QuoteHandle(ql.SimpleQuote(r / 100.0))
    tenor = ql.Period(m)
    helpers.append(
        ql.SwapRateHelper(
            rate, tenor, calendar, frequency, convention, daycount, index
        )
    )
curve = ql.PiecewiseLogLinearDiscount(0, calendar, helpers, ql.Actual365Fixed())
curve.enableExtrapolation()
dates, rates = zip(*curve.nodes())
```

Which leaves me at the stage you are at. We can then interpolate on a 5 year interval as following:

```
# Interpolate on a 5Y interval
nodes = []
start_date = ql.Date(30, 12, 2022)
while True:
    start_date += ql.Period("5Y")
    nodes.append(start_date)
    if start_date > ql.Date(30, 12, 2053):
        break
discount_factors = [curve.discount(d) for d in nodes]
display(pd.DataFrame(dict({"Date": nodes, "Discount Factor": discount_factors})))
```

Which results in:

|  | Date | Discount Factor |
| 0 | December 30th, 2027 | 0.851205 |
| 1 | December 30th, 2032 | 0.735589 |
| 2 | December 30th, 2037 | 0.641855 |
| 3 | December 30th, 2042 | 0.567462 |
| 4 | December 30th, 2047 | 0.508218 |
| 5 | December 30th, 2052 | 0.464726 |
| 6 | December 30th, 2057 | 0.424997 |

## Answer by Luigi Ballabio (score 0)

https://quant.stackexchange.com/a/77564

You can pass any date you like to the `discount` method of the curve you built. It will return the corresponding discount factor.

Se muestra íntegramente con atribución según la licencia de la fuente. Licencia: CC BY-SA 4.0 (Stack Exchange)

Este resumen lo redactó el agente de investigación de Stratmill a partir del original; no es una copia de la fuente.