平均・分散モデルにおけるポートフォリオ最適化問題は「ポートフォリオの期待収益率が投資家の要求する期待収益率以上であるという制約のもとで、ポートフォリオの収益率の分散を最小化する投資比率を求める」2次計画問題として定式化されます。
最小化:
制約条件:
ここで、
![]() |
: 資産数 |
![]() |
: ポートフォリオの収益率の分散 |
![]() |
: 資産 ![]() ![]() |
![]() |
: 資産 ![]() |
![]() |
: 資産 ![]() ![]() |
![]() |
: 資産 ![]() |
![]() |
: ポートフォリオの期待収益率 |
![]() |
: 資産 ![]() |
![]() |
: 投資家の要求期待収益率 |
です。
参考文献
[1] 枇々木規雄,金融工学と最適化,朝倉書店,2001.
Fortran の Example プログラム
ここでは、nAG Fortran Library の E04NFF ルーチン (2次計画問題を解くルーチン)を用いて、ポートフォリオ最適化問題を解く Fortran の Example プログラムを紹介します。
今回のポートフォリオ最適化問題では、以下の QP1 タイプの目的関数を最小化します。
(特に、対称行列 に分散共分散行列を設定します。)
QP1: | ![]() |
本 Example プログラムは、日経 225 の過去のデータを用いて、ポートフォリオ最適化の計算を行います。
データは以下の論文のテスト問題の一つで、
OR–Library: http://people.brunel.ac.uk/~mastjjb/jeb/orlib/portinfo.html
に公開されている port5.txt を用いています。
"Heuristics for cardinality constrained portfolio optimisation"
Comp. & Opns. Res. 27 (2000) 1271-1302
このデータ(port5.txt)には以下の値が含まれています。
- 資産数
- 各資産の収益率の平均(期待収益率)と標準偏差
- 資産間の収益率の相関係数
本 Example プログラムは、投資家の要求期待収益率 = 0.25%(0.0025)を入力パラメーターとして計算を行い、結果を出力します。
※ この投資比率の棒グラフは、Example プログラムの計算結果を元に Excel で作成したものになります。
本 Example プログラムをご利用いただくには、Fortran コンパイラ、および、そのコンパイラに対応した nAG Fortran Library が必要です。
ここでは Windows 環境を想定し、以下の2つの製品を用いた Example プログラムの利用例(手順 ① ~ ⑤)を紹介します。
-
Fortran Builder 6.1
(nAG Fortran Compiler 6.1 for Windows) -
FLW6I25DCL
(nAG Fortran Library, Mark 25 for Windows 64-bit)
※ 上記2製品を既にお持ちの方は、下記の手順 ① と ② は必要ありません。
① 製品のダウンロードとインストール
以下の2つの製品のインストーラーをダウンロードして、インストールを行ってください。
Fortran Builder 6.1 インストーラー:
setup_fb610.exe (321 MB)
FLW6I25DCL インストーラー:
flw6i25dcl_setup.exe (316 MB)
※ ダウンロードした exe ファイルをダブルクリックするとインストーラーが起動します。
② 製品トライアルの申し込み
製品のご利用にはトライアルライセンスキーが必要です。
以下のウェブページから製品トライアルの申し込みを行ってください。
ご記入のメールアドレス宛てに、通常1営業日以内に、本製品を4週間ご利用いただけるトライアルライセンスキー(ライセンスファイル)をお送りいたします。
送られてきたライセンスファイルを、ユーザーフォルダー C:¥Users¥[ユーザー名] の直下に置いてください。
③ Example プログラムのダウンロード
以下の Example プログラムをダウンロードして、解凍してください。
mean_variance_portfolio_optimisation.zip (229 KB)
解凍したフォルダーの中に、以下のファイルが入っています。
- mean_variance_portfolio_optimisation.f90(ソースファイル)
- mean_variance_portfolio_optimisation.fbp(Fortran Builder プロジェクトファイル)
- port1.txt ~ port5.txt(データファイル)
④ Example プログラムの起動
mean_variance_portfolio_optimisation.fbp をダブルクリックしてください。
Fortran Builder が起動し、Example プログラムが表示されます。
⑤ Example プログラムの実行
Fortran Builder のメニューバー「実行 > 実行」を選択してください。
ビルド(コンパイル・リンク)が行われた後、プログラムが実行されます。
※ 補足:nAG Fortran Library のリンクについて
Fortran Builder のメニューバー「プロジェクト > プロジェクトの設定」を開くと、下方の「nAG Fortran Library を利用する」にチェックが入っていることが確認できます。
この項目にチェックを入れると、インストールされている nAG Fortran Library ルーチンを Fortran Builder から利用できるようになります。(インストールされている nAG Fortran Library を裏で自動的にリンクします。)
※ 補足:nAG Fortran Library のマニュアルについて
nAG Fortran Library のマニュアル(ライブラリマニュアル)を、Fortran Builder のメニューバー「ヘルプ > nAG Fortran Library ヘルプ」から開くことができます。
ライブラリマニュアルでは、ご利用のルーチンの詳細(引数の仕様など)を調べることができます。
なお、ライブラリマニュアルは nAG のウェブサイトでもご覧いただけます。
http://www.nag.com/numeric/fl/nagdoc_fl25/html/frontmatter/manconts.html