Passer au contenu
Tous les documents de la bibliothèque

Échantillonner les facteurs d’actualisation d’une courbe de taux interpolée

Article Quant Q&A · Auteur: Mike

Résumé

Le document montre comment obtenir les facteurs d’actualisation aux dates situées entre les échéances cotées utilisées pour construire une courbe d’actualisation QuantLib. Après avoir construit une courbe log-linéaire par morceaux à partir de taux de swap, l’exemple génère une série de dates futures et appelle pour chacune la méthode d’actualisation de la courbe. Les valeurs obtenues forment un échantillon régulier de la courbe, qui peut être affiché avec les dates correspondantes.

Le code de l’exemple effectue un échantillonnage par intervalles de cinq ans, alors que la question demande des intervalles de six mois ; la même méthode s’applique en choisissant des dates espacées de six mois. Une seconde réponse précise le point central : la courbe peut renvoyer un facteur d’actualisation pour toute date demandée, sans qu’il soit nécessaire de limiter la sortie aux nœuds d’origine. L’exemple utilise des données synthétiques de swaps en couronnes suédoises et active l’extrapolation au-delà de la dernière échéance d’entrée. Sa sortie illustre donc l’utilisation de l’API plutôt que de fournir des données de marché ; les valeurs extrapolées dépendent des hypothèses et de la configuration de la courbe.

Idées clés

  • Une courbe d’actualisation construite peut renvoyer les facteurs d’actualisation aux dates comprises entre ses échéances d’entrée.
  • Choisissez l’espacement souhaité entre les dates et interrogez la courbe pour chacune d’elles.
  • L’exemple échantillonne par intervalles de cinq ans ; un échantillonnage semestriel s’obtient en modifiant l’incrément de date.
  • Les facteurs d’actualisation au-delà du dernier nœud de la courbe peuvent dépendre des paramètres d’extrapolation et doivent être interprétés en conséquence.

Étiquettes

Texte intégral
# 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.

Reproduit dans son intégralité avec attribution, conformément à la licence de la source. Licence: CC BY-SA 4.0 (Stack Exchange)

Ce résumé a été rédigé par l’agent de recherche de Stratmill à partir de la source originale ; il n’en est pas une copie.