QuantLib学习笔记——InterestRate的应用

简介: QuantLib学习笔记——InterestRate的应用

⭐️ 单利还是复利

巴菲特老爷子有句名言:“人生就像滚雪球,重要的是发现很湿的雪和很长的坡。” 很湿的雪,指的就是复利。很长的坡,指的就是时间。很湿的雪和很长的坡组合起来,就能滚成巨大的雪球。

哈哈,复利是多么让人愉快啊!!!连爱因斯坦都称它为世界第八大奇迹。

这里引出一个概念:计息方式,

大家知道,计息方式有两种,单利和复利,两者的主要区别在于利息是否参与计息,在单利中,每次产生的利息不会和本金放在一起参与计息,而复利则相反。👇

单利:是指按照固定的本金计算利息

复利:是指第一期产生利息后,第二次的本金包括之前的本金和上次产生的利息,以此为本金计算利息,后面的计息周期以此类推(复利又叫利滚利)。

假如你有一项投资,你希望它是单利的,还是复利的?

⭐️ 因子

为说明因子的概念,这里需要引入一些公式,很简单的公式,我们以复利为例。

设P代表终值,r代表利率,U代表本金或初值,n代表计息期数,比如1年,1个月等等。

按照复利的定义,我没有

n可以取整数,也可以取小数,比如以年为计息周期,则n取0.5代表半年。

这里出现了复利因子和折扣因子,我们可以看出,

当前价值一块钱的资产,在计息结束后的价值就等于复利因子。

计息结束后价值一块钱的资产,其当前价值就等于折扣因子。

复利因子和折扣因子是互为倒数的关系。

单利的情况依次类推。

⭐️ QuantLib的利率类

该类用于实例化一个利率(而非利率期限结构)并提供了一些利率相关的计算

ql.InterestRate(rate, dayCount, compounding, frequency)

参数说明如下

参数 说明
rate 利率的值
dayCounter 计日器,它可以按照某种约定判断某日是否参与计息并计算计息天数
compounding 是单利还是复利计息
frequency 计息频率,是半年一次还是一年一次,等等

它有一些重要的成员方法,如下所示

参数 说明
rate() 返回利率的值
dayCounter() 返回计日器对象
discountFactor(d1, d2) 计算从日期d1到日期d2这段时间的折扣因子,d1小于d2
compoundFactor(d1, d2) 计算从日期d1到日期d2这段时间的复利因子或单利因子,d1小于d2
impliedRate(compound, resultDC, comp, freq, d1, d2) 在给定某段时间内的复利因子的情况下,返回一个利率,这个利率就是隐含利率
equivalentRate(resultDC, comp, freq, d1, d2) 返回一个等效利率

这里特别说明一下 equivalentRate 这个方法,它产生一个和当前利率等效的利率

何为等效?在这里,等效就是经过一段时间的计息,产生了相同的利息。等效利率和原利率可以有不同的日期计数规则,计息方式和计息频率等。

⭐️ 代码

本文代码调用了一些利率类的方法

import QuantLib as ql
if __name__ == "__main__": 
    # 当前利率的值
    r = 0.05
    # 输出按公式计算的因子
    print("python计算的两年期复利因子: ", (1+r)**2)
    print("python计算的两年期折扣因子: ", 1/(1+r)**2)   
    # 开始计息日
    d1 = ql.Date(15,6,2020)
    # 结束计息日
    d2 = ql.Date(15,6,2022)
    # 利率对象
    rate = ql.InterestRate(r, ql.Actual360(), ql.Compounded, ql.Annual)
    # 利率值
    print("利率值: ", rate.rate())
    # 日期计数器
    print("日期计数器: ", rate.dayCounter())
    # 2年以后,即2年期折扣因子
    print("2年期折扣因子: ", rate.discountFactor(2))
    # 从d1到d2的折扣因子
    print("从d1到d2的折扣因子: ", rate.discountFactor(d1, d2))
    # 从d1到d2的复利因子
    print("从d1到d2的复利因子: ", rate.compoundFactor(d1, d2))
    # 等效利率
    print("等效利率: ", rate.equivalentRate(ql.Actual360(), ql.Compounded, ql.Semiannual, d1, d2))
    # 隐含利率
    factor = rate.compoundFactor(d1, d2)
    print("隐含利率: ", rate.impliedRate(factor, ql.Actual360(), ql.Continuous, ql.Annual, d1, d2))

代码执行结果如下

python计算的两年期复利因子:  1.1025
python计算的两年期折扣因子:  0.9070294784580498
利率值:  0.05
日期计数器:  Actual/360 day counter
2年期折扣因子:  0.9070294784580498
从d1到d2的折扣因子:  0.9058010300610555
从d1到d2的复利因子:  1.103995211765872
等效利率:  4.939015 % Actual/360 Semiannual compounding
隐含利率:  4.879016 % Actual/360 continuous compounding

笔者水平有限,若有不对的地方欢迎评论指正!

相关文章
|
9月前
|
消息中间件 存储 NoSQL
|
消息中间件 Dubbo 算法
总结|学习笔记
快速学习总结
72 0
总结|学习笔记
|
分布式计算 前端开发 Java
RegexpQuery|学习笔记
快速学习 RegexpQuery。
203 0
RegexpQuery|学习笔记
|
C++ 开发者 Python
练习2|学习笔记
快速学习练习2
74 0
练习2|学习笔记
|
SQL 分布式计算 资源调度
StreamSQL|学习笔记
快速学习 StreamSQL
555 0
StreamSQL|学习笔记
|
开发者 Python
练习|学习笔记
快速学习练习
82 0
|
架构师 开发者
高压线|学习笔记
快速学习高压线。
75 0
|
存储 编译器 Linux
|
Java 开发者
接口标准|学习笔记
快速学习接口标准
接口标准|学习笔记