AIを活用した為替予想モデルと自動売買システムの構築
タケナカタケナカ

今回はAIを用いて為替(FX)の予想モデルを構築し、トレードしてみたいと思います。

AIを活用して出来ることは色々ありますが、AIに出来ることで良く取り上げられる分野の一つにFXビットコインなどの予測があります。今回はFXの値動きの予測をAIで行って見たいと思います。

この記事では、AIを使ったFXトレードシステムの全容説明に主眼を置きますので、具体的な実装手順などは割愛します。

AIとは何かという所から確認したい方は、以下をご確認頂ければと思います。

【AIの簡単解説】AI画像判定機能の制作とWEBで活用する方法

AIトレードシステムの全体像

今回制作するシステムは一言でトレードシステムといっても、いくつかの機能に分かれていますので、上記の全体像を元にそれぞれの内容を紹介します。

チャート情報取得

今回のAIは過去のチャート情報を元に、これから先の動きを予測しますので、学習のもととなるチャート情報を取得してきます。

今回はOANDAのAPIサービスを利用して為替USD/JPY(5分足)データを取得しましたが、学習に必要な情報が取得出来れば取得元は特にどこでも構いません。

トレードデータのダウンロード方法 「取引のパフォーマンス機能」でトレード分析⑤

AIモデル生成

この部分がAIシステムの一番の肝になります。今回はPyTorchというフレームワークを利用して構築しました。AIのモデル構築は、時系列データの予測なので、RNNのLSTMを使用します。

取得済みの為替(5分足)のチャートデータを以下のように扱やすい形式に変形しながら活用し、3時間後の値動きを予想します。

	Volume	Open	High	Low	Close
Datetime					
2019-01-01 22:00:00	3	109.590	109.673	109.590	109.673
2019-01-01 22:05:00	1	109.669	109.669	109.669	109.669
2019-01-01 22:10:00	6	109.666	109.669	109.650	109.650
2019-01-01 22:15:00	14	109.650	109.674	109.635	109.635
2019-01-01 22:20:00	13	109.630	109.654	109.616	109.651

ここでは技術的な内容は割愛します。(詳しくは今後技術ブログで記載予定です)

トレードプログラム

今回のFXトレードはシステムトレードが可能な、OANDAを使用する事にしました。

トレードプログラムは、学習済みAIの判断を元にして実際にサーバからOANDAに対して取引命令を行うプログラムです。

https://www.oanda.jp

取引状況をLINEに通知

取引を行ったタイミングや、一定の値段を超えたタイミングなど、お好みの設定でLINE通知でお知らせする機能を設けます。

具体的なLINEへの通知方法は以下の記事で紹介していますので、興味のある方はご覧頂ければと思います。

LINE公式アカウントへの自動配信で出来る便利な3つの手法

AI学習の流れ

AIプログラムの構築が出来たら、取得済みのFXの5分足チャートのデータをAIが学習用に使うデータと、テスト用のデータに分けます。

ミニバッチを作るためにIndexをランダムに入れ替えます。ランダムに入れ替えたindexを、ミニバッチの対象数(batch_size件)毎にまわしていきます。

対象のミニバッチデータのそれぞれに、時系列データのN個分の過去データを付与します。epoch毎に評価用データを使って予測、結果を確認します。各評価用データの結果を比較し、ベストのモデルを保存します。

EPOCH:  0  loss : 0.6932491064071655
Val ACC Score : 0.4843433298862461  ROC AUC Score : 0.4993538806979064
最良モデルを更新しました。
EPOCH:  1  loss : 0.6946130394935608
Val ACC Score : 0.48318510858324715  ROC AUC Score : 0.4993508984942185
EPOCH:  2  loss : 0.6928796768188477
Val ACC Score : 0.494229576008273  ROC AUC Score : 0.49934968865964746
最良モデルを更新しました。
EPOCH:  3  loss : 0.693499743938446
Val ACC Score : 0.5040744570837642  ROC AUC Score : 0.4993464487346531
最良モデルを更新しました。
EPOCH:  4  loss : 0.6954463124275208
Val ACC Score : 0.5120372285418822  ROC AUC Score : 0.4993429553694373
最良モデルを更新しました。

取引のバックテスト

実際に本番のアカウントにお金を入れてトレードする事も可能ですが、その前にバックテストという機能を使って、取引するとどうなるかの確認を行います。

今回は2019年のデータを使い、予算10万円で実際にトレードのテストを行ってみます。

※時実際に行う際は間がかかるので読み込みデータ量を調節する必要があります。

バックテストでのトレード結果

以下が2019年データで1年間のトレード予測をしてみた結果です。

Start 2019-01-01 22:00:00
End 2019-12-31 04:50:00
Duration 363 days 06:50:00
Exposure [%] 97.06
Equity Final [$] 108807
Equity Peak [$] 110528
Return [%] 8.80665
Buy & Hold Return [%] 0.889006
Max. Drawdown [%] -5.56777
Avg. Drawdown [%] -0.117653
Max. Drawdown Duration 165 days 01:00:00
Avg. Drawdown Duration 1 days 01:30:00
# Trades 706
Win Rate [%] 52.8329
Best Trade [%] 1.00202
Worst Trade [%] -1.00197
Avg. Trade [%] 0.0132682
Max. Trade Duration 6 days 00:05:00
Avg. Trade Duration 0 days 12:00:00
Expectancy [%] 0.134102
SQN 1.7331
Sharpe Ratio 0.0642682
Sortino Ratio 0.085355
Calmar Ratio 0.00238303
_strategy LSTM_RUN

各項目の主な内容は以下の通りです。

項目 内容
Start, End バックテスト対象期間の開始日、終了日
Duration バックテストの期間
Exposure(%) 資産の変動率
Equity Final 最終的な資産増減
Equity Peak 最大時の資産額
Return (%) リターン率
Win Rate (%) 取引の勝率
Best Trade (%) 最良の取引率
Worst Trade (%) 最悪の取引率
Avg Trade (%) 平均リターン率

結果・考察

PyTorch・LSTMで為替の予測モデルを作成し、実際にトレードするところまで制作してみました。予測精度は50%程度なので、売買の手数料などを考慮するとあまり利益が出るところまでは辿り着いていません。

今回の制作は単純なモデルで改良の余地はまだまだあるかと思います。これからのチューニング次第で利益を出すことも可能だと思いますが、取引はあくまで自己責任でお願いいたします。