コンピュータで為替変動を予測する

nfx

タイトルの通り。まずは結果から。
nfx

昔から、ニューラルネットに為替変動覚えさせたら結構高い精度で予測できんじゃね?この発想と着眼点、俺天才じゃね?・・・と思っていたのだが、別にその業界では普通にみんなやってることらしく、特に物珍しい事でもないらしい。ざっと検索しても山の様に論文や解説記事が出てる。

みんなやってるんだったら俺にも出来るんじゃね!?と思ってやった。それが上記の図。

上記の図の詳細を述べる。

  • X軸がある日を起源とする1日単位の時系列
  • Y軸がUSD/JPYの為替レート(終値)
  • 系列Rが実際の為替レート
  • 系列C、Cs、Clongがそれぞれコンピュータ上で予測した為替レート
  • 起源から500日目まではニューラルネットの学習データとして使用
  • 501日目から1000日目までは500日目までの学習データを元にした予測
  • 予測は過去数日のデータから1日後の終値のみを予測する

簡単に言うと、500日目までは重なっていて当然のデータ。500日目以降が重要。500日目~800日目はかなり高精度で合致している。今回のモデルでは、過去数日から次の日の終値を予測しているだけなので、かなり高精度で合致しているように見えるが、300日後の為替レートまで一気に分かる訳ではない。ほぼ一年後まで為替レートがこんなに高精度で分かったら俺はこんな暮らしをしていない。

でも。それでもここまで綺麗に合致するのはすごくないかな。

系列Cは、過去数日の始値、終値、高値、安値を元に予測したデータ。系列Csは過去数日の終値のみから予測したデータ。系列CとCsがほとんど同じ値であるのが興味深い。直近の変動を分岐するのにローソク足チャートはあんまり意味が無いということ?

また、800日あたりから急激に予測がずれて行っている、しかし波形はすごく似ているというのも興味深い。この辺りは、2010年の6~7月あたり。この辺りで、今までの為替変動を生じさせる要因とは別種の要因が効いているのかな・・・。この辺りになんかあったっけ?と思って調べて見たけど、大したニュースは無かった。なんだろ。

と、書いてて思い出した。これはデータを85~125で正規化しているので、85円以下に下がるわけがないんですね。単純にプログラムのミスです。

ちなみに、Clongは500日目までの学習データを元に算出した次の日の終値を、入力にフィードバックし、それを繰り返していくことで500日目時点までのデータで長期的な予測を立てようとやってみた例。しかし、2日程度で値が大きく振動し始め、まったく意味のないデータになってしまった。まあ大きく乖離するだろうなとは思ったが、ここまで意味のないデータが出てくるのはおかしい気がする。もしかしたらプログラムが間違っているかもしれない。

もしこれを、未来n日後のデータを予測できるようにするとなると、2パターンの方法が考えられる。

  • 出力をn次元ベクトルとする。教師信号もn次元のベクトルを与える
  • 教師信号としてn日後のデータを与える

前者は教師信号の情報量が多い分、エラーレートが低くなりそうだ。でも収束しなそう。後者は収束しやすそうだが、あまり正確でないデータが出てきそう。

まだ全然実用に耐えるレベルではないけど、これ、気長に取り組んでいけばそこそこ良い結果が出るんじゃないですかね。
まあ、これ使って自分でFXやるよりも、このソフトを売った方が儲かるかも・・・。