栏目:股票配资软件 作者:怎么买股票 更新:2025-08-28 阅读:29
<怎么买股票>债券价格受何影响?麦考利久期是如何计算的?怎么买股票>
本节主要介绍单因子对债券价格的影响(也可理解为债券的市场风险的一些单因子影响指标)。单因子影响是假设关于期限结构的唯一重要假设变化是所有的变化都是由一个因子驱动的。最简单的单因子模型即假设价格的变动是由单一利率变化影响。
一、麦考利久期
麦考利久期( )。久期的概念最早是麦考利( (1882.8.12–1970.3) )在1938年提出来的,所以又称麦考利久期(简记为D)。麦考利久期是使用加权平均数的形式计算债券的平均到期时间。它是债券在未来产生现金流的时间的加权平均,其权重是各期现值在债券价格中所占的比重。
麦考利久期可以简单理解为:债券现金流的平均到期时间。
对于零息债券来说,麦考利久期等同于其到期时间T。
【案例分析】如果一支债券的现值为93.06元,在第一年末第一笔利息5.46元,第二年末本金和利息一共87.60元,则其麦考利久期为:
这表明1个BP的连续复利y的变动会导致债券价格变动
二、修正久期
在考虑了收益率的基础上对麦考利久期进行的修正债券价格确定的基础,是债券价格对于利率变动灵敏性的更加精确的度量。当投资者判断当前的利率水平有可能上升时,集中投资于短期债券、缩短债券久期;当投资者判断当前的利率水平有可能下降时,拉长债券久期、加大长期债券的投资债券价格受何影响?麦考利久期是如何计算的?,帮助投资者在债市的上涨中获得更高的溢价。
注:美元久期
三、基点价值(DV01)
1.DV01
基点价值(DV01)是指当收益率变动1个基点(0.01%)时债券价格的变化量。
2.DV01对冲
【案例分析】假设一支15年期的息票债券的DV01为0.15316,采用10年期息票债券将作为对冲工具。10年期债券的DV01为0.。计算对冲比率。
即每1元面值15年期的债券,需要1.511元10年期的债券对冲。
四、凸性
凸性是对债券价格利率敏感性的二阶估计,是对债券久期利率敏感性的测量。在价格-收益率出现大幅度变动时,它们的波动幅度呈非线性关系。由持久期作出的预测将有所偏离。凸性就是对这个偏离的修正。无论收益率是上升还是下降,凸性所引起的修正都是正的。因此如果修正持久期相同,凸性越大越好。
由以上可以看出债券价格确定的基础,采用凸性+久期计算利率对价格变化的影响要比只用久期的方式更准确。
下面我们讨论久期相同的债券的情况。当两个债券的久期相同时,它们的风险不一定相同,因为它们的凸性可能是不同的,具体分析如下:
曲线ADE代表凸性大的债券,曲线BDF为凸性小的债券。在收益率增加相同单位时(D点移动到G点),如图Pd-Pe
Pb-Pd债券价格确定的基础,凸性大的债券的价格增加幅度较大。因此债券价格受何影响?麦考利久期是如何计算的?,在久期相同的情况下,凸性大的债券其风险较小。
【拓展】负凸性介绍
凸性越大,债券价格曲线弯曲程度越大,用修正久期度量债券的利率风险所产生的误差越大。通常情况下由于收益率曲线是向上倾斜的,普通的债券会呈现出正凸性。而可赎回债券通常在较低的收益率下表现出负凸性。
五、有效久期
有效久期不需要考虑各期现金流的变化情况债券价格受何影响?麦考利久期是如何计算的?,不包含利率变化导致现金流发生变化的具体时间,而只考虑利率一定变化下的价格总体情况。因此,有效久期能够较准确地衡量具有隐含期权性质的金融工具的利率风险。对于没有隐含期权的金融工具,有效久期与修正久期是相等的。
P_——利率下降x个基本点时的债券价格;
P+——利率上升x个基本点时的债券价格;
y——初始收益率增加/减去y个基本点
六、有效凸性
【案例分析】考虑一支10年期的债券初始价格为100,按照票面6%的利息付息。分别计算利率上升40个基点和下降40个基点的有效久期和凸性。
利率上升40个基点:
利率下降40个基点:
七、基于有效久期和凸性的对冲
V:投资债券V的价值
Dv:有投资债券V的有效久期
P:债券的价值
Dp:债券P的久期
比如有效久期与凸性同时对冲有:
【案例分析】假定第一支债券的现值、久期与凸性分别为P1,D1,C1;第二支债券为P2,D2,V2;对冲债券为V,Dv,Cv;则应当满足以下关系式:
【拓展】久期和凸性的投资组合
投资组合的久期和凸性等于其分别个体的加权和,久期和凸性是其价值占投资组合价值的百分比。
【案例分析】
【案例分析】一位投资经理用100万购买了债券B,半年付息。采用债券A和债券C构建投资组合使得花费同样成本与同样久期。
注:构建了相同投资额和久期,但是凸性并不相等。
【综合案例完整分析】:2020/1/10估值——18附息国债27
18附息国债27——2020/1/10估值:
要素条件:
票面年利息C=3.25%×100=3.25
年付息频率f=2
债券结算日至下一最近付息日之间的实际天数d=2020/5/22-2020/1/10=133
结算日至到期兑付日的债券付息次数n=18
债券面值M=100
当前付息周期的实际天数TS=2020/5/22-2019/11/22=182
import numpy as np
import pandas as pd
d0 = pd.to_datetime('2019-11-22') #上次付息日
d1 = pd.to_datetime('2020-1-10') #定义估值日
d2 = pd.to_datetime('2020-5-22') #下次付息日
dt=(d2-d1).days #下次付息日至估值日天数
TS0=(d2-d0).days #下次付息日至上次付息日天数
#计算债券的现值PV
'''计算债券PV的函数
C:票面年利息;
f:年付息频率;
d:债券结算日至下一最近付息日之间的实际天数;
n:结算日至到期兑付日的债券付息次数;
M:债券面值;
TS:当前付息周期的实际天数。'''
def Bond_price(y,C,f,d,n,M,TS):
import numpy as np
coupon=[]
for i in np.arange(0,n):
coupon.append((C/f)/pow(1+y/f,d/TS+i))
return np.sum(coupon)+M/pow(1+y/f,d/TS+n-1)
Bondprice=Bond_price(y=0.031351,C=3.25,f=2,d=dt,n=18,M=100,TS=TS0)
print('计算得到债券的全价',np.round(Bondprice,4))
y=0.031351 #到期收益率/估值收益率
C=3.25 #票面年利息
f=2 #年付息频率
d=133 #债券结算日至下一最近付息日之间的实际天数
n=18 #结算日至到期兑付日的债券付息次数;
M=100 #债券面值
TS=182 #当前付息周期的实际天数
d0 = pd.to_datetime('2019-11-22') #上次付息日
d1 = pd.to_datetime('2020-1-10') #定义估值日
#生成债券的贴现现金流
import numpy as np
cashflow=[]
discountcashflow=[]
for i in np.arange(0,n):
discountcashflow.append((C/f)/pow(1+y/f,d/TS+i))
cashflow.append(C/f)
discountcashflow[n-1]=discountcashflow[n-1]+M/pow(1+y/f,d/TS+n-1)
cashflow[n-1]=cashflow[n-1]+M
#输入日期,输出n个月后的日期(生成现金流日期)
import datetime
import calendar
import math
def get_recent_month(dt, months):
#这里的months 参数传入的是正数表示往后 ,负数表示往前
month = dt.month - 1 + months
year = math.floor(dt.year + month / 12)
month = month % 12 + 1
day = min(dt.day, calendar.monthrange(year, month)[1])
return str(dt.replace(year=year, month=month, day=day))[:10]
#依据计息频率计算当前月份往后的每次付息的时间
period_list = []
date=[]
for j in range(1,n+1):
j=j*int(12/f)+1
for i in range(1, j):
period_list.append(get_recent_month(d0, i))

