建構收益率曲線 Yield Curve (2) 工作日調整 Business Day Convention - 用 Excel

本文介绍了如何使用Excel构建收益率曲线,并详细阐述了工作日调整的概念,包括Unadjusted、Preceding、ModifiedPreceding、Following和ModifiedFollowing五种方式。通过VBA实现DayRoll()函数来处理周末和假日的调整,确保计算的准确性。文章提供了实例下载、配置参数说明、流程图和测试案例,帮助读者理解和应用。
摘要由CSDN通过智能技术生成


上一篇我們詳細介紹了什麼是 Business Day Convention 以及用 Python 和 QuantLib 來實現工作日調整. 這一篇我們用 Excel 來做.

範例下載

範例檔案可以在此下載.

配置參數

首先把重要的參數排好位置. 三個參數分別是:

  1. 開始日期
  2. 每期的月數: 在 B2 格輸入數字直接表示每一期是幾個月
  3. 調整方式: 我們實作 Unadjusted, Preceding, ModifiedPreceding, Following, 和 ModifiedFollowing 五種方式.

配置參數

表格

把表格空間預留下來, 包括期數, 未調整日期, 星期幾, 和調整後日期. 星期幾是是供參考.
在这里插入图片描述

前進月份和 EDATE()

把每一期的未調整日期指定為開始日期加上期數*每期月數. 使用 Excel 函數 EDATE() 可以指定日期並加上特定月數. B6儲存格的公式為:

=EDATE(B$1, B$2*A6)

複製到其他期就變成下圖
在这里插入图片描述

WEEKDAY() 函數

在C欄我們加上了一個星期的參考值, 看看我們未調整日期是星期幾. 使用 Excel 的 WEEKDAY() 函數, 配上參數可以有不同的回復值. 在此我們選 數字11, 星期一到六分別是1到6, 而星期天是7.

在这里插入图片描述

自建假日列表

我們需要維護一個假日列表, 在另一個工作表或是任何地方輸入假日的日期, 把這個範圍指定一個名稱, 圖中左上方我把它命名為 假日列表
在这里插入图片描述

調整函數 DayRoll()

剩下最後一步了, 我們要來做調整的步驟. 我們需要用到 VBA. 我不是很想用 VBA 在教程上, 除非儲存格公式和表格沒辦法做.

Excel 的財務函數都太簡單了, 像是大學投資學課程用的, 對於我們需要的假日和調整功能完全沒有, 我們需要自己來做.

這個調整步驟很難用表格來實現, 因為牽涉到兩個不同的部份: 周末和假日, 我們必須要來回檢查調整後的日期是否為假日或周末.

有一個變通的方式是把所有周末都輸入成為假日, 這樣用單一儲存格就可以做到, 但這樣子假日列表會很長. 我們還是用 VBA 來做.

流程圖

Created with Raphaël 2.2.0
让用户可以随时查找曲线上任意点的坐标(函数值) 附件的 .mht文件,是一个简单介绍贝塞尔三次插值的文档,可以用IE打开,更多贝塞尔插值的算法,可以用搜索引擎找 附件的 .xls文件,打开以后,会看见三个工作表,分别演示了 找一个数值在曲线上的一组对应点 找一个数值在曲线上的所有对应点 和贝塞尔曲线是怎样在通过每两个节点的(每一对输入的X-Y数值代表平面坐标系的一个点,称为节点,Excel的平滑曲线通过每一个节点) 要在其他Excel文档使用 BezireInt() 函数,需要按Alt+F11,双击模块一 复制所有文字 然后打开其他Excel文档按Alt+F11,插入---模块,然后粘贴所有文字 自定义函数的使用方法是: 在空白单元格输入 =BezierInt(X坐标的范围,Y坐标的范围,待查的数值) 函数就会返回一个包含六个元素的数组,分别是三个点的X,Y坐标 如: 你根据 a1:a4的数值作为X值,b2:b4的数值作为Y值,画了一个平滑线散点图 想查找c1的数值是不是在这条曲线上 就可以输入 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,1) 得到曲线上第一个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,2) 得到曲线上第一个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,3) 得到第2个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,4) 得到第2个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,5) 得到第3个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,6) 得到第3个 X值=C1数值的点的Y坐标 如果有多段曲线上的点包含C1的数值,那么可以增加输入参数,指定从哪个节点开始查找 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,1) 得到从第三组X-Y数据开始查找, 返回第一个符合C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,2) 得到从第三组X-Y数据开始查找,返回第一个符合C1数值的点的Y坐标 函数默认输入数值是X值,要根据Y值找点的话,还可以增加输入参数, 指定输入的是Y值 =Index( BezierInt(a1:a4,b1:b4,c1,1,"Y"),1,1) 得到返回曲线上第一个 Y值=C1数值的点的X坐标如此类推......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值