1. 程式人生 > >EXCEL計算凸度(Convexity)

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表格中直接使用該函式 在這裡插入圖片描述 如圖,在表格中使用該函式,填入第二種債券的引數,就可以算出第二種債券的凸度。