金融学习之十一——久期

久期是指债券投资者收到债券所有现金流需要等待的平均时间,久期可以分为麦考利久期、修正久期和美元久期。麦考利久期是指收回收回债券投资现金流的加权平均时间,而为了反映债券价格对利率的变化,就出现了修正久期和美元久期,久期一般可以用于衡量债券价格对利率的敏感程度。
(一)麦考利久期
债券价格B与连续复利的到期收益率y之间的关系可以表示为:
B= ∑ k = 1 n c i e − y t i \displaystyle \sum_{k=1}^n c_i e^{-yt_i} k=1ncieyti (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=1ncieytiti/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=1nti(cieyti/B) (2)
其中 ( c i e − y t i / B ) (c_i e^{-yt_i}/B) (cieyti/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

你可能感兴趣的:(金融学习,python)