開始使用免費開始

使用目標報酬率網格計算效率前緣

如你所見,計算效率前緣的一種作法是先定義一組目標報酬率的網格,然後對於每個目標報酬率,找出在變異數最低下,其預期報酬等於該目標報酬率的投資組合。

但要如何設定一個合理的目標報酬率網格呢?你將把最大目標報酬率設為所有股票的平均報酬中的最大值。理想情況下,最小目標報酬率應該設為最小變異數投資組合的報酬率。由於你尚未知曉這個最小變異數投資組合的報酬,因此先用所有股票平均報酬的最小值來建立一個網格。

在本練習中,你會使用 for 迴圈來計算潛在投資組合的平均報酬、標準差,以及權重的網格。

本練習屬於課程

R 投資組合分析入門

檢視課程

練習說明

  • 計算 returns 的欄平均(使用 colMeans()),並將結果命名為 stockmu
  • 建立一個長度為 50 的序列(seq()),從無風險利率 1% 開始,到 stockmu 的最大值為止,並將其命名為 grid
  • 使用 rep() 建立兩個與 grid 等長的空向量,用來儲存投資組合的平均報酬與標準差。將它們命名為 vpmvpsd
  • 初始化一個有 50 列、30 欄的空矩陣。將其命名為 mweights。你可以使用 matrix() 函式來建立。
  • 建立一個 for 迴圈,從 grid 的第一個值跑到最後一個值。for 迴圈中應建立一個名為 opt 的投資組合,使用 returns,且目標報酬率為 grid
  • 在每次迭代中,for 迴圈應將 opt 中對應的值填入向量 vpm$pm)、vpsd$ps)。
  • 將投資組合權重逐列儲存在 mweights$pw)中。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Calculate each stocks mean returns


# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)

# Create empty vectors to store means and deviations
vpm <- vpsd <- 

# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)

# Create your for loop
for(i in 1:length(grid)) {
  opt <- portfolio.optim(x = ___, pm = ___[i])
  vpm[i] <- ___$__
  vpsd[i] <- ___$__
  mweights[i, ] <- ___$__
}
編輯並執行程式碼