计息天数规则

  比如18国债04的本金为100元,起息日为2018年2月1日,到期日为2028年2月1日,付息日为每年的2月1日和8月1日,票面利率每年3.85%,计算2019年2月1日至6月18日期间的利息。天数计算规则有三种:实际天数/实际天数,实际天数/360,实际天数/365,下面利用python的datetime模块来计算这三种规则下的利息:

import datetime as dt
def interest(t,T,t1,t2,par,c,m,rule):d1=dt.date(T[0],T[1],T[2])-dt.date(t[0],t[1],t[2])#付息间隔d2=dt.date(t2[0],t2[1],t2[2])-dt.date(t1[0],t1[1],t1[2])#要求的天数if rule=='a/a':i=(d2.days/d1.days)*par*c/melif rule=='a/360':i=(d2.days/360)*par*celse:i=(d2.days/365)*par*creturn i
t,T,t1,t2=(2019,2,1),(2019,8,1),(2019,2,1),(2019,6,18)
par,c,m=100,0.0385,2
print('三种计息方式的利息分别为{:.4f}、{:.4f}、{:.4f}'.format(interest(t,T,t1,t2,par,\
c,m,rule='a/a'),interest(t,T,t1,t2,par,c,m,rule='a/360'),interest(t,T,t1,t2,par,c,m,rule='a/365')))三种计息方式的利息分别为1.4570、1.4651、1.4451

  datetime模块常用的函数有三个:datetime.date(年,月,日)和datetime.datetime(年,月,日,时,分,秒,微秒)以及时间对象.days计算时间间隔。

国债的报价

  净价是债券的买卖价格,也是债券市场的报价,净价加上从上一个付息日以来的应计利息就是全价,我们之前现金流贴现求和计算的是全价。接上例,假定今天是2019年1月18日,该债券的YTM=3.1%,计算该国债的全价、应计利息和净价(画数轴更好理解):

import numpy as np
import pandas as pd
#先计算到期日2028.2.1至2019.2.1(不含)共18期的所有现金流折现
def bond(par,c,r,t):return sum(par*c/(1+r)**t)+par/(1+r)**len(t)
t=np.array(range(1,19))
par,c,r=100,0.0385/2,0.031/2
d=dt.date(2019,2,1)-dt.date(2018,8,1)#定价日所在的付息周期
d0=dt.date(2019,1,18)-dt.date(2018,8,1)#从上一个付息日以来的天数
#再将折现到2019.2.1的所有现金流与利息折现到2019.1.18
dirtyprice=(bond(par,c,r,t)+c*par)/(1+r)**(1-(d0.days/d.days))
AI=(d0.days/d.days)*c*par
cleanprice=dirtyprice-AI
print('该国债的全价为{:.4f}、应计利息为{:.4f}、净价为{:.4f}'.format(dirtyprice,AI,cleanprice))该国债的全价为107.6499、应计利息为1.7785、净价为105.8714

国债期货的最终价格

  国债期货的最终价格(invoice price)=国债期货的市场报价×转换因子+应计利息。转换因子是考虑到国债期货有一个比较宽泛的可交割国债标准,比如标的为5年期、票面利率为3%的国债期货可以拿剩余期限为4~5.25年的记账式附息国债来交割,因此与标的要素标准(5年、3%)不符的可交割国债需要按一定的比例折算,这个比例就是转换因子。计算方法截于中国金融期货交易所官网:

  假定分析的国债是在2019年3月8日到期、2019年3月13日作为最后交割日的10年期国债期货合约T1903,用上例的18国债04作为可交割债券,计算该债券的转换因子和应计利息。

  这里要求的主要是x和n,x是国债期货交割月到下一付息日的月份数,也就是8月1日减去3月13日,x=5;n是可交割债券在最后交割日后的剩余付息次数,为18次,代入公式即可:

def cf(r,x,n,c,f):a=1/pow(1+r/f,x*f/12)b=c/f+c/r+(1-c/r)/pow(1+r/f,n-1)d=c*(1-x*f/12)/freturn a*b-d
bondcf=cf(0.03,5,18,0.0385,2)
bondcf
Out[3]: 1.066050056827384
#x=5也可这样算:
dt.date(2019,8,1).month-dt.date(2019,3,13).month
Out[4]: 5

  下面计算应计利息。根据公式,期货第二个交割日为2019年3月12日(因为国债期货合约的最后交易日8号为礼拜五,最后交割日为最后交易日之后的第3个交易日即13号);第二个交割日所在的付息周期内,可交割国债的上一付息日为2019年2月1日,代入之前的interest函数即可:

