(二十)久期与凸性

久期的定义与表达式

在这里插入图片描述在这里插入图片描述
  一年付息m次的债券计算久期,公式中期数乘以m,息票率c和收益率y除以m,得到的结果除以m即可。
  例1:面值100,息票率为8%的三年期债券,半年付息一次,到期收益率为10%,求该债券的麦考利久期、修正久期和美元久期:

import pandas as pd
def macD(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
t=pd.Series([1,2,3,4,5,6])
macD(0.04,0.05,100,t)
Out[1]: 5.43489852580703
def MD(c,y,F,t):
	return macD(c,y,F,t)/(1+y)
MD(0.04,0.05,100,t)
Out[2]: 5.176093834101933
def DD(c,y,F,t):
	return MD(c,y,F,t)*(sum(c*F/(1+y)**t)+F/(1+y)**len(t))
DD(0.04,0.05,100,t)
Out[3]: 491.33712499701005
#注意上述三个久期单位都是半年,除以2得到以年为单位的久期

  例2:求例1中债券到期收益率变化10个基点下的有效久期:

def ED(c,y,F,t,per):
	p0=sum(c*F/(1+y)**t)+F/(1+y)**len(t)
	p1=sum(c*F/(1+y+per)**t)+F/(1+y+per)**len(t)
	p2=sum(c*F/(1+y-per)**t)+F/(1+y-per)**len(t)
	return (p2-p1)/(2*p0*per)#分母一定要加括号
ED(0.04,0.05,100,t,0.0005)#每一期收益率变化5个基点
Out[4]: 5.176104241061871#半年

  对于资产组合久期的计算,对组合中所有资产的久期求加权平均即可,权重是各种资产的市场价格(面值)占资产总价值的比重,在此不再赘述。

凸性的定义与表达式

在这里插入图片描述
  例3:面值100,息票率为8%的三年期债券,半年付息一次,到期收益率为10%,求该债券的凸性,以及到期收益率增加100个基点时债券价格的变化百分比:

def C(c,y,F,t):
	p=sum(c*F/(1+y)**t)+F/(1+y)**len(t)
	a=sum(c*F*(t**2+t)/(1+y)**t)+F*(len(t)**2+len(t))/(1+y)**len(t)
	return a/(p*(1+y)**2)
t=pd.Series([1,2,3,4,5,6])
C(0.04,0.05,100,t)/4#转换为年凸性
Out[5]: 8.337374824752287
def perchange(c,y,F,t,per):
	return -MD(c,y,F,t)/2*per+(0.5*C(c,y,F,t)/4)*per**2
perchange(0.04,0.05,100,t,0.01)
Out[6]: -0.02546360042927205#收益率每增长1%,债券价格下降2.55%
  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中可以使用一些金融库来计算债券的现值、久期凸性。以下是一些常用的库和函数: 1. QuantLib:QuantLib是一个功能强大的开源金融库,可以用于计算债券的现值、久期凸性等指标。你可以使用QuantLib中的Bond类来创建债券对象,并使用相应的方法计算指标。 2. numpy-financial:numpy-financial是一个基于NumPy的金融计算库,提供了一些常用的金融函数。你可以使用该库中的现金流函数(cashflows)来计算债券的现金流,并使用现金流来计算债券的现值、久期凸性。 3. yfinance:yfinance是一个用于获取金融数据的库,可以从Yahoo Finance获取债券的市场数据。你可以使用该库来获取债券的市场价格,并结合其他库来计算债券的现值、久期凸性。 下面是一个示例代码,展示如何使用QuantLib库来计算债券的现值、久期凸性: ```python import QuantLib as ql # 创建债券对象 issue_date = ql.Date(1, 1, 2022) maturity_date = ql.Date(1, 1, 2027) coupon_rate = 0.05 face_value = 1000 bond = ql.FixedRateBond(2, ql.TARGET(), face_value, issue_date, maturity_date, ql.Period('6M'), [coupon_rate], ql.ActualActual()) # 计算现值 discount_curve = ql.FlatForward(ql.TARGET(), ql.QuoteHandle(ql.SimpleQuote(0.03)), ql.ActualActual()) present_value = ql.BondFunctions.cleanPrice(bond, discount_curve) # 计算久期凸性 duration = ql.BondFunctions.duration(bond, discount_curve) convexity = ql.BondFunctions.convexity(bond, discount_curve) print("现值:", present_value) print("久期:", duration) print("凸性:", convexity) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值