1. 学ぶ
  2. /
  3. コース
  4. /
  5. Rで学ぶ中級ポートフォリオ分析

Connected

演習

単一期間の最適化

最適化を実行する関数には、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 通りの組み合わせで生成されています。

指示

100 XP

ポートフォリオ仕様はすでに作成済みで、port_spec という名前が付いています。ワークスペースにはリターン系列 asset_returns も用意されています。

  • 最適化手法に "random" を用い、trace を TRUE に設定して単一期間の最適化を実行し、結果を opt という変数に代入します。
  • 最適化結果を出力(表示)します。