FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

ブートストラップ法によるポートフォリオの最適化

資産運用ではアセット・アローケーション(資産配分)が重要なプロセスだとされています。シストレにおいてもトレード戦略や投資対象を分散することでパフォーマンスを向上させることができるようです。

ロバート・カーバー氏著の「システマティックトレード」では「ブートストラップ法」によるポートフォリオの最適化を推奨しています。著者自身によるサンプルもネット上に公開されているようなのでさっそく試してみました。

f:id:fxborg:20160929012233p:plain

ブートストラップ法によるポートフォリオ最適化

  • 1. 過去のリターンのなかから一部をランダムに選び出す。
    (拡大ウィンドウ or ローリングウインドウ or 全期間 or 最近のデータ)
  • 2.選びだしたリターンの相関と平均を計算する。
  • 3.選びだしたリターンの相関と平均リターンを使って通常の最適化を行う。
  • 4.結果として得られる投資対象ウェートを記録する。
  • 5.1~4を何回も繰り返す。
  • 6.各資産について、計算したすべての投資対象ウェートの平均を取る
    (ウェート足し合わせると100%になるものとする。100%にならなければ、再び正規化を行う必要がある。)

(「システマティックトレード」より引用)

 サンプルプログラムの実行

こちらのファイルを同じフォルダーに配置してください。

  1. optimize.py(サンプルを python3 用に少し修正)
  2. assetprices.csv (日時リターン)

 > python optimisation.py[Enter]

 と入力するだけです。

実行環境

  1. Ubuntu 16.4 LTS 64bit
  2. Python 3.5.2
  3. Anaconda 3-4.1.1

追加パッケージ

  1. matplotlib、pandas-datareader、cvxopt

先程のプログラムを実行すると各投資対象のリターンが表示されます。

f:id:fxborg:20160929012507p:plain

このグラフを閉じると計算が開始されます。

 

▼全期間のデーターを使った通常の最適化

f:id:fxborg:20160929013523p:plain

SP500:0.330931、NASDAQ:0.0、US20:0.669069

▼ブートストラップ法(全期間よりサンプリング)

f:id:fxborg:20160929014442p:plain


▼ローリングウインドウで通常の最適化

f:id:fxborg:20160929014714p:plain

 

▼拡大ウインドウで通常の最適化

f:id:fxborg:20160929014914p:plain

 

▼ブートストラップ法(拡大ウインドウ)

f:id:fxborg:20160929015112p:plain

最後に

「 システマティックトレード」に出てくるポートフォリオ最適化技法を試してみました。著者のロバート・カーバー氏はイギリスの大手ヘッジファンドであるAHLにいた方で、Pythonベースのトレード・フレームワークも作られています。その他には、HFTにブートストラップ法を組み入れている方もいらっしゃるようです。

GitHub - schalekamp/High-Frequency-Trading-Model-with-IB: A high-frequency trading model using Interactive Brokers API with pairs and mean-reversion in Python

これらの方法をしっかり身につけたいと思います。