利率
Tenor 的 Quantlib 債券 PV01
建立了一個固定利率債券對象,看看這里和這裡,有沒有辦法通過即期曲線的桶/期限來檢索重新定價債券的 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)
這將輸出:
您可能還想將其計算為升檔和降檔的市場價值變化的平均值