Hack for Trade

トレーディング素人のエンジニアがフルスクラッチでシストレツールを開発・運用する予定のブログです。

米国株式ファクターリターンの再現性の検証(2)

ARIMAモデルで生成した予測情報係数によるトレード戦略スイッチングモデルを実験した。

なぜ

前回の実験において、ファクターリターンの再現性について検証しましたが、実際にどの程度改善されるのかを明記していませんでした。今回は前回の手法で得られるARIMAモデルによる予測情報係数(=IC)とベースラインとの比較を実際にポートフォリオに落とし込んでみて、どの程度の影響があるのかを可視化してみたいと思います。

調査方法

今回は日次の情報係数の移動平均、前回の実験で検証したARIMAモデルによる日次ウォークフォワード予測情報係数の移動平均の2つのパターンで2つのトレード戦略のスイッチングモデルを構築します。この2つのスイッチングモデルのリターン及びシャープレシオを確認することで、実際にどれくらいの効果があるのかを検証してみます。利用するトレード戦略は(1)SPY buy-and-holdと(2)上記情報係数のもととなったファクターのマーケットニュートラル戦略です。

前回は月次情報係数を利用していましたが今回はより詳細な分布を見たかったので日次にて。また、単純化のためにこのモデルにおいては取引コストは考慮しないこととします。

結果

日次の情報係数の移動平均ARIMAモデルによるウォークフォワード予測情報係数の移動平均自体を見てみます。MAEベースで単純なMAと比較して6.5%程度の改善。(青いラインの方がARIMA MAモデル)

f:id:yss44:20171116125721p:plain

続いて上記の2つのパターンにおけるスイッチングモデルのPLを見ます。単純な情報係数移動平均を用いたモデルも良いパフォーマンスを発揮していますが、予測情報係数を利用したスイッチングモデルは圧倒していますね。

f:id:yss44:20171116125841p:plain

f:id:yss44:20171116125851p:plain

考察

  • MAE,ポートフォリオパフォーマンスともに予測情報係数をもとにしたスイッチングモデルがアウトパフォームした。
    • 意図したとおりスイッチングモデルがアウトパフォームしてほっと一息
  • 取引コスト、スイッチングコストを考慮するとどうなるか
  • 今回はいくつかのファクターでテストしてみたが、その他のファクターでも同様の傾向がみられるのか。
  • 移動平均ウィンドウ、予測情報係数の閾値の2つのハイパーパラメータをどう扱うべきか悩ましい。
  • そろそろ複数ファクターポートフォリオ間でのスイッチング/リバランスモデルを試したい。

以上。

米国株式ファクターリターンの再現性の検証(1)

1## なぜ

先読みバイアスを最小化した上で、各時点における最適なファクター選択を行うための事前調査を目的としています。

ファクター投資において、特定のユニバースに置ける株式のリターンとファクターとの間の相関は情報係数(=IC)と呼ばれていて、利益の源泉となっています。一般的にファクターとリターンとの相関が高いほど利益も大きくなります。

ここで問題になってくるのが、あるt期において選択したファクターがt+1期においても同様の傾向を継続するのか否かです。もしもそのような傾向が見られないのであれば、どんなに素晴らしい最適化手法でファクターを選択したとしても次の期には効かなくなっているということです。つまり、ファクターとリターンとの相関関係の継続性がなければこのファクター投資戦略は成り立ちませんが、継続性が存在するのであれば各時点に置ける最適なファクターを選択することができる可能性があります。

ということで、

  1. ファクターとリターンとの間に相関関係の持続性、つまり自己相関は存在しているのか
  2. 自己相関が存在しているとするならば、次の期の傾向を予測することは可能なのか

について、調査してみました。

調査方法

ある条件で絞り込んだ米国株のユニバースにおける、あるファクターの2012年~月次のリターンとの順位相関係数の時系列データに対して自己相関検定、およびARIMAモデルを用いてのシンプルなモデリングを試してみました。

結果

原系列データ

月次の相関係数のデータはこのような形になってます。通期での平均ICは-0.027。

f:id:yss44:20171027151153p:plain

調査結果

自己相関プロット

ACF, PACFについてのプロット。3期前のデータと5%有意水準で有意に自己相関している様子。

f:id:yss44:20171027151208p:plain

ARIMAモデリング

AICをターゲットにしてフィッティングを行った結果。選択された次数は(3,1,1)。それなりに妥当な結果が出ているのではないかと思う。残差が正規分布から若干外れているようにみえるのが、有意水準5%で正規分布検定をpass。また有意な自己相関も残っていない模様。

                             ARIMA Model Results                              
