使用QuantLib的首张息票较短的加拿大债券的现金流错误

2024-06-26 14:18:56 发布

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

我正在创建加拿大固定利率债券对象,并注意到对于首张息票较短的债券,如果使用ActualActual(ActualActual.Bond)日计数器,则首张现金流是错误的,但对于其余的债券,则正确。这是因为对于短存根,加拿大债券使用Actual365Fixed(Actual365Fixed.Canadian)日计数器计算应计金额。问题是,加拿大债券只在短期息票期内使用这种方法。因此,使用Actual365Fixed(Actual365Fixed.Canadian)日计数器的剩余现金流将是不正确的

是否有一个我不知道的日计数器来解释这一点?这是一种半年期债券,发行日期为2020年4月3日,到期日为2025年9月1日

CashFlows with ActualActual(ActualActual.Bond) day counter: \
[(Date(1,9,2020), 0.20516304347826253),
 (Date(1,3,2021), 0.24999999999999467),
 (Date(1,9,2021), 0.24999999999999467),
 (Date(1,3,2022), 0.24999999999999467),
 (Date(1,9,2022), 0.24999999999999467),
 (Date(1,3,2023), 0.24999999999999467),
 (Date(1,9,2023), 0.24999999999999467),
 (Date(1,3,2024), 0.24999999999999467),
 (Date(1,9,2024), 0.24999999999999467),
 (Date(1,3,2025), 0.24999999999999467),
 (Date(1,9,2025), 0.24999999999999467),
 (Date(1,9,2025), 100.0)]

Cashflows with Actual365Fixed(Actual365Fixed.Canadian) day counter:\
[(Date(1,9,2020), 0.20684931506849136),
 (Date(1,3,2021), 0.24794520547946064),
 (Date(1,9,2021), 0.24999999999999467),
 (Date(1,3,2022), 0.24794520547946064),
 (Date(1,9,2022), 0.24999999999999467),
 (Date(1,3,2023), 0.24794520547946064),
 (Date(1,9,2023), 0.24999999999999467),
 (Date(1,3,2024), 0.24999999999999467),
 (Date(1,9,2024), 0.24999999999999467),
 (Date(1,3,2025), 0.24794520547946064),
 (Date(1,9,2025), 0.24999999999999467),
 (Date(1,9,2025), 100.0)]

Actual cashflows of a Canadian Fixed bond with a short first stub:\
[(Date(1,9,2020), 0.20684931506849136),
 (Date(1,3,2021), 0.24999999999999467),
 (Date(1,9,2021), 0.24999999999999467),
 (Date(1,3,2022), 0.24999999999999467),
 (Date(1,9,2022), 0.24999999999999467),
 (Date(1,3,2023), 0.24999999999999467),
 (Date(1,9,2023), 0.24999999999999467),
 (Date(1,3,2024), 0.24999999999999467),
 (Date(1,9,2024), 0.24999999999999467),
 (Date(1,3,2025), 0.24999999999999467),
 (Date(1,9,2025), 0.24999999999999467),
 (Date(1,9,2025), 100.0)]

Tags: 对象date错误withcounter计数器day利率
1条回答
网友
1楼 · 发布于 2024-06-26 14:18:56

没有一个单日计数器可以做到这一点,但是你可以通过一点工作来建立一个正确的关系。您需要做的是:

  • 使用act/365 Canadian day count建立债券{},提取其息票并保留第一张,如{}

  • 建立具有act/act日计数的债券{},提取其息票并丢弃第一个和赎回,如{}

  • 将息票放在一起,并将最终债券构建为泛型Bond类的实例,如所示:

    bond = ql.Bond(settlement_days, calendar, issue_date, [first]+rest)
    

    (债券建造商将重新添加赎回)

当然,如果您发现自己经常这样做,您可以编写一个函数来实现这一点。(或者,如果您对更改底层C++库感到满意,您可以创建特定的绑定子类并将其导出到Python)。

相关问题 更多 >