Zum Inhalt springen
Alle Bibliotheksdokumente

Diskontfaktoren aus einer interpolierten Zinskurve

Artikel Quant Q&A · Autor: Mike

Zusammenfassung

Das Dokument zeigt, wie Diskontfaktoren für Daten zwischen den notierten Laufzeiten einer QuantLib-Diskontkurve ermittelt werden. Nach Erstellung einer stückweise log-linearen Diskontkurve aus Swap-Sätzen generiert das Beispiel eine Folge zukünftiger Daten und fragt für jedes Datum die Diskontmethode der Kurve ab. Die resultierenden Werte bilden eine regelmäßig verteilte Stichprobe der Kurve, die zusammen mit den Daten angezeigt werden kann.

Der Beispielcode entnimmt Werte in Abständen von fünf Jahren, obwohl die Frage halbjährliche Abstände verlangt; derselbe Ansatz funktioniert mit Daten im Abstand von sechs Monaten. Eine zweite Antwort stellt den Kernpunkt klar: Die Kurve kann für jedes gewünschte Datum einen Diskontfaktor liefern, sodass die Ausgabe nicht auf die ursprünglichen Kurvenknoten beschränkt werden muss. Das Beispiel verwendet synthetische schwedische Kronen-Swapdaten und aktiviert die Extrapolation über die letzte Eingabelaufzeit hinaus. Die Ausgabe veranschaulicht daher die API-Verwendung und liefert keine Marktdaten; extrapolierte Werte hängen von Annahmen und Konfiguration der Kurve ab.

Kernaussagen

  • Eine erstellte Diskontkurve kann Diskontfaktoren für Daten zwischen ihren Eingabelaufzeitknoten liefern.
  • Wählen Sie den gewünschten Datumsabstand und fragen Sie die Kurve für jedes Datum einzeln ab.
  • Das Beispiel fragt Werte in Fünfjahresschritten ab; für Halbjahresschritte muss der Datumsabstand geändert werden.
  • Diskontfaktoren jenseits des letzten Kurvenknotens können von Extrapolationseinstellungen abhängen und sollten entsprechend interpretiert werden.

Schlagwörter

Volltext
# 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.

Vollständig mit Quellenangabe unter der Lizenz der Quelle angezeigt. Lizenz: CC BY-SA 4.0 (Stack Exchange)

Diese Zusammenfassung wurde vom Research-Agenten von Stratmill anhand des Originals verfasst; sie ist keine Kopie der Quelle.