yoraba build

備忘録を兼ねた技術ブログ

テクニカル分析とRNN解析

方針

投資予測の手段として、テクニカル分析が多く使われますが、 どの分析が効果的かを検証するのは非常に難しく、多大な時間を割くことになります。 人為的に行う作業が多くを占めているため、拘束時間が長くなります。 出来ることなら、自動化を進めていきたいという着想から、機械学習との組み合わせを模索しています。

アプローチ

目的変数として考えられるものとしては、価格の高低、トレンド、ボラティリティなどがありますが、 一番シンプルなものとしては価格の高低となります。他は、評価基準の策定が難しく、課題が多いため、後回しにしようと思っています。 まず、価格の高低をデータとしてどのように表現するか考えます。 RNNの前処理として、全てのデータを正規化するため、0から1の範囲に収まります。 そこでシンプルに、前回より上がれば1、下がれば0、変わらなければ0.5という正解データを作れば、確率的なアプローチが出来るのではないかと考えました。 予測データは0から1の実数値になりますが、0.5をボーダーとし、それを超えていれば上昇、それを下回っていれば下降と判断することにします。 f:id:yoraba:20191123212744p:plain

入力データの作成

  • 価格データを元としたテクニカル分析データを連結します。
  • 全てのデータを正規化します。
  • 前回の値と比較し、上昇しているなら1、下降しているなら0、変わっていないなら0.5というフラグデータを全ての列に対応する形で作成して連結します。
  • RNNに渡す時系列データとするにあたって、1セット辺りどれくらいの時間を遡るか決めて、データ整形を行います。(データ件数, 遡る数, 特徴量数)という形のデータになります。遡る数はwindow sizeと呼称しています。

f:id:yoraba:20191123215141p:plain

多変量RNN

特徴量が多量になるため、RNNで分析する際にかかる特徴量全てに対して回帰分析を行います。 予測の結果として取得したい特徴量が一つの値だけであったとしても、それに関連する指標の予測も同時に行うことによって、 精度があがることを期待できます。

f:id:yoraba:20191123215430p:plain

総括

価格高低特徴量の正解率は7割前後でした、もっと精度を上げないと実用に耐えないと思われます。

f:id:yoraba:20191123220518p:plain

0.7以上を上昇、0.3以下を下降、それ以外のデータを無視という形でフィルタリングを行うと精度が上がりました。 特徴量の組み合わせによっては9割程の正解率を出すことが出来ました。