ドライバー2:ポートフォリオ比率の選択
投資家は、ポートフォリオのシャープレシオで測られるリスク調整後リターンが最大になるように、比率の選択を最適化できます。
ポートフォリオ全体を2資産のみに投資する特別な場合、決めるべき比率は1つだけです。2つ目の資産の比率は、1つ目の資産の比率を1から引いた値になるからです。
ここでは、米国株式と米国債券に投資するポートフォリオでこれを行います。多数の候補となる比率を総当たりで試し、ポートフォリオのシャープレシオ(無リスク金利を0と仮定)を最大にする比率を採用するというブルートフォースのアプローチを用います。
この演習はコースの一部です
Rで学ぶポートフォリオ分析入門
演習の手順
seq()を使って、0から始まり1で終わり、増分0.01のベクトルgridを作成します。gridと同じ長さの空のベクトルvsharpeを初期化します。一般的な方法は、関数 rep() を使って NA を含むベクトルを作成することです。次に作成するループの中で、これらの NA を置き換えます。- for ループでは、
gridにあるすべての候補比率についてシャープレシオを計算します。for ループの最初のコマンドは、grid の i 番目の要素を選んでオブジェクトweightに保存します。これは各イテレーションで変化します。 - 比率が変わるとポートフォリオのリターンがどう変化するかを確認します。
weight×returns_equitiesと、(1-weight)×returns_bondsの和に等しいオブジェクトpreturnsを作成します。 - 次に、
vsharpeの NA を、preturnsの年率換算シャープレシオ(SharpeRatio.annualized())で置き換えます。 - 候補比率(
grid)を x 軸、シャープレシオを y 軸にとってプロットする関数を完成させましょう。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create a grid
grid <- seq(from = ___, to = ___, by = ___)
# Initialize an empty vector for Sharpe ratios
vsharpe <- rep(NA, times = ___ )
# Create a for loop to calculate Sharpe ratios
for(i in 1:length(grid)) {
weight <- ___[i]
preturns <- ___ * ___ + (1 - ___) * ___
vsharpe[i] <- SharpeRatio.annualized(___)
}
# Plot weights and Sharpe ratio
plot(___, ___, xlab = "Weights", ylab= "Ann. Sharpe ratio")
abline(v = grid[vsharpe == max(vsharpe)], lty = 3)