QuantLib 金融計算——基本組件之 InterestRate 類

若是未作特別說明,文中的程序都是 Python3 代碼。函數

QuantLib 金融計算——基本組件之 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,浮點數,收益率大小;
  • dcDayCounter 對象,配置天數計算規則;
  • 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):浮點數,d1d2 都是 Date 型對象(d1 < d2),返回 d1d2 的貼現因子大小;
  • compoundFactor(d1, d2):浮點數,d1d2 都是 Date 型對象(d1 < d2),返回 d1d2 的付息因子大小;
  • equivalentRate(resultDC, comp, freq, d1, d2)InterestRate 對象,返回某個與當前對象等價的 InterestRate 對象,該對象的配置參數包括 resultDCcompfreq
    • d1d2 都是 Date 型對象(d1 < d2
    • resultDCDayCounter 對象,配置天數計算規則;
    • comp,整數,配置計息方式,取值範圍是 quantlib-python 的一些預留變量;
    • freq,整數,配置付息頻率,取值範圍是 quantlib-python 的一些預留變量。

某些狀況下須要根據付息因子的大小逆算收益率,InterestRate 類提供了函數 impliedRate 實現這一功能:io

  • impliedRate(compound, resultDC, comp, freq, d1, d2)InterestRate 對象,返回逆算出的 InterestRate 對象,該對象的配置參數包括 resultDCcompfreq
    • d1d2 都是 Date 型對象(d1 < d2
    • resultDCDayCounter 對象,配置天數計算規則;
    • 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
相關文章
相關標籤/搜索