目录
如果未做特别说明,文中的程序都是 python3 代码。
QuantLib 金融计算——收益率曲线之构建曲线(3)
载入 QuantLib 和其他包:
import QuantLib as ql
import seaborn as sb
import numpy as np
import pandas as pd
print(ql.__version__)
1.15
概述
本文展示利用 quantlib-python 根据样本券的交易数据估算出即期利率的期限结构的完整流程,并指出当前实现所存在的问题。
示例所用的样本券交易数据来自专门进行期限结构分析的 R 包——termstrc。具体来说是数据集 govbonds
中的 GERMANY
部分,包含 2008-01-30 这一天德国市场上 52 只固息债的成交数据。
注意:为了适配 QuantLib,实际计算中删除了两只债券的数据,以保证所有样本券的到期时间均不相同。样本券数据在附录中列出。
估算期限结构的步骤
QuantLib 中估算期限结构的核心流程有两步:
- 配置
*Helper
对象,描述样本券信息,包括付息时间表(schedule)、价格(默认用净价)、票息等; - 配置期限结构模型,可以额外提供样本券权重、优化方法、参数正则化条件等参数辅助计算。
读取样本券数据
govBond = pd.read_csv(
'GERMANY_INFO.csv',
parse_dates=['MATURITYDATE', 'ISSUEDATE'])
numberOfBonds = govBond.shape[0]
PRICE = [
ql.QuoteHandle(ql.SimpleQuote(p)) for p in govBond['PRICE']]
MATURITYDATE = [
ql.Date(m.day, m.month, m.year) for m in govBond['MATURITYDATE']]
ISSUEDATE = [
ql.Date(i.day, i.month, i.year) for i in govBond['ISSUEDATE']]
COUPONRATE = govBond['COUPONRATE'].values
一些基本配置
# 查看 govbonds 数据集可知样本券均为每年付息一次
frequency = ql.Annual
# termstrc 的日期计算并不如 QuantLib 精细,
# 为了和 termstrc 的算法保持一致,示例使用如下天数计算规则
dc = ql.Actual365Fixed(ql.Actual365Fixed.Standard)
paymentConv = ql.Unadjusted
terminationDateConvention = ql.Unadjusted
conventi