QuantLib:构建关键利率风险

时间:2017-09-18 12:53:08

标签: python-3.x quantlib

我能够为财资市场建立折扣曲线。但是,我希望用这个来找出个别债券(最终是债券组合)的关键利率风险。

我正在寻找的关键利率风险是,如果我有一个30Y债券,我们改变用于贴现债券的1y利率,同时保持其他利率不变,债券价格变化多少?对于期限(例如,2Y,5Y,7Y等)重复这一点并对结果求和可以使您了解债券的总持续时间,但可以更好地了解风险暴露如何破裂。

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

是否有人知道任何演示如何执行此操作的文档?谢谢。

1 个答案:

答案 0 :(得分:3)

鉴于您已经建立了债券和折扣曲线,并且您已经以某种方式将它们链接起来,类似于:

discount_handle = RelinkableYieldTermStructureHandle(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(
    YieldTermStructureHandle(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个bps。为了缓解这种情况(如果不是您想要的),您可以向曲线添加更多点并限制变化的范围。例如,如果你在5年减去一个月时增加一个点,在5年加上1个月增加另一个点,那么移动5年点只会影响它周围的两个月。