==============================================================================
Dep. Variable:                    D.y   No. Observations:                   67
Model:                 ARIMA(3, 1, 1)   Log Likelihood                 124.950
Method:                       css-mle   S.D. of innovations              0.037
Date:                Fri, 27 Oct 2017   AIC                           -239.900
Time:                        05:37:54   BIC                           -228.877
Sample:                             1   HQIC                          -235.538
                                                                              
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1.D.y      0.0923      0.123      0.748      0.457      -0.150       0.334
ar.L2.D.y      0.1721      0.122      1.415      0.162      -0.066       0.411
ar.L3.D.y      0.2431      0.125      1.952      0.055      -0.001       0.487
ma.L1.D.y     -1.0000      0.407     -2.454      0.017      -1.799      -0.201
                                    Roots                                    
=============================================================================
                 Real           Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
AR.1            1.3304           -0.0000j            1.3304           -0.0000
AR.2           -1.0192           -1.4328j            1.7584           -0.3484
AR.3           -1.0192           +1.4328j            1.7584            0.3484
MA.1            1.0000           +0.0000j            1.0000            0.0000
-----------------------------------------------------------------------------
  • 残差の分布

f:id:yss44:20171027151232p:plain

  • 残差の自己相関

f:id:yss44:20171027151240p:plain

ウォークフォワード予測

ARIMAモデルをウォークフォワードで次数フィッティング&予測した結果。比較的良好に相関関係の遷移を推定できているのではないかと見える。

f:id:yss44:20171027151258p:plain

結論

  • ファクターとリターンの相関時系列データには自己相関の成立するものもある。
  • ARIMAモデリングを利用してモデル化及び予測を行うことができた。
    • より複雑なモデリングを行いたい。VARモデルを用いて複数のファクター間での相関の遷移をおったりすると面白いかも。
    • 各種機械学習アルゴリズムも試してみる価値がある。
  • オンラインでファクター選択を行うことが可能であるという仮説を補強する結果が得られた。

あとがき

最近はずっと米国株のファクター投資について研究していましたが、面白い発見をしたなと思ったので久しぶりにブログを書きました。毎回言ってる気がしますが、頻度増やしていきたいですね。

おかしい点があればコメントいただけると幸いです。

為替における曜日 / 時間別のボラティリティアノマリー

最近1時間足モデルのバックテストの結果を見ているとどうにも、急激なプライススパイクによってロスを出している部分が見えていたので曜日/時間別のプライススパイクについて可視化してみました。

検証方法

2007~2016年までの10年分/7通貨ペアにて、1時間足での価格変化率上位1000件を曜日/時間別にプロットしています。

結論

f:id:yss44:20170725123844p:plain

タイムゾーンはAmerica/New_Yorkです。金曜日の8時の時間帯にすべての通貨ペアで頻度が高いですね。US雇用統計等のイベントによって価格が大きく動く事が多いためでしょうね。見事に可視化されて面白いです。

今までマーケットイベント関連の情報はモデルへの入力として使用していませんでしたが、入力データとして入れて見る価値がありそうです。以上。

AUDUSD&USDJPYが最強? - どの通貨ペアを使ってポートフォリオを組むべきか

予測精度が良いモデルを組めたとして、どの通貨ペアを使ってポートフォリオを組むべきなのか?はポートフォリオ全体としてのリスクを減らして安定運用するために非常に重要な問題です。通貨ペア間の間には様々な関連性があり、良い通貨ペアを選択することは難しい問題だと思っています。今回は、暴落暴騰時の通貨ペア間の相関性という観点から好ましい通貨ペアを見つけるという試みを試してみようと思います。

仮説

暴落・暴騰時に影響を受けにくい(=相関性の低い)通貨ペアをポートフォリオとして組むことにより、ポートフォリオの安定性は向上するはず。

検証方法

今回は、暴落・暴騰時の相関性の低い通貨ペアを探すことにのみフォーカスします。検証する通貨ペアは手元にデータのある6ペアAUDJPY, AUDUSD, EURJPY, GBPJPY, GBPUSD, USDJPY, 時間軸は1時間足。検証期間は2007~2017年の10年間です。各通貨ペアにおいて、0.0001, 0.001, 0.01, 0.1パーセンタイル以上の値動きの幅(abs(Close(t) - Close(t-1)))のときの他の通貨ペアとの相関を見ます。

  • 実際に発見した通貨ペアでのポートフォリオを組んでバックテストを走らせた上でシャープレシオの比較を行うことができればベストなのですが、僕はまだ安定して利益の出るモデルを組めてないので今回は省略します。悲しい。

前提

各通貨ペアのボラティリティがどのようなものになっているかプロットしておきます。window=9のヒストリカル・ボラティリティの1ヶ月平均のはこのようになっています。

Pair Avg.Volatility
AUDJPY 0.137
AUDUSD 0.110
EURJPY 0.104
GBPJPY 0.110
GBPUSD 0.077
USDJPY 0.085

時系列で見ると

Kobito.ABzcps.png

ヒストグラムはこちら

Kobito.4A00Pz.png

結果

at/通貨ペアのカラムが暴落・暴騰しているペア、各行がその時の他の通貨ペアという表示になっています。非常に面白い結果が見えたなと思いますがいかがでしょうか?

threshold = 0.1

Kobito.6iOO3D.png

