EXCEL計算凸度(Convexity)
阿新 • • 發佈:2018-12-15
本文章採用EXCEL的VBA計算債券凸度,水平有限,還望海涵,如有問題歡迎留言 應為EXCEL中不包含凸度的公式,所以用VBA寫了一個 先上公式 所以要計算凸度需要以上幾個變數,由於我們需要計算債券的凸度,可得債券的條件有:
- 結算日
- 到期日
- 票息率
- 收益率
- 年付息次數
- 債券面值
通過以上條件可手動算出凸度,但是付息次數太多了就有點麻煩了,所以上程式碼吧
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表格中直接使用該函式
如圖,在表格中使用該函式,填入第二種債券的引數,就可以算出第二種債券的凸度。