这是 Python 进阶课的第十四节 - FR007 利率掉期定价和曲线拔靴,进阶课的目录如下:
- NumPy 上
- NumPy 下
- Pandas 上
- Pandas 下
- SciPy 上
- SciPy 下
- Pandas 时间序列
- Pandas 高频数据采样
- 默顿模型计量经济资本
- LSMC 定价美式和百慕大期权
- 负油价和负利率模型
- Nelson-Siegel 构建债券收益率曲线
- 外汇交易组合保证金制定系统
之前基础版的 11 节的目录如下:
- 编程概览
- 元素型数据
- 容器型数据
- 流程控制:条件-循环-异常处理
- 函数上:低阶函数
- 函数下:高阶函数
- 类和对象:封装-继承-多态-组合
- 字符串专场:格式化和正则化
- 解析表达式:简约也简单
- 生成器和迭代器:简约不简单
- 装饰器:高端不简单
七天回购掉期 (FR007 swap) 是指交易双方以一定的名义本金为基础,将该本金产生的一种利率计算的利息收入(支出) 与另一种利率计算的利息收入(支出)。交换的只是不同特征的利息,没有实质本金的互换。
掉期有两端,固定端和浮动端,固定端的利率由一个固定利率决定,而浮动端的利率由若干个七天回购利率 (7D repo rate) 复合计算而得。七天回购掉期的日期表如下图所示。
把注意力放在浮动端第 n 期,对应的复合利率 R(Tn-1, Tn) 是由一组七天回购利率组成的。
上图只是为了展示浮动利率的复合过程,真正的细节在下图。
本次课程的知识点和代码太多,采取的方式是先展示成品,接着再从零到一来讲解如何实现,来各点击破每个环节的细节,更重要的是分享笔者处理此类问题的思路:
- 第二节会讲解数据处理,包括如何从中国外汇交易中心收集 FR007 的市场数据和定盘数据,如何从 excel 或 csv 中读取数据,如何用
cufflinks
来可视化数据。 - 第三节会介绍日期生成,FR007 掉期的产品日期表和指标日期表是如何生成的。
- 第四节会介绍变量计算,如何计算或插值折现因子和远期利率。
- 第五节会讲解曲线构建,如何从市场报价通过拔靴法得到零息曲线。
- 第六节会讲解产品定价,使用面向对象 (object-orient) 方法构建 FR007 掉期对象和定价对象(分别是 IRS 对象和定价对象的子类)。
在 Jupyter Notebook 把问题讲清楚后,为了做工程,我也把所有代码结构化:
数据处理:
代码语言:javascript复制|--- data_loader.py
| |--- load_data()
| |--- read_instrument()
| |--- read_market()
| |--- read_fixing()
日期生成:
代码语言:javascript复制|--- schedule.py
| |--- get_settle_date()
| |--- get_maturity_date_from_trade_date()
| |--- trim_date()
| |--- date_series()
| |--- IBOR_date()
| |--- CMPR_date()
| |--- IRS_schedule()
| |--- CMPIRS_schedule()
变量计算:
代码语言:javascript复制|--- market_variable.py
| |--- get_discount()
| |--- get_forward_rate()
| |--- update_fixing()
曲线构建:
代码语言:javascript复制|--- curve_construction.py
| |--- bootstrapping()
| |--- compute_npv()
| |--- process_data()
产品定价:
代码语言:javascript复制|--- IR_CMPIRS_engine.py
| |--- class IR_CMPIR( IR_InterestRateSwap )
| |--- class IR_CMPIR_pricer( IR_InterestRateSwap_pricer )
|
|--- IR_InterestRateSwap_engine.py
| |--- class IR_InterestRateSwap()
| |--- class IR_InterestRateSwap_pricer()
其他有用的函数
代码语言:javascript复制|--- utils.py 基本效用函数
|--- ql_utils.py 和 QuantLib 有关的效用函数
|--- date_utils.py 用于日期转换
|--- daycount_utils.py 用于计算年限
|--- calendar_utils.py 用于构建日历
|--- convention_utils.py 用于获取惯例
|--- formatter.py 用于美化格式
本次课程目录如下:
1. 简介
- 产品介绍
- 定价流程
2. 数据处理
- 头寸数据
- 市场数据
- 定盘数据
3. 日期生成
- 基本概念
- 日历创建
- 产品日期
- 指标日期
4. 变量计算
- 折现因子
- 远期利率
5. 曲线构建
- 基本概念
- 拔靴方法
6. 产品定价
- 普通 IRS
- FR007 掉期