今回はAIを用いて為替(FX)の予想モデルを構築し、トレードしてみたいと思います。
AIを活用して出来ることは色々ありますが、AIに出来ることで良く取り上げられる分野の一つにFXやビットコインなどの予測があります。今回はFXの値動きの予測をAIで行って見たいと思います。
この記事では、AIを使ったFXトレードシステムの全容説明に主眼を置きますので、具体的な実装手順などは割愛します。
AIとは何かという所から確認したい方は、以下をご確認頂ければと思います。
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に対して取引命令を行うプログラムです。
取引状況をLINEに通知
取引を行ったタイミングや、一定の値段を超えたタイミングなど、お好みの設定でLINE通知でお知らせする機能を設けます。
具体的なLINEへの通知方法は以下の記事で紹介していますので、興味のある方はご覧頂ければと思います。
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%程度なので、売買の手数料などを考慮するとあまり利益が出るところまでは辿り着いていません。
今回の制作は単純なモデルで改良の余地はまだまだあるかと思います。これからのチューニング次第で利益を出すことも可能だと思いますが、取引はあくまで自己責任でお願いいたします。