QuantLib和Python中分期偿还浮动利率债券的信用损失定价

2024-05-23 17:40:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我是QuantLib的新手,我正在尝试为信用敏感的分期偿还浮动利率债券定价。债券的最终付款可能低于票面金额。

如果我为非摊销浮动利率债券定价,我可以使用类floatingradebond和参数redemption=x来模拟最终付款。当我尝试将该参数用于分期付款floatingradebond时,它似乎不可用。我不知道这是否是在这种情况下使用的合适类别(即,本金支付任意时间的浮动利率债券和可能的无面值赎回)

这是一个代码样本,适用于PAR赎回,我基于QualLIB食谱,有什么建议用于非平价赎回?

from QuantLib import *
today = Date(1, October, 2020)
Settings.instance().evaluationDate = today
forecast_curve = RelinkableYieldTermStructureHandle()
discount_curve = RelinkableYieldTermStructureHandle()
index = USDLibor(Period('3M'), forecast_curve)
issueDate = Date(13, October, 2020)
maturityDate = Date(13, October, 2022)
schedule = Schedule(issueDate, maturityDate, Period(Quarterly), UnitedStates(), Following, Following, DateGeneration.Backward, False)
bond = AmortizingFloatingRateBond(settlementDays=3, 
                                  notional=[100,90,80], 
                                  schedule=schedule, 
                                  index=index, 
                                  accrualDayCounter=Actual360(),
                                  spreads=[0.0])
bond.setPricingEngine(DiscountingBondEngine(discount_curve))
forecast_curve.linkTo(FlatForward(0, UnitedStates(), 0.002, Actual360()))
DM = SimpleQuote(0.0)
discount_curve.linkTo(ZeroSpreadedTermStructure(forecast_curve, QuoteHandle(DM)))

print('price',bond.cleanPrice(),'\n')

for i, cf in enumerate(bond.cashflows()):
    print((i + 1), cf.date(), cf.amount())

Tags: 参数dateindexdiscountcfschedule定价curve