目录

  • 天数计算规则详解

    • 定义
    • 30 / 360 法
      • 30/360 US
      • 30/360 Bond Basis
      • 30E/360
      • 30E/360 ISDA
    • Actual 法
      • Actual/Actual ICMA
      • Actual/Actual ISDA
      • Actual/365 Fixed
      • Actual/360
      • Actual/364
      • Actual/365L
      • Actual/Actual AFB
      • 1/1

如果未做特别说明,文中的程序都是 Python3 代码。

天数计算规则详解

载入 QuantLib:

import QuantLib as qlprint(ql.__version__)
1.12

定义

  • Interest:一项投资产生的利息。
  • CouponFactor:在付息日支付票息时所需的折算因子,付息周期可以是完整或不完整的。
  • CouponRate:票息率。
  • Date1 (Y1.M1.D1):前一付息日。
  • Date2 (Y2.M2.D2):结算日。
  • Date3 (Y3.M3.D3):后一付息日。
  • Days(StartDate, EndDate):StartDate 和 EndDate 所差的天数(按照儒略历的规则计算)。
  • EOM:EOM 表示只在“月末”付息;非 EOM 表示在每月的同一天付息。
  • Factor:在计算利息时 CouponRate 的折算因子。通常表示为“应计期间的天数 / 所在年份的天数”,如果 Date2 是付息日,Factor 是零。
  • Freq:付息频率
    • 1 = 年付(annual)
    • 2 = 半年付(semi-annual)
    • 4 = 季付(quarterly)
    • 12 = 月付(monthly)
    • 以此类推
  • Principal:本金

利息的计算:

\[ Interest = Principal \times CouponRate \times Factor \]

30 / 360 法

Factor 等于:

\[ Factor = \frac{360 \times (Y_2- Y_1) + 30 \times (M_2 - M_1) + (D_2 - D_1)}{360} \]

CouponFactor 等于:

\[ CouponFactor = \frac{360 \times (Y_3 - Y_1) + 30 \times (M_3 - M_1) + (D_3 - D_1)}{360} \]

这和 Factor 的计算相同,不过要把 Date2 换成 Date3。在这种情形下,如果碰到一个完整的付息周期,那么:

\[ CouponFactor = \frac{1}{Freq} \]

将 Date1 和(或)Date2 调整至月末的习惯各不相同,进而形成了不同的约定,每一种约定都有一套调整方法。

规定一个月有 30 天,一年有 360 天极大的简化了日期计算。同时 360 是一个高度可分的数,半年度、季度和月度的付息频率分别对应 360 天中的 180、90 和 30,这意味着不同付息周期上的付息数量是一样的。

30/360 US

日期调整规则,注意,要严格按照下面的计算顺序:

  • 如果投资是 EOM 的,并且 Date1 是二月的最后一天,并且 Date2 是二月的最后一天,那么 D2 改为 30。
  • 如果投资是 EOM 的,并且 Date1 是二月的最后一天,那么 D1 改为 30。
  • 如果 D2 等于 31 并且 D1 等于 30 或 31,那么 D2 改为 30。
  • 如果 D1 等于 31,那么 D1 改为 30。

别名:

  • 30U/360
  • 30/360

QuantLib 实现:

  • ql.Thirty360(ql.Thirty360.USA)

30/360 Bond Basis

除了前两条外,该方法和 30U/360 一样。注意,要严格按照下面的计算顺序:

  • D1 = MIN (D1, 30).
  • If D1 = 30 Then D2 = MIN (D2,30)

别名:

  • 30A/360

QuantLib 实现:

  • ql.Thirty360(ql.Thirty360.BondBasis)

30E/360

日期调整规则:

  • 如果 D1 等于 31,那么 D1 改为 30。
  • 如果 D2 等于 31,那么 D2 改为 30。

别名:

  • 30/360 ICMA
  • 30S/360
  • Eurobond basis (ISDA 2006)
  • Special German

