制約と目的関数を洗練する
ここでは、制約や目的関数を見直すとパフォーマンスが向上すると仮定します。各資産のリスクへの割合寄与に最小値と最大値を設定するリスクバジェットの目的関数を追加しましょう。先ほど作成したポートフォリオ仕様を基に進めます。これはより複雑な最適化問題のため、グローバルソルバーが必要になります。そこで最適化手法としてランダムポートフォリオを使用します。
この演習はコースの一部です
Rで学ぶ中級ポートフォリオ分析
演習の手順
- 標準偏差でリスクを定義するリスクバジェット目的関数
risk_budgetをport_specに追加します。リスクの最小割合を 5%、最大割合を 10% に設定します。 - 四半期ごとにリバランスして最適化を実行します。学習期間とローリングウィンドウは5年のデータを使用してください。結果を
opt_rebal_rbという変数に代入します。 - ウエイトを可視化します。
- リスクへの構成要素の割合寄与を可視化します。
Return.portfolio()を使ってポートフォリオリターンを計算します。リターンをreturns_rbという変数に代入します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Add a risk budge objective
port_spec <- add.objective(portfolio = ___,
type = ___,
name = ___,
min_prisk = ___,
max_prisk = ___)
# Run the optimization
opt_rebal_rb <- optimize.portfolio.rebalancing(R = ___,
portfolio = ___,
optimize_method = "random", rp = rp,
trace = TRUE,
rebalance_on = ___,
training_period = ___,
rolling_window = ___)
# Chart the weights
# Chart the percentage contribution to risk
chart.RiskBudget(___, match.col = "StdDev", risk.type = ___)
# Compute the portfolio returns
returns_rb <- Return.portfolio(R = ___, weights = ___)
colnames(returns_rb) <- "risk_budget"