若是未作特別說明,文中的程序都是 Python3 代碼。函數
InterestRate
類圍繞收益率展開的若干計算(如計算貼現因子)是固定收益分析中最基礎的部分。同時,因爲固定收益產品在付息頻率、計息方式、天數計算規則等細節方面的多樣性,這一塊的計算顯得更加複雜繁瑣。QuantLib 將與收益率有關的計算整合封裝在 InterestRate
類,用戶所做的只是按照規定配置特定的參數。ui
載入 QuantLib:spa
import QuantLib as ql print(ql.__version__)
1.12
InterestRate
對象的構造InterestRate
對象的構造須要四個參數,rest
InterestRate(r, dc, comp, freq)
這些變量的類型和解釋以下:code
r
,浮點數,收益率大小;dc
,DayCounter
對象,配置天數計算規則;comp
,整數,配置計息方式,取值範圍是 quantlib-python 的一些預留變量;freq
,整數,配置付息頻率,取值範圍是 quantlib-python 的一些預留變量。目前 quantlib-python 支持的計息方式有:對象
Simple
,\(1 + r\tau\),單利Compounded
,\((1 + r)^\tau\),複利Continuous
,\(e^{r\tau}\),連續複利目前 quantlib-python 支持的計息方式有不少:產品
NoFrequency
,無付息;Once
,付息一次,常見於零息債券;Annual
,每一年付息一次;Semiannual
,每半年付息一次;EveryFourthMonth
,每 4 個月年付息一次;Quarterly
,每季度付息一次;Bimonthly
,每兩個月付息一次;Monthly
,每個月付息一次;EveryFourthWeek
,每 4 周付息一次;Biweekly
,每兩週付息一次;Weekly
,每週付息一次;Daily
,天天付息一次。下面是一些經常使用的成員函數:it
rate()
:浮點數,返回收益率的值;dayCounter()
:DayCounter
對象,返回控制天數計算規則的成員變量;compounding()
:整數,返回計息方式;frequency()
:整數,返回付息頻率。discountFactor(d1, d2)
:浮點數,d1
和 d2
都是 Date
型對象(d1
< d2
),返回 d1
到 d2
的貼現因子大小;compoundFactor(d1, d2)
:浮點數,d1
和 d2
都是 Date
型對象(d1
< d2
),返回 d1
到 d2
的付息因子大小;equivalentRate(resultDC, comp, freq, d1, d2)
:InterestRate
對象,返回某個與當前對象等價的 InterestRate
對象,該對象的配置參數包括 resultDC
、comp
、freq
:
d1
和 d2
都是 Date
型對象(d1
< d2
)resultDC
,DayCounter
對象,配置天數計算規則;comp
,整數,配置計息方式,取值範圍是 quantlib-python 的一些預留變量;freq
,整數,配置付息頻率,取值範圍是 quantlib-python 的一些預留變量。某些狀況下須要根據付息因子的大小逆算收益率,InterestRate
類提供了函數 impliedRate
實現這一功能:io
impliedRate(compound, resultDC, comp, freq, d1, d2)
:InterestRate
對象,返回逆算出的 InterestRate
對象,該對象的配置參數包括 resultDC
、comp
、freq
:
d1
和 d2
都是 Date
型對象(d1
< d2
)resultDC
,DayCounter
對象,配置天數計算規則;comp
,整數,配置計息方式,取值範圍是 quantlib-python 的一些預留變量;freq
,整數,配置付息頻率,取值範圍是 quantlib-python 的一些預留變量。例子1:
def InterestRate1(): dc = ql.ActualActual() myRate = ql.InterestRate( 0.0341, dc, ql.Simple, ql.Annual) print('Rate:', myRate) d1 = ql.Date(10, ql.September, 2009) d2 = d1 + ql.Period(3, ql.Months) compFact = myRate.compoundFactor(d1, d2) print('Compound Factor: ', compFact) print('Discount Factor: ', myRate.discountFactor(d1, d2)) print( 'Equivalent Rate: ', myRate.equivalentRate( dc, ql.Continuous, ql.Semiannual, d1, d2)) implRate = ql.InterestRate.impliedRate( compFact, dc, ql.Simple, ql.Annual, d1, d2) print('Implied Rate from Comp Fact : ', implRate) InterestRate1()
Rate: 3.410000 % Actual/Actual (ISDA) simple compounding Compound Factor: 1.0085016438356165 Discount Factor: 0.9915700248109837 Equivalent Rate: 3.395586 % Actual/Actual (ISDA) continuous compounding Implied Rate from Comp Fact : 3.410000 % Actual/Actual (ISDA) simple compounding