人工知能学会の発表についてFXにおけるチャートのCNNによる最適化
1. はじめに
近年では、人工知能分野の技術を金融市場の分析や予測に応用する動きが活発になっている。同時に、情報技術の発達により、これまでの膨大な金融市場のデータをインターネットを通じ、学習データとして用いることが出来るようになった。
前回の研究では、為替レート(USD/JPY)のチャート画像による15分後の値動き予測を行った。15分足のチャート画像を用いて2006年のデータで学習を行い、2007年から2016年のデータで検証を行った。検証では、年率2%のリターンとなった。今回の研究では、より予測の精度を向上させるため、日足/4時間足/15分足のチャート画像を入力データとした。また、為替レートの時系列データ(数値データ)を入力データとしたCNNによる学習・検証も行い、画像データによる結果との比較・考察を行った。
2. 手法 2.1 前提
・トレードを行う際には、日足、4時間足、15分足を情報として用いる事が多い。そのため、今回の研究では、それらの三つの情報を一つのデータにまとめ、学習・検証を行った。過去データの取り込みにおいては、学習データに未来のデータが混入しないように、日足は前日分、4時間足は予測する15分足が含まれない時刻までの4時間足を学習データとして取り込んだ。また、現在の日付の途中までの未確定足の情報は、実際のトレードでは重要なシグナルとなるが、今回は4時間、15分足にその情報が含まれていると考え、前日の日足を用いてデータ構築を行った。
・今回の研究で用いたデータなどについては、下記の通り。
通貨ペア:USD/JPY、日足データ数:3115、4時間足データ数:18956、15分足データ数:304567、画像サイズ:892×500、チャート画像一つあたりの足本数:211、チャート数値データファイル数:199、利用フレー:chainer、使用言語:python。
2.2 準備 2.2.1 画像データ・数値データ
今回の検証においては、画像データ量が30万枚程となるため、機械学習時のマシンパワーが必要になると考えられた。そのため、GPUを用いた学習環境としてNvidia GTX 1080 Ti、Nvidia GTX 1060 Tiを使用して計算を行った。学習用ハードウェアの構成は、それぞれ数値学習マシンではGTX 1080 Ti 1枚、GTX1060 Ti 1枚、画像学習マシンではGTX 1080 Ti 2または3枚とした。
また、画像データ、数値データの共通の準備として、価格データをSQLデータベース化し、検証時に問い合わせを行い、売買タイミングでの利益などのデータを抽出し、データベースには15分足のデータを入力した。また、当該15分足の終値で約定し、次足終値でクローズする仕組みとした。値幅に関しても同様に、当該足終値と次足の終値の差を用いて検証を行った。今回の検証では、ラベルの振り方を3種類用意し、それぞれの振り分け方に対して学習と検証を行った。ラベルの振り方は、表1の様である。
2.2.2 画像データ
チャート画像の取得・加工プログラム学習データに用いるためのチャート画像の取得には、MQL4、 C++によって作成したプログラムを用い、MetaTrader2のチャートをコマ送りにし、USD/JPYの15分足チャート画像をスクリーンショットとして30万枚分をpng形式で保存した。また、同様にして15分足の日付、時間に対応する日足、4時間足のチャート画像を読み込んだ。その後、png形式で保存した画像データに対し、ビット深度やサイズ変更を行う加工プログラムを作成、実行した。日足、4時間足、15分足の取得データのサンプルは、それぞれ以下の図1、2、3に示す通りである。また、画像はそれぞれ8bit画像として生成し、同時刻の日足、4時間足、15分足のサンプルをRGB画像として統合する事で1枚の画像にまとめ、その画像をCNNで学習させた。
Chainer CNNプログラム畳み込みニューラルネットワークを利用し、上記画像を学習するプログラムをPythonにより作成した。
Chainer学習結果返却プログラム上記で学習した学習済みデータセットに、学習させていないデータを入力として与えることで売り、買い、または何もしないかを返却するプログラムをPythonにより作成した。チャート価格取得プログラムあるチャート画像を対象として、チャートの開始時刻(チャート左端)、チャートの現在時刻(チャートの右端)、次の足の時刻(チャートの右端 +1)、及び右端の終値、右端+1の終値、両者の価格差を全ての15分足で取得した。
結果検証プログラム学習済みデータセットが返却した売却情報と上記のデータベースに対してSQLを発行し、ExcelにまとめるプログラムをPython、Postgresにより作成した。
2.2.3 数値データ
数値データに関しては、USD/JPYのFXチャートにおいて、日足・4時間足・15分足データをメタトレーダーによりCSV形式で取得した。その後、CSVデータをプログラムを用いて対象とする15分足、4時間足、日足データをそれぞれ200本分をファイルにまとめた。出力データは、高安/始終ごとに差分と平均の計算を行った。数値データの例は、表2に示す通りである。
2.2.4 検証実施時のモデル
検証時のモデルには、数値・画像ともにCNN(畳み込みニューラルネット)を用いた。画像畳み込みニューラルネットに関しては、日足、4時間足、15分足をそれぞれRGBにマッピングし、入力層の大きさは使用する画像データ数によって変更を加えた。数値データ、及び画像データを学習させた際のモデルは、それぞれ図5、図6の通りである。3図5において、①を4回実行し、②を2回実行した。また、図6においては、①を3回実行し、②を2回実行した。
2.3 検証方法
検証方法は、下表3に示すように、2006年~2008年を学習させたモデルについて学習させた年度以降の検証を行った。また、値動きの幅に応じて、3つのパターンに対して検証を行った。
3. 結果 3.1 数値データによる結果
数値データを用いて、2006年~2008年までを学習させたモデルの結果を下に示す。また、このモデルにおける損益グラフも示す。(縦軸:円)
3.2 画像データによる結果
また、画像データを用いて、2006年~2008年までを学習させたモデルの結果を下に示す。この時の損益グラフは下図の様であった。(縦軸:円)画像データを用いた学習においては、2006年度の15分足のみを学習させた前回研究と比較するため、2006年の15分足、4時間足、日足を学習させた結果も隣に示した。(縦軸:円)
4. 考察
前回の研究発表後に取得した、2006年の15分足のみを学習データとして用いたモデルの損益は1000pip、年利1%ほどの利益であったが、今回の日足情報と4時間足を15分足に加えて学習を行ったモデルの損益は、1500pip、1.5%程度であり、改善が見られた。また、画像データでの結果と数値データでの比較では、若干数値の結果が上回った。数値データ・画像データ共に、15pipのラベル付けにおいてマイナスとなった。原因は特定できておらず、どの場合においても勝率の有意性は見られなかった。これらを踏まえ、画像データについて、今後改善すべき点としては日足、4時間足、15分足を一つの画像としたが、それぞれのコンテキストを踏まえた学習となっていない可能性があるため、別画像として実施したい。また、数値データについては、一部複数回実行した場合、結果が全く同じにならなかったことがあったため、これらの原因特定はこれから実施したいと考えている。更に、経済指標をモデルを用いることによって、より良いモデルを構築出来る可能性があるため、今後研究を進めたいと考えている。また、データ量などは数値データの方が少なく学習を行うことができた。また、それぞれの学習データを用いた際のメリット・デメリットは以下のようなものが考えられた。
数値データを使用するメリットより正確な情報を用いることができる。計算量が格段に減る。数値データを使用するデメリットCNNは画像データについて解析を行うために開発されている歴史がありの本来の目的を果たせない。画像データを使用するメリット人間が目で見たまま取引を行うという目的を果たすためにはCNNモデルが必要で、画像データはCNNモデルの目的に合致している。画像データを使用するメリット:入力の次元が多次元になり、計算に負担がかかる。
ここまでご愛読いただきありがとうございました!