程式

關於 QuantLib 時間表以獲得債券息票支付日期的問題 - python

  • October 11, 2021

抱歉,原始問題已由專家回答,但不知何故我無法編輯原始問題並添加評論。所以再次發布一些後續問題:我有一些債券需要獲得息票支付日期,範例如下:發行日期為 2020-03-026,到期日期為 2020-09-30,以及該債券按季度支付息票。第一張優惠券日期是 2020-06-30,所以前面有一個長存根。

下面的程式碼給了我

[日期(26,3,2020),日期(30,6,2020),日期(30,9,2020),日期(30,12,2020)日期(30,3,2021),日期(30, 6,2021), 日期(30,9,2021), 日期(30,12,2021),日期(30,3,2022) , 日期(30,6,2022), 日期(30,9,2022)]

但是我希望將 3 突出顯示為第 31 位而不是第 30 位。2021 年 12 月 31 日是美國假期,因此在使用修改後的以下內容時應保持為 12 月 30 日。關於如何解決這個問題的任何建議?endOfMonth 不能在此處使用,因為發布日期 3 月 26 日不是月末。

schedule = ql.Schedule(
ql.Date('26-03-2020', '%d-%m-%Y'),
ql.Date('30-09-2022', '%d-%m-%Y'),
ql.Period("3m"),
ql.UnitedStates(),
ql.ModifiedFollowing,
ql.ModifiedFollowing,
ql.DateGeneration.Forward,
False,
ql.Date('30-06-2020', '%d-%m-%Y'))

將月底設置為False,計劃甚至不會嘗試打到 31 日;它從 30 日的存根開始,因此它使用該月的 30 日作為所有其他日期。

True不幸的是,正如您所說,在這種情況下您不能將月底設置為;因此,您可能必須使用Schedule帶有明確日期列表的建構子(您可以通過在 3 月 31 日開始模擬計劃並刪除 6 月存根來生成它們)。在 Python 中,建構子還可以採用許多其他參數:這將使債券和其他工具能夠正確使用時間表。你可以在這裡看到完整的簽名。

這些日期不包括在 QuantLib 的美國日曆中作為美國假期。它們被視為工作日。

import QuantLib as ql
print(ql.UnitedStates().isBusinessDay(ql.Date(31, 12, 2020)))
print(ql.UnitedStates().isBusinessDay(ql.Date(30, 3, 2021)))
print(ql.UnitedStates().isBusinessDay(ql.Date(30, 3, 2022)))

以上行檢查2020年12月31日、2021年3月30日、2022年3月30日是否為工作日,返回值為:

真的

真的

真的

引用自:https://quant.stackexchange.com/questions/60359