t,T,t2,t1=(2019,2,1),(2019,8,1),(2019,3,12),(2019,2,1)
ai=interest(t,T,t1,t2,100,0.0385,2,rule='a/a')
ai
Out[5]: 0.4147790055248619

最便宜交割券(CTD)

  假设国债期货的空头方手中没有国债,这时由于可交割国债选择范围广,他可以从证券市场买入符合要求的最便宜可交割国债用于交割。买入交割国债金额 = 国债报价(净价) +应计利息;收到现金 = 期货价格 × 转换因子 + 应计利息;空头方交割成本 = 买入交割国债金额 - 收到现金 = 国债报价 - 期货价格 × 转换因子,CTD就是使得交割成本最小的债券。

  CTD的存在是因为在转换因子的计算中对不同期限的现金流使用了相同的贴现率,不符合真实的利率期限结构而产生误差。经验来说,当收益率曲线右上倾斜时,转换因子倾向于将剩余期限较长的债券作为CTD(3%偏小,CF偏大,成本偏低)。

  在2019年3月8日国债期货T1903合约的最后交易日,期货合约结算价为99.2元,假设某一空头方想从如下三支均是每年付息两次的可交割国债中选出最便宜的进行交割,应该选择哪一支?

国债简称 债券净价 票面利率 转换因子 起息日 到期日
16国债04 97.8465 2.85% 0.9908 2016.1.28 2026.1.28
17国债04 101.3555 3.4% 1.028 2017.2.9 2027.2.9
18国债04 104.5917 3.85% 1.0661 2018.2.1 2028.2.1
def CTD(bp,fp,cf):return bp-fp*cf
bp=np.array([97.8465,101.3555,104.5917])
cf=np.array([0.9908,1.028,1.0661])
for i in range(3):print('交割{}国债04的成本为{:.4f}'.format(i+16,CTD(bp,99.2,cf)[i]))交割16国债04的成本为-0.4409
交割17国债04的成本为-0.6221
交割18国债04的成本为-1.1654

  因此最便宜可交割债是“18国债04”。

基于久期的套保策略

  国债期货采用百元净价报价的方式,即假定债券面额100为单位进行报价。比如国债期货报价为100.3,则表示每100元面额的价格为100.3元。由于合约的基础资产面值为100万元,则一手的合约价值为100.3×1000000/100元。

  市场利率与国债期货报价成反向关系,因此规避利率下降风险的金融机构可以用国债期货多头来套保,反之亦然。

  假设∆P表示被套保资产S的价值变化,∆V表示国债期货合约F的价格变化,根据各自的修正久期有∆P=-PDS∆y,∆V=-VDF∆y,根据组合久期为0代入∆P=N*∆V可得N *=PDS/VDF,即现货价值乘现货久期与期货价值乘期货久期之比。一般来说现货DS很容易计算,而DF的计算需要我们先选定一个CTD,用其套保到期日的修正久期来代替。如果利率环境发生了变化导致CTD变化,我们还需要对套保组合进行动态调整。

  2019年1月28日,假设一家管理1亿元证券投资组合的基金公司担心未来一个月利率上升,决定利用3月份到期的国债期货来套保。在到期日2月28日,证券组合久期为8.28。可见需要用10年期的国债期货合约T1903来套保,该合约在1月28日的结算价为97.725元,因此一手T1903合约的价值是97.725万元。假定CTD就是上述“18国债04”债券,YTM=3.2%,求需要买入或者卖出多少份国债期货合约?

