post Image
FXトレードシステム(機械学習)開発

機械学習で「勝てるFXトレード」ができるのかを実践してみたいと思い、頭で考えるだけでは整理できなそうなのでメモしていきたいと思います。

※このメモの内容を元にFXトレードを実践した結果については、筆者は一切の責任を負いません。

・機械学習の方法については「この講座」「この書籍」で学んだ方法をアレンジしながら作っています。

※どのような技術を用いているのかは書いていきたいと思いますが、投資関連のプログラムは、不正な利用(公開されているプログラムの内容を利用して勝手に販売するなど)の可能性があるため、ソースコードは公開していません。


利用しているプログラム言語・フレームワークなど

プログラム言語は、データ分析用途で用いられることの多い「Python」を利用し、

機械学習フレームワークは「Tensorflow」を利用しています。

機械学習の手法は「リカレントニューラルネットワーク(RNN)」を利用し、為替データは、2010年3月中旬からの「終値」をベースとしているため、LSTM(Long Short Tem memory)を利用し長期時間依存性を考慮した予測を行っています。


日々の予測のワークフロー

  1. 為替相場は24時間変動しているため、利用している証券会社の終値(Bid)の値を元に学習データを作成。

  2. Tensorflowで次の日の終値が「上がる or 下がる」を予測

という非常にシンプルな手順です。

実際に試してみたところ、勝率が高いからといって、収益が必ずプラスになるとは限らないことがわかりました。

例えば、2017年の年末の相場を見てみると、

日付

終値

予測結果

収益(1万通貨を取引)

2017/12/29

112.682

✖️

-3890

2017/12/28

112.867



1850

2017/12/27

113.332



4650

2017/12/26

113.22



1120

2017/12/25

113.29



700

2017/12/22

113.323



330

2017/12/21

113.31

✖️

-130

2017/12/20

113.376



660

2017/12/19

112.884

✖️

-4920

2017/12/18

112.538

✖️

-3460

という予測結果と収支でしたが、12月18日〜29日の10日間の取引予想は、60%の正解でしたが、収益は -3090円 となっていました。

予想の正解率が高くてもポジションを立てるだけでは損失が発生してしまいます。

もし1000円の損切り決済注文を行なっていた場合は、

日付

終値

予測結果

収益(1万通貨を取引)

2017/12/29

112.682

✖️

-1000(損切り)

2017/12/28

112.867



1850

2017/12/27

113.332



4650

2017/12/26

113.22



1120

2017/12/25

113.29



700

2017/12/22

113.323



330

2017/12/21

113.31

✖️

-130

2017/12/20

113.376



660

2017/12/19

112.884

✖️

-1000(損切り)

2017/12/18

112.538

✖️

-1000(損切り)

となるため、収益は +12180円 となります。

機械学習で予測をした場合でも「損切り」は必ず入れておくことが収益増には必須と言えそうです。

日々の機械学習の予測結果は、

AI(人口知能)・システムFXトレード実践ブログ

で公開しています。

機械学習はPython一択と思いこんでいたのですが、案外そういうわけでも無さそうです。

「機械学習」ができるプログラミング言語とは?

また何か気づいたことがあればメモしていきたいと思います。

■2018年2月2日追記

損切を試した結果、利益確定前に決済をしてしまったり、損失幅を増やしてしまう結果が見受けられたため、損切投資は上手くいきませんでした。

1月の予測結果は

日付

終値

予測結果

収益(1万通貨を取引)

2018/1/3

112.293

✖️

-2090

2018/1/4

112.502

✖️

-2300

2018/1/5

112.732

✖️

-3240

2017/1/8

113.056

✖️

-240

2017/1/9

113.29

✖️

-4420

2017/1/10

113.323



12030

2017/1/11

113.31



1600

2017/1/12

113.376



2330

2017/1/15

112.884



5210

2017/1/16

112.538



340

2017/1/17

112.538

✖️

-8440

2017/1/18

112.538



2580

2017/1/19

112.538



2520

2017/1/22

112.538



1020

2017/1/23

112.538



6470

2017/1/24

112.538



10490

2017/1/25

112.538

✖️

-1860

2017/1/26

112.538



7720

2017/1/29

112.538

✖️

-3150

2017/1/30

112.538



-1820

2017/1/31

112.538

✖️

-4360

となり、「24,030円」の利益が発生していました。


今後の予測

TensorFlowの予測結果ベクトルをグラフにしてみると、「あたりやすい」グラフと「はずれやすい」グラフがありそうです。

201801_graph.jpg

上部に赤いラベルがあるものが「あたり」で、青いラベルがあるものが「はずれ」です。

データは300次元のベクトルなので、これを新たにMLPで学習すると、予測結果ベクトルの精度を判定することができるのではないかと考えています。

そのため、現在使用しているRNN(LSTM)ともう一つMLPのNNを作る必要があります。

まず、

ML1(STEP1)

nn_arc.jpg

で予測結果ベクトルを取得し、それを

ML2(STEP2)

nn_arc_2.jpg

で判定しようという流れですが、問題は「予測結果ベクトル」が少なすぎて収集するのにも時間がかかります。

これまでの終値データはあるので、過去に遡って過去時点での予測結果ベクトルを取得する方法もありますが、やはり時間はかかりそうです。


『 Python 』Article List