単一期間の最適化
最適化を実行する関数には、optimize.portfolio() と optimize.portfolio.rebalancing() の2つがあります。本演習では単一期間の最適化に焦点を当て、次の演習で定期的なリバランスを伴う最適化に optimize.portfolio.rebalancing() を使います。optimize.portfolio() は単一期間の最適化をサポートします。主な引数は、資産リターンを指定する R、ポートフォリオ仕様オブジェクトを指定する portfolio、そして問題を解くための最適化手法を指定する optimize_method です。多くの場合、各イテレーション/試行ごとの追加情報を保存するために trace = TRUE を指定すると便利です。
利用可能な最適化手法は次のとおりです。
DEoptim: 差分進化法random: ランダム・ポートフォリオGenSA: 一般化焼きなまし法pso: 粒子群最適化ROI: 線形・二次計画ソルバー向けの R Optimization Infrastructure
選択する最適化手法は、解こうとしている問題の種類に基づいて決める必要があります。例えば、二次計画として定式化できる問題は二次計画ソルバーで解くべきであり、非凸問題は DEoptim のようなグローバルソルバーで解くべきです。
この演習では、完全投資かつロングのみという制約のもと、平均リターンを最大化し、ポートフォリオの標準偏差を最小化する最適化問題を定義します。さらに、標準偏差のリスクバジェットとして、最小割合リスクを 5%、最大割合リスクを 10% に設定します。リスクバジェットの目的はグローバルソルバーを必要とするため、ここではランダム・ポートフォリオを用いて問題を解きます。ランダム・ポートフォリオ集合 rp は、この演習のために 500 通りの組み合わせで生成されています。
この演習はコースの一部です
Rで学ぶ中級ポートフォリオ分析
演習の手順
ポートフォリオ仕様はすでに作成済みで、port_spec という名前が付いています。ワークスペースにはリターン系列 asset_returns も用意されています。
- 最適化手法に
"random"を用い、traceをTRUEに設定して単一期間の最適化を実行し、結果をoptという変数に代入します。 - 最適化結果を出力(表示)します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Run a single period optimization using random portfolios as the optimization method
opt <- optimize.portfolio(R = ___, portfolio = ___, optimize_method = ___, rp = rp, trace = TRUE)
# Print the output of the single-period optimization