def MD(c,y,F,t):p=sum(c*F/(1+y)**t)+F/(1+y)**len(t)a=sum(c*F*t/(1+y)**t)+F*len(t)/(1+y)**len(t)return (a/p)/(1+y)
t1=np.array(range(1,19));t2=np.array(range(1,20))
DF1=MD(0.0385/2,0.016,100,t1)/2#2019.8.1的久期
DF2=MD(0.0385/2,0.016,100,t2)/2#2019.2.1的久期
#插值法求2019.2.28的久期
DF=DF1+((dt.date(2019,2,28)-dt.date(2019,2,1)).days/181)*(DF2-DF1)
DF
Out[12]: 7.660818785410174
N=8.28*100000000/(DF*977250);N
Out[13]: 110.59855894893595

  该基金公司规避利率上升风险,因此需要卖出111份18国债04合约。

(三十一)国债期货的定价和套期保值相关推荐

  1. 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)...

    转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...

  2. Python编程基础:第三十一节 文件读取Read a File

    第三十一节 文件读取Read a File 前言 实践 前言 当我们检测到文件之后就可以读取其中的内容,读取所用到的函数是read(). 实践 我们依然以上一节的lyric.txt为例展示如何读取文件 ...

  3. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  4. 三十一、Java多线程编程(下篇)

    @Author:Runsen @Date:2019/11/07 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业 ...

  5. FreeSql (三十一)分区分表

    分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中.把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,数据库不同实现方式有所不同. 与分表不同,一张大表进行 ...

  6. 第三十一章 考试作弊

    第三十一章 考试作弊 "对了,还有李淳风,把李淳风也一并记录上,并移送官府." "李丽质,你搞错了没有,把我移送官府干什么?我又没参与考试,并且这些都会,我凭什么作弊,我 ...

  7. 【零基础学Java】—Java 日期时间(三十一)

    [零基础学Java]-Java 日期时间(三十一) java.util.Date:表示日期和时间的类 类Date表示特定的瞬间,精确到毫秒 毫秒:千分之一秒,1000毫秒=1秒 特定的时间:一个时间点 ...

  8. JavaScript学习(三十一)—在输入框中如何判断输入的是一个正确的网址

    JavaScript学习(三十一)-在输入框中如何判断输入的是一个正确的网址 function isUrl(url) {const a = document.createElement("a ...

  9. 485串口测试工具软件_探索者 STM32F407 开发板资料连载第三十一章 485 实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十一章 485 实验 ...

最新文章

  1. Datawhale组队学习周报(第017周)
  2. python手机版怎么弄-手把手教你如何使用Python向手机发送通知
  3. python正规教育机构-Python培训机构多吗 选择Python培训这些你都知道吗
  4. 李永乐线性代数2020年基础课手写笔记汇总
  5. LeetCode-Add Two Numbers
  6. 换工作了,开始用金蝶的BOS了,好多东西都要学啊!
  7. mysql yog中文版下载_SQLyog 12
  8. mysql uroot p 报错,MySQL链接错误集。
  9. mysql卡住锁表 processlist explain
  10. Shell下syntax error: operand expected (error token is “-”)
  11. PHP使用PHPMailer实现发送qq邮箱
  12. Android 秒表
  13. Android学习系列(33)--App应用之提交到各大市场渠道
  14. 4核处理器_AMD新款4核处理器899元,配一套电脑是不是可以更便宜了?
  15. 手机,电脑都能用的,整人,恶搞代码连接,“你不会百度一下吗”教你用百度
  16. 在 unity中可以使用的直接设置音量大小的方法
  17. 2021-2027中国建筑紧固件市场现状及未来发展趋势
  18. 2022 ICPC 南京站
  19. 翻译:数据科学简历中的7个必备条件
  20. 《惢客创业日记》2020.07.21(周二)悬疑爱好者的基地

热门文章

  1. Java 8实战(一)- Java 8基础知识
  2. windows安装torch_sparse\torch_geometric\torch_cluster
  3. C语言DNA序列的编码,DNA (C语言代码)
  4. Bongiovi DPS for mac(音频增强工具)
  5. Cloud Computing HCIP④-Fusion Access 桌面云
  6. 前端基础学习——Vue框架-AJAX的使用
  7. java heritrix_Heritrix 和 Nutch 比较与分析(java开源网络爬虫)
  8. 不惜一切、背负责任:王怀南用八个字掀开宝宝树新篇章
  9. 452页13万字现代智慧乡镇雪亮工程整体解决方案2022版
  10. cip核字号验证_cip数据核字号的全称是什么