EXCEL计算凸度(Convexity)

本文介绍如何使用Excel VBA编写代码来计算债券的凸度,包括债券的结算日、到期日、票息率等关键参数,并提供了一个具体的VBA函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章采用EXCEL的VBA计算债券凸度,水平有限,还望海涵,如有问题欢迎留言
应为EXCEL中不包含凸度的公式,所以用VBA写了一个
先上公式
凸度计算公式
所以要计算凸度需要以上几个变量,由于我们需要计算债券的凸度,可得债券的条件有:

  1. 结算日
  2. 到期日
  3. 票息率
  4. 收益率
  5. 年付息次数
  6. 债券面值

通过以上条件可手动算出凸度,但是付息次数太多了就有点麻烦了,所以上代码吧

Public Function Convexity(mianzhi, Rate, coupon, t, Fre)
    cishu = t * Fre '获取付息次数
    piaoxi = mianzhi * Rate / Fre '每期票息
    percou = coupon / Fre '每期收益率
    night = 0 '除最后一期的ct(t^2+t)/(1+y)^t
    For i = 1 To cishu - 1 '计算除最后一年的ct(t^2+t)/(1+y)^t
        a1 = i ^ 2 + i '计算(t方+t)
        a2 = piaoxi * a1 / (1 + percou) ^ i
        night = night + a2
    Next
    cashfinal = (mianzhi + piaoxi) * (cishu ^ 2 + cishu) / (1 + percou) ^ cishu
    Totalcash = night + cashfinal
    timb = CDate("2010/10/10")
    timend = DateAdd("yyyy", 5#, timb)
    'MsgBox timend
    xxx = (1 + percou) ^ 2
    'MsgBox xxx
    yyy = Application.WorksheetFunction.Price(timb, timend, Rate, coupon, mianzhi, Fre) * xxx
    Convexity = Totalcash / yyy / Fre ^ 2
End Function
Sub t()'测试用的
    i = Convexity(100, 0.08, 0.08, 2, 2)
    MsgBox i
End Sub

第一个参数债券面值,第二个是息票率,第三个是收益率,第四个是年份(就是到期日减去结算日得到的年份),第五个是每年付息多少次
下面来讲以下怎么用
在这里插入图片描述
以上是两种债券的相关信息,假设债券面值100
然后打开EXCEL开发工具栏的Visual Basic,新建一个模块,将代码复制粘贴进去后保存。

000000000000000000000000000000000000000000000000000000000000000000000000000000
在这里插入图片描述
在红框内填入第一种债券的参数,运行即可得到第一种债券的凸度
当然也可以在EXCEL表格中直接使用该函数
在这里插入图片描述
如图,在表格中使用该函数,填入第二种债券的参数,就可以算出第二种债券的凸度。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值