-3

我正在创建加拿大固定利率债券对象,并注意到对于具有短期首息的债券,如果使用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)]
4

1 回答 1

1

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

  • 建立bond1与 act/365 Canadian day count 的债券,提取其票券并保留第一个,如first = bond1.cashflows()[0];

  • 建立bond2具有行为/行为天数的债券,提取其息票并丢弃第一个和赎回,如rest = bond2.cashflows()[1:-1]

  • 将优惠券放在一起并将最终债券构建为通用Bond类的实例,如下所示:

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

    (赎回将由 Bond 构造函数重新添加)。

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

于 2020-07-15T08:05:37.887 回答