AUDJPY & GBPUSD, AUDUSD & USDJPY, USDJPY & GBPUSDがとても良さそうなペアですね。

threshold = 0.01

Kobito.1C44sU.png AUDUSD & USDJPY, USDJPY & GBPUSD は続けて好調。一方AUDJPY & GBPUSDの相関性は比較的大きくなってます。

threshold = 0.001

Kobito.oGy7v9.png AUDUSD & USDJPY, USDJPY & GBPUSDは続けて好調。他の通貨ペアは軒並み相関係数0.8超えているものが多いですね。

threshold = 0.0001

Kobito.Qje142.png サンプル数がかなり少ないのでアレですが参考までに。AUDUSD & USDJPYは続けて好調。USDJPY & GBPUSDも比較的良さそうですね。ただし、USDJPYが暴落暴騰した際にはすべての通貨ペアが高い相関を持っています。

結論

AUDUSD & USDJPYペアが最も安定して相関が低く良いポートフォリオを組めるのではないか。という結果になりました。次点でAUDJPY & GBPUSD, AUDUSD & USDJPYのペアでしょうか。

Appendix 1

参考までにUSDJPYの暴騰暴落時の他の通貨ペアとの相関の様子をプロット+回帰したものをこちらに。

threshold=0.1

f:id:yss44:20170427123725p:plain

threshold=0.01

f:id:yss44:20170427123810p:plain

threshold=0.001

f:id:yss44:20170427123835p:plain

threshold=0.0001

f:id:yss44:20170427123853p:plain

Appendix 2

最近はずっとトレンド推定用のDeepLearningモデルの構築をしていて気がついたら全然ブログを書けてなかった。現在開発しているモデルは1時間後のトレンドを70-75%の精度で予測してくれるのですが、トレンドの推定だけでは勝てないのがまた面白いところ。つらい。別の切り口からモデルの再構築をしています。その話もいずれ記事にしたいところですね。

移動平均乖離率インジケータとして優秀なの?リターンの相関関係について調べてみたよ。

今回はUSDJPYの移動平均乖離率とリターンとの関係性について調べて見ました。移動平均乖離率はうまく機能するとの文面を見受けましたが、実際にどれくらい機能しているものなのかよくわからないサイトが多く見受けられたので、実際にどんなものになるのか試して見ました。

使用したデータは前回と同様histdata.comから。

仮説

移動平均乖離率が有効に機能しているならば、N期間後のリターンとの間に何らかの相関関係が存在しているはず。因果関係があると言えるかはまた別の問題となりますが、まずは取っ掛かりとしては十分でしょう。 定常的な相関関係になってはいないはず。そんな簡単に定常的な相関になっていたら予測なんてもっと簡単にできてるはずだよね。

検証方法

年(2014-2016)、タイムフレーム(10Min-1D)、移動平均期間(5-200)、リターン計測期間(1-100)、の4項目(計4284)で相関係数を算出してみました。

結果

興味深い結果になりました。年によって大きく相関のトレンドが変わっているみたいですね。2014, 2016年は負の相関関係、2015年度は性の相関関係の年だったようですね。

相関分布図 2014-2016/USDJPY/1Hour

青=2016, 赤=2015, 緑=2014年になります。年に酔って大きく相関の方向性が変わっていることがよくわかりますね。

Kobito.WErWQU.png

相関分布図 2016/USDJPY/10Min,15Min,30Min

10Min=赤, 15Min=緑, 30Min=青

Kobito.tPv5OE.png 15-25の移動平均期間、リターン計測期間あたりに負の相関が強そうな箇所が散見されますね。

相関分布図 2016/USDJPY/1H,3H,6H

1H=赤, 3H=緑, 6H=青

Kobito.o0avtd.png

6Hの外れ値は計測期間がタイムフレームに対して短すぎたための結果ですかね。全体的に見にくくなってはいますが、長期のリターン計測期間ほど、負の相関関係になっている傾向がありますね。

考察

  • 相関の強い期間、弱い期間が時期、移動平均期間、リターン計測期間によって分布している。
  • 同一時期でも、移動平均期間やリターン計測期間によっては相関が逆になる場所も存在している。
  • 期間によって相関の方向や、強さが大きく変化しているのでマーケットの特徴をよく表してくれているような気がします。単体では全く使い物にならないので、他のインジケータと組み合わせて使いましょう。

以上。

あとがき

先週末に、予測性能が90%以上出るモデルができて、未来の値の先読みをしているバグを見つけるために2,3時間費やしました。辛い。jupyter notebookで気軽に書いているとたまにこういうことになって、ユニットテストの大切さが身にしみます。

AutoEncoderで次元圧縮して、K-Meansで分類して勝てるマーケットを探すみたいなことをしていたのですが、あまり成果はよくありませんでした。取引機会の~2%で56%で予測できるはできるモデルができた気がしたのですが、あまりにも取引頻度が少なすぎたのでウォークスルーテスト走らせる前に一度断念して、迷走中です。

そのことについてもブログ書きたいなと思いつつ。