QuantLib 金融計算——一個使用 ActualActual 時需要注意的陷阱


QuantLib 金融計算——一個使用 ActualActual 時需要注意的陷阱

ActualActual 是分析債券時最常用的 day counter(天數計算規則),根據 StackExchange 上的討論(https://quant.stackexchange.com/questions/12707/pricing-a-fixedratebond-in-quantlib-yield-vs-termstructure),在使用 ActualActual 時最好附加上債券現金流支付的日期表(Schedule 對象),否則在計算貼現因子的時候可能產生偏差。

然而,這種操作隱藏了一個陷阱,下面用一個案例來解釋。

import QuantLib as ql

print(ql.__version__)

today = ql.Date(10, ql.November, 2020)
ql.Settings.instance().evaluationDate = today

effectiveDate = ql.Date(21, ql.May, 2019)
terminationDate = ql.Date(21, ql.May, 2029)
tenor = ql.Period(1, ql.Years)
calendar = ql.China(ql.China.IB)
convention = ql.Unadjusted
terminationDateConvention = convention
rule = ql.DateGeneration.Backward
endOfMonth = False

schedule = ql.Schedule(
    effectiveDate,
    terminationDate,
    tenor,
    calendar,
    convention,
    terminationDateConvention,
    rule,
    endOfMonth)

scheduleEx = ql.Schedule(
    effectiveDate,
    ql.Date(21, ql.May, 2031),
    tenor,
    calendar,
    convention,
    terminationDateConvention,
    rule,
    endOfMonth)

dayCounter = ql.ActualActual(
    ql.ActualActual.Bond, schedule)

print('results 1:')
print(dayCounter.yearFraction(today, today + ql.Period(8, ql.Years)))
print(dayCounter.yearFraction(today, today + ql.Period(9, ql.Years)))
print(dayCounter.yearFraction(today, today + ql.Period(10, ql.Years)))

dayCounterEx = ql.ActualActual(
    ql.ActualActual.Bond, scheduleEx)

print('results 2:')
print(dayCounterEx.yearFraction(today, today + ql.Period(8, ql.Years)))
print(dayCounterEx.yearFraction(today, today + ql.Period(9, ql.Years)))
print(dayCounterEx.yearFraction(today, today + ql.Period(10, ql.Years)))

'''
1.20
results 1:
8.0
8.526027397260274
8.526027397260274
results 2:
8.0
9.0
10.0
'''

如果計算涉及到的日期超過了日期表的范圍,即 Schedule 前兩個參數確定的范圍,日期計算可能產生與預期不一致的錯誤。

一個簡便有效的解決方法是為債券對象和 ActualActual 分別提供各自的 Schedule 對象,ActualActualSchedule 對象范圍更大一點,以便包括所有可能涉及的日期,就像案例中的做法一樣。

擴展閱讀

《QuantLib 金融計算》系列合集


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM