2017-09-18 31 views
1

我能夠爲國債市場構建折扣曲線。然而,我正在尋找使用這個來找出個別債券(最終是債券組合)的關鍵利率風險。QuantLib:建立關鍵利率風險

我正在尋找的關鍵利率風險是如果我有30年期債券,並且我們將用於貼現債券的1年期利率轉換,同時保持其他利率不變,債券價格變化多少通過?對男高音(例如2Y,5Y,7Y等)重複此操作並對結果進行總結,可以讓您瞭解債券的總體持續時間,但可更好地瞭解風險敞口如何分解。

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

是任何人都知道,演示如何做到這一點的任何文檔嗎?謝謝。

回答

1

既然你已經建立了債券和貼現曲線,並已在某些方面類似於聯繫他們:

discount_handle = YieldTermStructureRelinkableHandle(discount_curve) 

bond.setPricingEngine(DiscountingBondEngine(discount_handle)) 

你可以先添加一個流傳在現有折扣的曲線,然後用修改曲線來定價債券。喜歡的東西:

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) 

會給你最初的價差都在0,你可以改用原來的折扣曲線的新曲線(與一個可怕的類名):

discount_handle.linkTo(new_curve) 

上述後,該債券仍然應該返還相同的價格(因爲價差全部爲空)。

當你要計算一個特定的關鍵利率持續時間,您可以將相應的引用:例如,如果你想撞了5年的引號(在上面的列表中的第三個),執行

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

曲線會相應更新,債券價格應該改變。

注意:上述內容將在點差之間進行插值,所以如果您將5年點移動10個基點並且您保持2年點不變,那麼3年左右的點將移動3個基點。爲了緩解這種情況(如果這不是你想要的),你可以在曲線上添加更多點並限制變化的範圍。例如,如果您在5年減去一個月後再加上一個積分,再加上5年加上1個月,那麼移動5年積分只會影響兩個月的積分。

+0

非常感謝您的回覆Luigi。不用說,你的軟件包和提示非常有幫助。由於我仍在嘗試學習結構,所以對此表示歉意,但是有沒有辦法讓點差[2] .setValue(0.001)更新曲線?關以上你的回答,我曾經執行以下 discount_handle.linkTo(new_curve) 價差[2] .setValue(0.001) fixed_rate_bond.setPricingEngine(new_curve) 打印(fixed_rate_bond.NPV()) 我仍然接收與setValue()之前相同的NPV。這是預期的嗎? – user6142489

+0

它應該更新到位。請將您的代碼發佈到QuantLib郵件列表中,我們將盡力弄清楚。 –

+0

不知道如何在sourceforge上發佈,如果這是你參考的地方。有沒有可以發送給我的電子郵件分發?謝謝。 – user6142489