QuantLib 实现:

  • ql.Thirty360(ql.Thirty360.European)

30E/360 ISDA

日期调整规则:

  • 如果 D1 月末最后一天,那么 D1 改为 30。
  • 如果 D2 月末最后一天(除非 Date2 是到期日并且 M2 是二月),那么 D2 改为 30。

别名:

  • 30E/360 ISDA
  • Eurobond basis (ISDA 2000)
  • German

QuantLib 实现:

  • ql.Thirty360(ql.Thirty360.EurobondBasis)

Actual 法

该方法计算两个日期间的真实距离(遵循儒略历),也就是函数 Days(StartDate, EndDate)。该方法对一个具体的付息周期赋予 CouponRate 不同的折算因子。

Actual/Actual ICMA

公式:

\[ Factor = \frac{Days(Date1,Date2)}{Freq \times Days(Date1,Date3)} \]

对于完整的付息周期,Date2 等于 Date3:

\[ Factor = \frac{Days(Date1,Date3)}{Freq \times Days(Date1,Date3)} = \frac{1}{Freq} \]

对于不完整的付息周期,付息周期要被分解为一个或几个“拟付息周期”以便对应上付息日的频率。利息在每一个子周期上计算,再根据拟付息周期的个数相加得到总的利息。

该方法确保每次所支付的利息是同等的。

该方法同时确保一个付息周期里每一天都被同等赋值。然而付息周期可能有不同的长度,例如某年 365 天,按照半年一次的频率付息,那么一个付息周期是 182 天,另一个是 183 天。在这种情况下,第一个周期里每天被赋予 1/182 份的利息;另一个被赋予 1/183 份的利息。

别名:

  • Actual/Actual
  • Act/Act ICMA
  • ISMA-99
  • Act/Act ISMA

QuantLib 实现:

  • ql.ActualActual(ql.ActualActual.ISMA)

Actual/Actual ISDA

公式:

\[ Factor = \frac{\textit{Days not in leap year}}{365} + \frac{\textit{Days in leap year}}{366} \]

天数计算的规则遵循儒略历的法则,第一天计入付息周期,最后一天不计入。

CouponFactor 的计算使用相同的公式,不过要把 Date2 换成 Date3。通常,不同付息周期内支付的利息是不等量的,这取决于闰年和非闰年上分配的天数。公式可以应用到完整和不完整的付息周期上。

别名:

  • Actual/Actual
  • Act/Act
  • Actual/365
  • Act/365

QuantLib 实现:

  • ql.ActualActual(ql.ActualActual.ISDA)

Actual/365 Fixed

公式:

\[ Factor = \frac{Days(Date1,Date2)}{365} \]

每个月都不作特殊对待,并且假定一年只有 365 天。例如,一个周期始于 2005-02-01,结束于 2005-04-01,那么 Factor 等于 59 天 除以 365 天。

CouponFactor 使用相同的公式,不过要把 Date2 换成 Date3。通常,不同付息周期内支付的利息是不等量的,这取决于作为分子的天数。公式可以应用到完整和不完整的付息周期上。

别名:

  • Act/365 Fixed
  • A/365 Fixed
  • A/365F
  • English

QuantLib 实现:

  • ql.Actual365Fixed(ql.Actual365Fixed.Standard)

Actual/360

公式:

\[ Factor = \frac{Days(Date1,Date2)}{360} \]

该方法用于货币市场上的短期借贷。每个月都不作特殊对待,并且假定一年只有 360 天。例如,一个周期始于 2005-02-01,结束于 2005-04-01,那么 Factor 等于 59 天 除以 360 天。

CouponFactor 使用相同的公式,不过要把 Date2 换成 Date3。通常,不同付息周期内支付的利息是不等量的,这取决于作为分子的天数。公式可以应用到完整和不完整的付息周期上。

别名:

  • Act/360
  • A/360
  • French

QuantLib 实现:

  • ql.Actual360()

Actual/364

公式:

