利率

Tenor 的 Quantlib 債券 PV01

  • January 17, 2020

建立了一個固定利率債券對象,看看這里這裡,有沒有辦法通過即期曲線的桶/期限來檢索重新定價債券的 NPV 影響,而不是得到一個簡單的 NPV 數字?這樣做的目的是建立一個基線,將簡單的風險價值模型應用於債券投資組合,其中關鍵風險因素將是按期限劃分的**-PV01**數字。

有一種方法,儘管您必須編寫邏輯程式碼。我假設您想要期限 DV01(給定期限的市場利率變動 1 個基點的市場價值變化)而不是 PV01(現值 1 個基點)。

另外,請記住 Luigi 在您提到的其中一篇文章中關於曲線中點之間插值的警告。

import QuantLib as ql
import matplotlib.pyplot as plt

today = ql.Date().todaysDate()
ql.Settings.instance().evaluationDate = today
yts = ql.YieldTermStructureHandle(
   ql.FlatForward(today, 0.01, ql.Actual365Fixed())
)

tenors = (1,2,3,4,5,6,7)
quotes = [ql.SimpleQuote(0.00) for n in tenors]
spreads = [ql.QuoteHandle(quote) for quote in quotes]
dates = [today + ql.Period(y, ql.Years) for y in tenors]

spreadedYts = ql.YieldTermStructureHandle(
   ql.SpreadedLinearZeroInterpolatedTermStructure(yts, spreads, dates)
)
engine = ql.DiscountingBondEngine(spreadedYts)

bond = ql.FixedRateBond(2, ql.TARGET(), 1e6, today, today + ql.Period(5, ql.Years), ql.Period('1Y'), [0.01], ql.ActualActual())
bond.setPricingEngine(engine)

npv = bond.NPV()
key_risk = []
for quote in quotes:
   quote.setValue(0.0001)
   key_risk.append( npv - bond.NPV() )
   quote.setValue(0.0)

plt.bar(tenors, key_risk)

這將輸出:

在此處輸入圖像描述

您可能還想將其計算為升檔和降檔的市場價值變化的平均值

引用自:https://quant.stackexchange.com/questions/47491