久期是指债券投资者收到债券所有现金流需要等待的平均时间,久期可以分为麦考利久期、修正久期和美元久期。麦考利久期是指收回收回债券投资现金流的加权平均时间,而为了反映债券价格对利率的变化,就出现了修正久期和美元久期,久期一般可以用于衡量债券价格对利率的敏感程度。
(一)麦考利久期
债券价格B与连续复利的到期收益率y之间的关系可以表示为:
B=
∑
k
=
1
n
c
i
e
−
y
t
i
\displaystyle \sum_{k=1}^n c_i e^{-yt_i}
k=1∑ncie−yti (1)
即债券价格等于所有未来将要支付的现金流现值之和。
麦考利久期D可以表达为:
D=
∑
k
=
1
n
c
i
e
−
y
t
i
∗
t
i
\displaystyle \sum_{k=1}^n c_i e^{-yt_i} *t_i
k=1∑ncie−yti∗ti/B=
∑
k
=
1
n
t
i
∗
(
c
i
e
−
y
t
i
/
B
)
\displaystyle \sum_{k=1}^n t_i*(c_i e^{-yt_i}/B)
k=1∑nti∗(cie−yti/B) (2)
其中
(
c
i
e
−
y
t
i
/
B
)
(c_i e^{-yt_i}/B)
(cie−yti/B)是
t
i
t_i
ti时刻债券支付的现金流现值与债券价格的比率,也是时间
t
i
t_i
ti的权重。
例如:某债券剩余期限为4年,面值为100元,票面利率为2.95%,票息支付每年2次,到期收益率为3.8%(连续复利)。求该债券的麦考利久期。
#定义一个求麦考利久期的函数
def maikaoli(c,y,t):
import numpy as np
cashflow=[]
weight=[]
n=len(t)
for i in np.arange(n):
cashflow.append(c[i]*np.exp(-y*t[i]))
for i in np.arange(n):
weight.append(cashflow[i]/sum(cashflow))
maikaoli=np.sum(t*weight)
return maikaoli
#输入相关参数并计算
#c为票面利率 p为面值 by为到期收益率
c=0.0295
p=100
by=0.038
t=np.arange(1,9)/2
cashflow=np.ones_like(t)*c*0.5*p
cashflow[-1]=p*(1+c*0.5)
D=maikaoli(cashflow,by,t)
print(round(D,4))
结果为3.7983,也可以利用前面介绍过的债券
针对式(2),若到期收益率y存在微小变化,则可以有
Δ
\Delta
ΔB=dB/dy
Δ
y
\Delta y
Δy =-BD
Δ
y
\Delta y
Δy
再次变化为:
Δ
\Delta
Δ B/B=-D
Δ
y
\Delta y
Δy
(二)修正久期
麦考利久期有一个很重要的前提是债券的到期收益率y是连续复利。
若改为到期收益率y是每年复利1次,久期关系式就变为:
Δ
\Delta
Δ B/B=-D
Δ
y
\Delta y
Δy/(1+y)
若是每年复利每次,则变为:
Δ
\Delta
Δ B/B=-D
Δ
y
\Delta y
Δy/(1+y/m)
令D*=D/(1+y/m)则(2)式变为:
Δ
\Delta
ΔB=-BD*
Δ
y
\Delta y
Δy,这里的D*就是修正久期。
沿用上例,设每年复利2次的债券到期收益率增加10个基点,计算该债券的修正久期。
复利m次与连续复利的收益率转换可以表示为:
Rc=m*ln(1+Rm/m)
import numpy as np
def maikaoli(c,y,m,t):
cashflow=[]
weight=[]
n=len(t)
Rc=m*np.log(1+y/m)
for i in np.arange(n):
cashflow.append(c[i]*np.exp(-Rc*t[i]))
for i in np.arange(n):
weight.append(cashflow[i]/sum(cashflow))
maikaoli=np.sum(t*weight)
return maikaoli/(1+y/m)
#c为票面利率 p为面值 by为到期收益率
c=0.0295
p=100
t=np.arange(1,9)/2
m=2
Rc=0.038
by=m*(np.exp(Rc/m)-1)
cashflow=np.ones_like(t)*c*0.5*p
cashflow[-1]=p*(1+c*0.5)
D=maikaoli(cashflow,by,m,t)
print(round(D,4))
可以得出,修正久期为3.7268
可以发现,当利率发生变化时,修正久期也进行了调整。
(三)美元久期
美元久期也称绝对额久期,是指债券价格与修正久期的乘积,可表示为:
D
s
D_s
Ds=BD*
还是上面的例子,求该债券的美元久期。
首先计算出债券的价格:
def bond_value(c,M,t,m,y):
import numpy as np
cp=[]
for i in np.arange(1,t*m+1):
cp.append(np.exp(-y*i/m)*M*c/m)
return np.sum(cp)+np.exp(-y*t)*M
c=0.0295
M=100
t=4
m=2
y=0.038
bond_value(c,M,t,m,y)
得到96.7421
然后用这个结果去乘以修正久期
bond_value(c,M,t,m,y)*D
得到360.54