EXCEL计算凸度(Convexity)

本文章采用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表格中直接使用该函数
在这里插入图片描述
如图,在表格中使用该函数,填入第二种债券的参数,就可以算出第二种债券的凸度。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
根据提供的引用内容,可以使用以下步骤在Matlab中计算图像轮廓的凸度: 1. 读取图像并转换为灰度图像。 2. 对灰度图像进行阈值化处理,得到二值图像。 3. 对二值图像进行膨胀处理,使图像中的轮廓更明显。 4. 使用边缘检测算法(如Canny算法)提取图像的边缘。 5. 使用cv.convexHull函数计算图像边缘的凸包。 6. 计算凸包的面积和轮廓的长度。 7. 根据凸包的面积和轮廓的长度计算轮廓的凸度。 以下是一个Matlab示例代码,演示了如何计算图像轮廓的凸度: ```matlab % 读取图像并转换为灰度图像 img = imread('image.jpg'); grayImg = rgb2gray(img); % 阈值化处理得到二值图像 brightnessThreshold = 100; binBrightImg = grayImg > brightnessThreshold; % 膨胀处理 se = strel('disk', 3); dilatedImg = imdilate(binBrightImg, se); % 边缘检测 edgeImg = edge(dilatedImg); % 计算凸包 [B, L] = bwboundaries(edgeImg, 'noholes'); convexHull = cellfun(@(x) convhull(x(:,2), x(:,1)), B, 'UniformOutput', false); % 计算凸度 convexity = cellfun(@(x) polyarea(x(:,2), x(:,1)) / length(x), convexHull); % 显示结果 imshow(img); hold on; for k = 1:length(B) boundary = B{k}; plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2); text(boundary(1,2), boundary(1,1), sprintf('%.2f', convexity(k)), 'Color', 'y'); end hold off; ``` 请注意,上述代码仅为示例,实际应用中可能需要根据具体情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值