変更履歴
2016/8/14 : 三手法のシグナルを合成した場合の結果を追加。
2016/8/14 : 勝率を追加。
概要
前回(Deep Learningを使用して日経平均を予測するというよくある話を試してみた)で、前日の日経平均株価構成銘柄のリターンを使用して、次の日の日経平均株価の上昇、下降を予測してみました。今回はとりあえず運用バックテスト編ということで、予測したリターンを使用して実際に運用したらどうなるか、をシミュレーションしてみました。
ディスクレーマー
前回も記載した通り、本手法を使って実際に運用した場合の損害等々について私は全くもって責任を負いません。
運用前提
本来的には手数料とか売買できる時間、売買回転等を考える必要があるのですが、今回は簡単に「前日の終値時点で予測を行い、瞬間的に売買判断をして、瞬間的に日経平均が買える、または売れる」というなんとも非現実的な前提をおきます。(え、計算が面倒だからじゃないよ?)
まとめると以下のようになります。
- 何もポジションを持っていない状態で「上昇」予測の場合、「買い」
- ポジションを持っている状態で「上昇」予測の場合、ホールド
- ポジションを持っている状態で「下降」予測の場合、ポジション解消
- 何もポジテョンを持っていない状態で「下降」予測の場合、何もしない
前回の結果
前回の結果は以下のようになっていました。ランダムフォレスト、多層パーセプトロン(MLP)、畳み込みニューラルネットワーク(CNN)の三手法を試しました。
- ランダムフォレスト
- 多層パーセプトロン(MLP)
- 畳み込みニューラルネットワーク
AUC的に見ると、CNN > MLP > RFの順番。
運用バックテスト
バックテスト期間は2008年から直近までのデイリーで行います。
最初を1000として、それぞれインデックス化しています。(左軸)
また、対日経平均インデックスに対する差分も表示しています。(右軸)
RFシミュレーション結果
MLPシミュレーション結果
CNNシミュレーション結果
三手法比較
CNN,MLP,RFの合成シグナルによる結果(2016/08/14追加)
CNNがモデルの性能としてはまぁ一番いいので、これを軸にしてRFとMLPを合成してみます。条件式としては
signal = (CNNのシグナル) & (RFのシグナル | MLPのシグナル)
みたいな感じ。つまり、CNNが上がると言っいて、かつ他の二つのモデルのどちらかも上がると言っている場合だけ最終シグナルを上がると判定します。
各種統計量(2016/8/14追加)
RF | MLP | CNN | 合成 | 日経 | |
---|---|---|---|---|---|
年率リターン(%) | 5.6% | 8.1% | 9.2% | 11.7% | 1.5% |
年率標準偏差(%) | 20.1% | 20.5% | 19.9% | 18.6% | 27.2% |
リスクリターン | 0.277 | 0.395 | 0.461 | 0.628 | 0.054 |
累積勝率 | 54% | 55% | 54% | 56% | 52% |
結果としては、合成 > CNN > MLP > RF (リスクリターンでみた場合)となりました。
日経平均をLongHoldしていても52%勝ちということなので、この期間上昇・下降は若干上昇トレンドに寄っているようです。ただ、その中でも全手法がそれに勝っている状態で、合成については56%と結構いい数字。
まとめ
- バックテストの期間を変えたら変わるかもしれないが、性能としてはCNNが一番よさそう。
- AUCの順序性と同じリスクリターン結果になったので、もしかするとAUCをあげられるのであれば運用結果は良くなる可能性はある。
- CNNはリーマンショックの下落局面を早急に察知して回避し、アベノミクスの波に乗っているものの、昨今の情勢に関しては性能はイマイチ。
- リターンの大きな局面、逆にマイナスが大きな局面での振る舞いを見てみると面白いかもしれない。
- 合成シグナルはちょっと事後的な匂いもするが、仮に実運用するとしても複数のモデルがあったほうがいいでしょう。(エヴァのマギ的な)