2017-09-18 4 views
1

ich in der Lage war, eine Rabatt-Kurve für den Treasury-Markt zu bauen. Ich möchte dies jedoch nutzen, um die Leitzinsrisiken einer einzelnen Anleihe (und eventuell eines Portfolios von Anleihen) zu ermitteln. Wenn ich eine 30-jährige Anleihe habe und die 1-jährige Rate, die zur Diskontierung der Anleihe verwendet wurde, verschieben, während die anderen Raten konstant gehalten werden, ändert sich der Preis der Anleihe durch? Die Wiederholung dieser für die Tenöre (zB. 2J, 5J, 7Y, usw.) und Summieren des Ergebnisses sollten Sie auf die Gesamtlaufzeit der Anleihe erhalten, aber eine bessere Vorstellung davon, wie die Risikoexposition zusammenbricht.QuantLib: Gebäude Key Kursrisiken

http://www.investinganswers.com/financial-dictionary/bonds/key-rate-duration-6725

Ist jemand Kenntnis von einer Dokumentation, die zeigt, wie dies zu tun? Vielen Dank.

Antwort

1

Da Sie bereits die Bindung und den Rabatt Kurve gebaut, und Sie haben sie in irgendeiner Weise ähnlich wie verbunden:

discount_handle = YieldTermStructureRelinkableHandle(discount_curve) 

bond.setPricingEngine(DiscountingBondEngine(discount_handle)) 

können Sie zunächst eine Ausbreitung über die bestehenden Rabatt Kurve hinzufügen und verwenden Sie dann die modifizierte Kurve, um die Anleihe zu bewerten. Etwas wie:

nodes = [ 1, 2, 5, 7, 10 ] # the durations 
dates = [ today + Period(n, Years) for n in nodes ] 
spreads = [ SimpleQuote(0.0) for n in nodes ] # null spreads to begin 

new_curve = SpreadedLinearZeroInterpolatedTermStructure(
    discount_curve, 
    [ QuoteHandle(q) for q in spreads ], 
    dates) 

geben Ihnen eine neue Kurve mit anfänglichen Spreads alle auf 0 gesetzt (und eine schreckliche Klassenname), die Sie anstelle der ursprünglichen Rabatt Kurve verwenden:

discount_handle.linkTo(new_curve) 

Nach oben , sollte die Anleihe immer noch den gleichen Preis zurückgeben (da die Spreads alle null sind).

Wenn Sie einen bestimmten Schlüssel-Rate Dauer berechnen möchten, können Sie das entsprechende Zitat bewegen: zum Beispiel, wenn Sie die 5-Jahre Zitat (die dritte in der Liste oben) stoßen wollen, führen

spreads[2].setValue(0.001) # 10 bps 

wird die Kurve entsprechend aktualisieren, und der Anleihekurs ändern sollte.

Ein Hinweis: die obigen interpolieren zwischen Spreads, wenn Sie also die 5-Jahres-Punkte um 10 bps verschieben und den 2-Jahres-Punkt unverändert lassen, würde sich eine Rate um 3 Jahre um etwa 3 bps bewegen. Um dies zu verringern (falls Sie das nicht möchten), können Sie der Kurve weitere Punkte hinzufügen und den Bereich einschränken, der variiert. Wenn Sie beispielsweise einen Punkt zu 5 Jahren minus einem Monat und einen weiteren zu 5 Jahren plus 1 Monat hinzufügen, wirkt sich das Verschieben des 5-Jahres-Punkts nur auf die beiden folgenden Monate aus. so viel

+0

Vielen Dank für Ihre Antwort Luigi. Unnötig zu sagen, Ihr Paket und Tipps sind sehr hilfreich. Entschuldigungen für meine Ignoranz mit diesem, während ich immer noch versuche, die Struktur zu lernen, aber gibt es eine Möglichkeit, die Spreads [2] .setValue (0.001) die Kurve an Ort und Stelle zu aktualisieren? Aus Ihrer Antwort oben, sobald ich führen Sie den folgenden discount_handle.linkTo (new_curve) Spreads [2] .setValue (0,001) fixed_rate_bond.setPricingEngine (new_curve) print (fixed_rate_bond.NPV()) Ich bin immer noch den gleichen NPV wie vor dem setValue(). Ist das zu erwarten? – user6142489

+0

Es sollte aktualisiert werden. Bitte posten Sie Ihren Code in der QuantLib-Mailingliste, wir werden versuchen, es herauszufinden. –

+0

Nicht sicher, wie auf Sourceforge zu posten, wenn Sie darauf verweisen. Gibt es eine E-Mail-Distribution, an die ich sie senden kann? Vielen Dank. – user6142489