見出し画像

テクニカル指標をごちゃっと混ぜて株価予測

「安く買って高く売りたい」
世の中には、株などの金融商品をいつ買えばいいかというのは、
誰しもが知りたいことでありまして、江戸時代の格言から最新のDeep Learningを使った研究まで尽きることはありません。

有名どころでは、例えば「移動平均線」というものを見て、長期の移動平均線を短期の移動平均線が横切ったら「ゴールデンクロス」と言って「買い」だとするものや、RSIといった「買われすぎたり売られすぎた株価は戻ってくる」事を前提に、行き過ぎた銘柄を売買するものもあります。
今あげた2つはテクニカル指標と呼ばれる「過去の価格を元に未来の価格を予想しようぜ」というものです。この種の指標は、30種類以上あるようで、当然ある指標は「絶好の買い場」と言ってる横で、違う指標が「速攻売るべし」とのたまい、結局何もできないみたいな、何なんだという気持ちになります。

今回試してみたいのは、このようなテクニカル指標をまとめて機械学習に突っ込んだらイイ感じで予測できるんじゃないかという話です。早速調べると、参考にできるものがいくつかありました。

早速やってみましたので説明します。

入力データ

データは、日経平均の日足データを使用します。1984年1月から2018年11月現在までの34年間分、およそ9000個のデータになります。

このデータから機械学習に使う入力データを作成していきます。今回は上記の表にあるような8個の入力データを作成しました。移動平均で短期・長期のトレンドを把握しつつ、標準偏差・RSI・Williams%Rといったオシレーター指標で買われすぎ・売られすぎを把握するといったところです。

予測モデル

今回は、過去のデータを元に「次の日の価格が上昇するか下降するか」を予測しようと思います。使用するモデルは多層パーセプトロンと呼ばれるニューラルネットワークです。色々な手法がありますが、まずはベースとなる手順を確立する目的もありますので比較的単純なところからスタートしようと思います。

先ほどの8種類の入力項目をインプットレイヤーに、隠れ層が2層あって最終的に1種類のアウトプット(次の日価格が上昇するか下降するか)が出るようになっています。

なお、計算プログラムは、kerasという深層学習ライブラリを使いました。

予測結果

結果です。まあ残念ながらほぼほぼ勘で予測するのと変わらないような形となりました。Accuracy(正解率)というのは「価格が上がるものを上がると予想し、価格が上がらないものを上がらない」と予想できる割合を指します。0.51ですからほぼ半分の確率で正解してますという話でサイコロ振るようなものですね。

Precision(適合率)は、「上がると判断した中で実際に株価が上がったもの」の割合を表します。
一方、Recall(再現率)は、「実際株価が上がった事象の中で予測も上がると判断したもの」の割合になります。

Precisionが低いと上がると思ったら下がって損をする可能性が高いし、
Recallが低いと本当は上がるとこだったのに機会をとり逃すことになる確率が高いということになりますでしょうか。

このPrecisionとRecallは、閾値、つまりスコアがいくつ以上なら「株価が上がる」と予測したことにするかという値を上下させることにより変化します。
閾値を下げていくとRecallは上がっていき、Precisionは下がりますね。
閾値にかかわらずモデルの良し悪しを判断したいとなったときは、ROC Curveというものが使われます。

出すまでもなく、カーブにすらなってません。。。

株価予測の論文などを読んでいると、最大で0.7あたりまではAccuracyがいくみたいなので、試行錯誤が必要だというのはわかりました。

シミュレーション

上記の予測に従って、実際の株価を売買したらいくら儲かるのかというのをシミュレーションしています。まあいい結果は出ないこと間違いないですが・・・。

初期資金額は1千万円として、上記予測のテストデータセットを使用します。なので2011年8月28日から2018年11月22日まで、日次でトレードします。

最終的に株式市場で利益を上げるためには、株価の予測と同じくらい「どう買って、どう売るか」という売買ルールが重要になります。100%の確率で明日の価格を予測することは不可能ですから、予測が外れたときにどうリスクを最小限にするかというところが肝になってきます。なので、株価の予測精度を上げることと同じくらいどのようにトレードするかという手法の検証も今後がんばってやっていきたいと思います。

さて、今回は最初なので単純なルールでやってみましょう。ルールは、「当日の終値で"次の日の価格が上昇する"と予測された株を全資産つぎこんで購入し、次の日の終値で全ポジションを売却する」です。手数料は一旦0円とします。

インデックスに遠く及ばずです。
累積損益は7年で160%増。結構いい気がしますが、日経平均のETFでも買ってぼーっとしてれば2.5倍弱まであがってるんですね。最大のドローダウンは24%なので、このシステムを使うならば、全財産の1/4が消えてなくなることは覚悟しろということになります。

まとめ

まずは、単純な多層パーセプトロンを使った機械学習で日経平均のデータを学習し、ほぼほぼランダムに近い予測精度が出ることを確認しました。さらにその予測システムを用いて、単純な売買ルールにのっとり売買を繰り返したところ売買結果は出すことができました。
次は、LSTMを使った機械学習を行ってみたいと思います。

ソースコード


この記事が気に入ったらサポートをしてみませんか?