債券價值計算

債券價值可視為每年現金流的總和。 假設有一債券面額 100 元,票面利率 5%,10 年到期,每年計息一次,持有此債券每年可獲得的金額如下:

cashflow <- c(rep(100 * 0.05, 10 - 1), 100 * (1 + 0.05))
cashflow <- data.frame(cashflow)
cashflow
##    cashflow
## 1         5
## 2         5
## 3         5
## 4         5
## 5         5
## 6         5
## 7         5
## 8         5
## 9         5
## 10      105

獲得的金額總值為 150 元。獲利看起來好像不錯,但是要考慮折現的問題,十年後的 100 元不會等值十年前的 100 元,假設銀行定存的利率是 3%,要以 3% 做為折現率計算,因為定存是無風險利率。

cashflow$t <- as.numeric(rownames(cashflow))
cashflow$d <- 1 / (1 + 0.03) ^ cashflow$t
cashflow$pv <- cashflow$cashflow * cashflow$d
cashflow
##    cashflow  t         d        pv
## 1         5  1 0.9708738  4.854369
## 2         5  2 0.9425959  4.712980
## 3         5  3 0.9151417  4.575708
## 4         5  4 0.8884870  4.442435
## 5         5  5 0.8626088  4.313044
## 6         5  6 0.8374843  4.187421
## 7         5  7 0.8130915  4.065458
## 8         5  8 0.7894092  3.947046
## 9         5  9 0.7664167  3.832084
## 10      105 10 0.7440939 78.129861
sum(cashflow$pv)
## [1] 117.0604

經過折現計算後實際價值約為 117 元。可見影響債券價值的因素有票面利率、到期的期數、其他投資方式的利率。簡單寫一個指令來計算。

## p 債券面額
## r 票面利率
## n 到期期數
## y 市場利率
bond <- function(p, r, n, y){
  cf <- c(rep(p * r, n - 1), p * (1 + r))
  cf <- data.frame(cf)
  cf$t <- as.numeric(rownames(cf))
  cf$d <- 1 / (1 + y) ^ cf$t
  cf$pv <- cf$cf * cf$d
  sum(cf$pv)
}

如果有市場上有一個投資利率為 7% 的工具,則債券的實際價值會變為多少呢?

bond(100, 0.05, 10, 0.07)
## [1] 85.95284

債券價值大約剩下 86 元,所以價格要低於 86 元再購入此債券才會划算。

債券價值變化

接著來看看其他因素如何影響債券的價值。

bond(100, .05, 10, .05)
## [1] 100
bond(100, .05, 10, .03)
## [1] 117.0604
bond(100, .05, 10, .07)
## [1] 85.95284
bond(100, .05, 5, .03)
## [1] 109.1594
bond(100, .05, 5, .07)
## [1] 91.79961
bond(100, .04, 10, .03)
## [1] 108.5302
bond(100, .04, 10, .07)
## [1] 78.92926

可見債券是蠻穩定的投資工具,難怪許多理財資料推薦退休族投資債券。

接著畫出債券價值與市場利率的變化圖來看看。

y1 <- seq(0.02, 0.5, by = 0.01)
y1 <- data.frame(y1)
for(i in 1:nrow(y1)){
  y1$p[i] <- bond(100, .1, 20, y1$y1[i])
}

y2 <- seq(0.02, 0.5, by = 0.01)
y2 <- data.frame(y2)
for(i in 1:nrow(y2)){
  y2$p[i] <- bond(100, .05, 20, y2$y2[i])
}

y3 <- seq(0.02, 0.5, by = 0.01)
y3 <- data.frame(y3)
for(i in 1:nrow(y3)){
  y3$p[i] <- bond(100, .05, 2, y3$y3[i])
}

plot(y1, type = "l", col = "red", xlab = "YTM", ylab = "Price")
lines(y2, col = "blue")
lines(y3, col = "green")

債券價值與市場利率的關係呈現一個曲線。

期數長的債券曲線彎曲較大,顯示市場升息時,債券價值下跌較慢;市場降息時,債券價值上升較快。期數短的債券會趨近直線,價格波動小,相對穩定,但市場若有變化獲利也會較少。所以債券的持有時間與曲線彎曲程度可用來評估債券在市場利率變動時的價值變化。有效久期 (effective duration)有效凸性 (effective convexity) 是來計算市場利率波動對價值的影響。

有效久期小比較好,代表資金很快可以回收。有效凸性大比較好,上一段有解釋原因。公式如下:

\[Duration = (P_- - P_+) / (2 * P * \Delta y)\]

\[Convexity = (P_- + P_+ - 2 * P) / (2 * P * \Delta y^2)\]

計算面額 100 元、票面利率 5% 的 10 年債券,在市場利率 5%、變化波動 2% 的價值變化情形。

p <- bond(100, .05, 10, .05)
p_down <- bond(100, .05, 10, .03)
p_up <- bond(100, .05, 10, .07)
duration <- (p_down - p_up) / (2 * p * .02)
convexity <- (p_down + p_up - 2 * p) / (2 * p * .02^2)

有效久期對價值的影響:

\[Price * Duration * \Delta y\]

有效凸性對價值的影響:

\[Price * 0.5 * Convexity * \Delta y^2\]

duration
## [1] 7.776892
convexity
## [1] 37.66553
duration_change <- p * duration * .01
convexity_change <- p * 0.5 * convexity * .02^2
p + duration_change + convexity_change
## [1] 108.5302

最後總和約為 108 元,表示此債券在此市場下的理論價格。不過市場利率未來會如何變化,誰又預測的準呢?