\[ Factor = \frac{Days(Date1,Date2)}{364} \]

每个月都不作特殊对待,并且假定一年只有 364 天。例如,一个周期始于 2005-02-01,结束于 2005-04-01,那么 Factor 等于 59 天 除以 364 天。

CouponFactor 使用相同的公式,不过要把 Date2 换成 Date3。通常,不同付息周期内支付的利息是不等量的,这取决于作为分子的天数。公式可以应用到完整和不完整的付息周期上。

QuantLib 实现:

  • 没有实现

Actual/365L

这里,L 表示闰年。

公式:

\[ Factor = \frac{Days(Date1,Date2)}{DiY} \]

确定 \(DiY\) 的规则:

  • 如果 Freq 等于 1(年付):

    • 如果 2 月 29 日在 Date1(排除在区间外)和 Date2(包含在区间内)之间,那么 \(DiY = 366\),否则 \(DiY = 365\)。
  • 如果 Freq 不等于 1:
    • 如果 Date2 落在闰年,那么 \(DiY = 366\),否则 \(DiY = 365\)。

CouponFactor 使用相同的公式,不过要把 Date2 换成 Date3。通常,不同付息周期内支付的利息是不等量的,这取决于作为分子的天数。公式可以应用到完整和不完整的付息周期上。

别名:

  • ISMA-Year

QuantLib 实现:

  • 没有实现

Actual/Actual AFB

公式:

\[ Factor = \frac{Days(Date1,Date2)}{DiY} \]

\(DiY\) 的确定:

如果 2 月 29 日在 Date1(排除在区间外)和 Date2(包含在区间内)之间,那么 \(DiY = 366\),否则 \(DiY = 365\)。

如果 Date1 到 Date2 超过一年,计算将分成两部分:

  • 计算经历的整年的个数,从周期的最后一天向前计算;
  • 剩下的部分按照前述的规则计算。

例如,一个周期始于 1994-02-10 至 1997-06-30,分解如下:

  • 1994-06-30 到 1997-06-30 经历了 3 年;
  • 1994-02-10 到 1994-06-30 对应 140/365。

最终结果是 3 + 140/365.

该方法并没有规定向前推算年数的方法。ISDA 的推算法要求:如果周期最后一天是 2 月 28 日,完整的一年要截止到前一个 2 月 28 日,除非 2 月 29 日存在,如果存在 2 月 29 日也要计入在内。下面的表格举例显示了 ISDA 的推算法和一般推算习惯的异同:

周期 ISDA 推算法 一般推算习惯
2004-02-28 至 2008-02-27 3 + 365 / 366 3 + 365 / 366
2004-02-28 至 2008-02-28 4 + 1 / 366 4
2004-02-28 至 2008-02-29 4 + 1 / 366 4 + 1 / 366

QuantLib 实现:

  • ql.ActualActual(ql.ActualActual.AFB)

1/1

该方法用于通胀挂钩产品,以 4 年为一个周期,将额外的一天平均分配到 4 年上,即每年 365.25 天。

QuantLib 实现:

  • ql.OneDayCounter()

转载于:https://www.cnblogs.com/xuruilong100/p/8995217.html

