關於 QuantLib 時間表以獲得債券息票支付日期的問題 - python
抱歉,原始問題已由專家回答,但不知何故我無法編輯原始問題並添加評論。所以再次發布一些後續問題:我有一些債券需要獲得息票支付日期,範例如下:發行日期為 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日是否為工作日,返回值為:
真的
真的
真的