今天讨论另外一个概念,叫做凸性。什么是凸性呢?凸性也称为凸度或曲率,是衡量债券价格对债券到期收益率变化的非线性关系的指标,是债券价格对收益率的二阶导数。\为什么需要讨论凸性呢,我们可以看下面的例子(这个例子在金融学习第十一期讲过)
例如:某债券剩余期限为4年,面值为100元,票面利率为2.95%,票息支付每年2次,到期收益率为3.8%(连续复利)。现假设连续复利的债券到期收益率变动了100个基点,从3.8%增至4.8%,重新计算债券的最新价格。
根据在前面第十一期的介绍,可以知道债券的价格原本是96.7421,根据麦考利久期
Δ
\Delta
ΔB=-BD*
Δ
y
\Delta y
Δy计算债券价格的变化可得,债券的价格变动应该为:
-96.74213.79831%=-3.6745
意味着债券价格将从96.7421变化为96.7421-3.6745=93.0676
但同时也可以根据前面介绍过的债券定价公式计算出的债券精确价格为93.1387,这二者之间的差异为0.0711,价格差异比较大,因此也说明债券的久期仅仅适合于收益率变化很小的情形,为了弥补久期的不足,于是引入了另一个指标也就是——凸性。
凸性的实质就是债券支付现金流的时间
t
i
t_i
ti平方的加权平均数,而权重与计算久期的权重一致,都是
t
i
t_i
ti时刻债券支付的现金流现值与债券价格比率。
根据凸性计算的公式:
C=
∑
i
=
1
n
t
i
2
∗
(
c
i
e
−
y
t
i
/
B
)
\displaystyle \sum_{i=1}^n t_i^2*(c_i e^{-yt_i}/B)
i=1∑nti2∗(cie−yti/B)
结合久期公式,可得:
Δ
\Delta
ΔB=-BD*
Δ
y
\Delta y
Δy+1/2CB*
(
Δ
y
)
2
(\Delta y)^2
(Δy)2
于是可以计算该债券的最新价格:
首先计算凸性:
import numpy as np
def tx(c,y,t):
#c为债券存续期内的现金流,y为债券的到期收益率,t为对应的现金流产生时刻
cashflow=[]
weight=[]
n=len(t)
for i in np.arange(n):
cashflow.append(c[i]*np.exp(-y*t[i]))
price=sum(cashflow)
for i in np.arange(n):
weight.append(cashflow[i]/price)
tx=np.sum(weight*t**2)
return tx
c=[1.475,1.475,1.475,1.475,1.475,1.475,1.475,101.475]
y=0.038
t=[0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0]
round(tx(np.array(c),y,np.array(t)),4)#结果保留4位小数
可得凸性为:14.8961
当到期收益率发生变化后,该债券的价格变化为:
96.0376+0.514.896196.7421*(0.01)2=-3.6025
债券价格为96.7421-3.6025=93.1396,与之前利用债券定价公式得到的93.1387之间的差异仅为0.0009,远小于之前的0.0711,说明引入了凸性后,债券定价明显得到了改善。