QuantLib 金融计算——基本组件之天数计算规则详解相关推荐

  1. 请假时长计算和每月工作天数计算

    绪论 请假时长计算和每月工作天数计算其实六月份开发OA系统时就已经写出来了,只是一直没时间去整理,其实最近也很忙,毕竟年底要清一些开发任务.不过感觉自己今年博客写的太少了,所以这些日子基本每天都在加班 ...

  2. Python计算向量夹角:向量夹角计算方法详解

    Python计算向量夹角:向量夹角计算方法详解 在数值分析和几何学中,我们经常需要计算两个向量之间的夹角.在Python中,我们可以使用numpy库中的函数来计算向量之间的夹角. 首先,我们需要将向量 ...

  3. vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解

    前言 在vue项目中组件之间的通讯是很常见的问题,同时也是很重要的问题,我们大致可以将其分为三种情况: 父传子:在父组件中绑定值,在子组件中用props接收 子传父:在父组件中监听一个事件,在子组件中 ...

  4. php事件和行为,Yii框架组件和事件行为管理详解

    Yii框架组件和事件行为管理详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Yii框架组件和事件行为管理详解.txt ] (友情提示:右键点上行txt文档名- ...

  5. mvc jquery ajax分页实例,jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页...

    jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页 简单的两个步骤即可实现分页功能 //回调里面进行业务处理 function lo ...

  6. 【iVX 开发 - 入门】UI 组件介绍及实操详解

    本文导读 写在前面 iVX 各 UI 组件及属性面板详解 1. 图片组件 2. 图片序列组件 3. 文本组件 4. 输入框组件 5. 富文本/富文本编辑器组件 6. 地图组件 7. 二维码组件 写在前 ...

  7. 北大燕博南:下一代AI芯片— 存内计算的硬核与软着陆 | 报告详解

    [专栏:前沿进展]近年来,随着深度学习算法的广泛应用,人工智能方兴未艾,AI相关技术的应用也越来越丰富.伴随着AI发展一起到来的,则是对硬件性能要求的不断提升.时至今日,传统的CPU,甚至GPU已不能 ...

  8. 跳出数据计算拯救人工智能之打败机器学习方法详解二

    上回分析的够透彻了吧 计算方面就使用填字数据结构计算 存储方面使用数据库表的方式存储 为了方便就都使用 填字的方式进行试验 首先要知道采取上回说到的65535个二进制位进行代表人类的文字信息的话 那么 ...

  9. 跳出数据计算拯救人工智能之打败机器学习方法详解

    首先人脑智能分为三种 一是逻辑 二是创造 三是建立关系存储 关系存储 就是建立每个最小信息与已经存起来的信息之间的关系 也就是说新的信息是靠已经存储的信息记录下来的 就像人类通过语言的描述记录环境 这 ...

最新文章

  1. 日常运维管理技巧十六(iftop网卡流量监控工具)(转载)
  2. 接口,抽象类与内部类
  3. jstl c:choose、c:when和c:otherwise标签的简单使用介绍
  4. opencomm在c语言中的作用,使用OpenMPI从Fortran调用C语言
  5. C程序设计语言现代方法13:字符串
  6. c++ ANSI、UNICODE、UTF8互转
  7. Ubuntu 安装fish
  8. 存活1.5.0.4 游戏
  9. Vue2.0+Vue3.0全套教程
  10. Android 热修复技术
  11. QingYan相机隐私政策
  12. CF896C Willem, Chtholly and Seniorious(珂朵莉树)
  13. 前端HTML CSS JavaScipt JQuery
  14. 【WEB】语言代码缩写表大全(用于Accept-Language)
  15. 如何在 iPhone 上设置整点报时提醒?
  16. 移动100m宽带慢的要死_wifi慢到快崩溃明明100m宽带却像2m的网速教你1招快速解决...
  17. 兼容ie浏览器代码处理
  18. android支付安全机制,Android_指纹支付_安全问题_前后端交互逻辑
  19. 洛谷:P5707 【深基2.例12】上学迟到
  20. Word 参考文献管理 - 交叉引用 + 批量修改上标

热门文章

  1. ESP32 之 ESP-IDF 教学(五(2))——使用C++的工程
  2. 论文研读-机器学习可视化-神经网络损失函数吸引域可视化
  3. E104-BT01超低功耗蓝牙模块BLE4.0协议的片载系统解决方案
  4. LiveNVR传统IP摄像机接入-网页直播实现跨域鉴权
  5. [日推荐]『TheGolfGame』一个高端大气上档次的小程序
  6. elementUI表格动态渲染错乱
  7. Clipper库中文帮助文档
  8. 编译运行Clipper报错以及解决
  9. 龙人直线电话计费系统
  10. javaSE进阶学习笔记