date.append(get_recent_month(d0, j-1))
date=pd.to_datetime(date)
print (date)
#计算现金流日至估值日的年化天数
t1 = [d] #生成一个表,初始数据为d,用来放新列表
for i in range(len(date)-1):
b = (date[i+1] - date[i]).days #后者减前者
t1.append(b) #添加元素到新列表
#判断计息年度,计算剩余期限年化时间t,为闰年/366,否则/365,转换时间为年化
t1[0]=t1[0]/366.0 #下一付息日为闰年
for i in range(1,n):
if date[i].year%4==0:
t1[i]=t1[i]/366
else:
t1[i]=t1[i]/365
t1[i]=t1[i-1]+t1[i]
#生成债券现金流表及估值信息
frame1=pd.DataFrame({'date':date,'year':t1,'cashflow':cashflow,
'discountcashflow':discountcashflow,
'weight':discountcashflow/Bondprice,
'weight_mul_year':(np.array(t1)*discountcashflow)/Bondprice,
}) #转换为数据框拼接
new=pd.DataFrame({'date':d1,
'year':0,
'cashflow':0,
'discountcashflow':0,
'weight':0,
'weight_mul_year':0,},index=[0])
frame1=new.append(frame1,ignore_index=True) #插入估值日信息行
new2=pd.DataFrame({'date':d1,
'year':'summation',
'cashflow':sum(frame1.cashflow),
'discountcashflow':sum(frame1.discountcashflow),
'weight':sum(frame1.weight),
'weight_mul_year':sum(frame1.weight_mul_year)},index=[0])
frame2=frame1.append(new2,ignore_index=True) #插入估值日信息
pd.set_option('display.width', 1000) #设置行宽度
pd.set_option('display.max_rows', None) #不省略显示行内容
print(frame2)
由以上计算,可知当前债券的全价为各期贴现现金流之和=101.3184,与前面的PV全价计算一致。
麦考利久期:各期贴现现金流占比全价权重×年化时间year的求和=7.75。
#求解市场风险指标
Mac=sum(frame1.year*frame1.weight) #计算麦考利久期
MD=Mac/(1+y/f) #计算修正久期
DV01=MD*Bondprice/10000 #计算DV01
Con=sum(frame1.year*(frame1.year+1)*frame1.weight) #计算凸性
MC=Con/(1+y/2)**2 #计算修正凸性
Bondprice1=Bond_price(y=y+0.0001,C=C,f=f,d=d,n=n,M=M,TS=TS)
Bondprice2=Bond_price(y=y-0.0001,C=C,f=f,d=d,n=n,M=M,TS=TS)
E_D=(Bondprice2-Bondprice1)/(2*0.0001*Bondprice) #计算有效久期
E_C=(Bondprice2+Bondprice1-2*Bondprice)/(Bondprice*0.0001**2) #计算有效凸性
print('1.麦考利久期',round(Mac,2))
print('2.修正久期',round(MD,2))
print('3.DV01',round(DV01,4))
print('4.凸性',round(Con,2))
print('5.修正凸性',round(MC,2))
print('6.有效久期',round(E_D,2))
print('7.有效凸性',round(E_C,2))
更多精彩丰富内容可购买笔者图书:
《金融量化实战固定收益类产品分析》:一本适合入门的金融与科技结合的应用书籍,提高业务与科技的融合,附赠源代码/视频导读/AI入门等丰富的配套资源!