れぞんでーとる

すりつぶされたりせんぞ

AIによるFX自動取引プログラムの実装を考えてみた

しょくぱにすと
2019/9/7 (更新: 2019/12/2)

近年大変なAIブームですよね。

本業でAI(機械学習)モデルの開発に携わっている身としては大変ありがたい話です。AIブームのおかげでご飯食べさせてもらってます🍚

一方、巷で騒がれているほどAIは万能ではなく、SF好きな僕としては現代のAI技術に物足りなさを感じてしまっています。
「ドラえもん」みたいな本物のAIを生きている間に見たかったのです(もしかしたら数十年後にシンギュラリティが来る可能性も捨てきれない)

AI(機械学習)エンジニアとしては、ドラえもんを作るために自分の技術者人生を投じたい。
でもそれを専門に研究するには時間とお金がかかる。

「ああ、お金。。ここでも僕の夢を阻むのか。」と諦めかけていたところ、ふと思いつきました。

AIにお金を稼いでもらえばいい」のだと。

こうして、AIによるFX自動取引で一攫千金できないか挑戦しようと考えるに至りました。

うまく行けばお金儲けできるし、うまく行かなくてもAIの開発自体がチャレンジングでスキルアップにつながる。一石二鳥じゃないですか〜😃

まだ取り組み始めたばかりで、シミュレーションを動かすところまではたどり着けていないですが、現時点でのAIによる自動取引プログラムの構想をご紹介します。

AIに自動取引させてみたいけど、具体的にどうやって実現させるのか分からないという方にとって参考になるかもしれません。

FX自動取引の問題設定

現在のAIは何でもできるマンではないので、AIが扱える形に人間が問題設定する必要があります。
FX取引を、AIが扱いやすい問題に分解し、AIが学習しやすい教師データを用意できる問題設定を行います。

そこで、そもそもFXの取引って普段どのようにされているか考えてみましょう。

おそらく、FXの取引は、

  • 現状のマーケット状況を把握
  • 状況に基づき将来の方向性を予想
  • 適切なタイミングで売買する

というステップに分解できると思います。

そのため、
AIに学習させるにあたり、「現状を把握して将来の方向性を予想するAIモデル」と、「予想に基づき適切なタイミングで売買するAIモデル」をそれぞれ用意するというアプローチを考えてみました。

このアプローチのメリット

このアプローチによるメリットは、将来の価格や指標のAI予測精度がそこまで高くなくても、賢く売買することでトータルで儲けられる可能性が十分にある点です。

これを言っては本末転倒かもしれませんが、実際、現代のAIでは為替相場のような複雑な動きの予測は難しいです。
予測精度自体は50%より少し上というぐらいなら目指せるかもしれませんが、この予測値に頼り切ってトレードすると資産を減らし続ける未来が見えています。

しかしここで、予測値を参考程度に活用して、売買戦略を考えてくれるもう一つのAIを用意するとします。
これにより、予測した方向が間違っていた場合は損切りし、勝ち筋が大きいときに大きく儲けるといった戦略が可能になります。

つまりは「コツコツドカン」で勝つことが想定できるということです。

筆者はFXトレードの経験がたくさんあるという訳ではないのですが、FXで儲けるには、1回1回の勝率はそこまで重要ではない気がしています。
トレードの勝率(予測精度)が高くなくても、エントリーや損切り、利食いのタイミングが良ければ、トータルで大きなプラスになることは案外あると思います。

これを可能にするのが今回のアプローチです。

それでは、それぞれのモデルについて、実装方法を紹介していきます。

AIによるトレンド予測

現状を把握して将来の方向性を予想するAIモデルです。

具体的には、現時点までのチャートのデータをベクトル入力として、ある値や指標が上か下のどちらに動くか二値分類予測するAIモデルです。

直接、次の時点での価格予測モデルを構築することもできますが、売買戦略を考える上では、絶対的な値よりも、方向性のほうが重要だと考えました。トレンド予測ですね。

この部分に関しては典型的な二値分類モデルを想定しているので、特に今回は凝ったことをするつもりはありません。より詳しく知りたい方は「機械学習 二値分類」でググるとイメージが湧くと思います

テクニカルかファンダメンタルか

原理上、テクニカル、ファンダメンタルのどちらでもAI予測モデルを構築することは可能です。

ただ、AIの学習には良質かつ大量のデータが必要であり、チャートデータを活用するテクニカル分析の方がやりやすく向いていると思われます。

将来的にはtwitterや各種経済情報サイトから自動的にデータを集めて加工する仕組みを用意して、ファンダメンタル的な側面からの分析・予測も取り入れていきたいですが、簡単のため、まずはテクニカルのチャートデータだけを扱うことにします。

実装詳細

専門用語が出てくるので、興味ない方は呼び飛ばしてもらって大丈夫です。

実際に実装するにあたり、どのアルゴリズムを検討しているかだけ紹介します。
まだ実装まで進んでいないので、WIP的に書かさせてもらいます。

今回使えそうな時系列の二値分類モデルの候補として、

  • ロジスティック回帰
  • 決定木系のアルゴリズム
  • 状態空間モデル
  • LSTM
  • 多層パーセプトロン
  • ディープラーニング(CNN)

を挙げてみました。

ロジスティック回帰

この内、ロジスティック回帰を何も考えずに試したのですがダメでした。(それはそう)

時系列データなので、入力ベクトルの要素同士の相関が大きく、線形回帰系のアルゴリズムは向いていないですね。

時系列データ解析

時系列データ解析の知識を身につける必要があると思い、状態空間モデルを勉強することにしました。これについては話が長くなるので、また別記事に書きます。

結論としてあまり思ったような予測は出来そうになかったので、他のモデルを考えることにします。

ニューラルネットワーク

現状有力そうなのはニューラルネットワーク系のモデルです。

多層パーセプトロンは試しやすそうですし、案外チャート画像をCNNに入れて学習させるのもありな気がしています。

NN系はモデルの柔軟性が高いため複数の特徴量を取り入れるなどの応用も試しやすい点がやはり魅力的です。

とりあえず、次は多層パーセプトロンかな。

AIによる自動売買

上ではトレンド予測モデルについて紹介しましたが、ここではその予測値を活用し、最適な売買戦略を学習するAIモデルについて紹介します。

どのタイミングでどれぐらいの量を売るのか買うのか、最適な戦略を出力するモデルです。

基本的に強化学習の枠組みで解けるように、問題設定を考えていこうと思っています。

その前に、強化学習の知識を補う必要があったので、DQNについて勉強したり、openAI gymで試したりしていました。(別記事で書く予定)

強化学習のアルゴリズム自体はアルファ碁が出たときから発展し続けていて、これからも技術自体が進歩する可能性を感じています。

また、ディープラーニングと強化学習を使った自動取引モデルに関する論文も、ちらほら出てきているので、個人的にこれから熱くなっていく手法なんだろうなと想像しています。

まだ詳細まで検証していないですが、今回のタスクにDQN的なアプローチをするのは割と妥当でしょう。

具体的な手法としては、強化学習における問題設定を以下のように行うことを想定しています。

  • 環境: 現時点までのチャートデータ、トレンド予測モデルによる予測値
  • 行動: 何通貨買うか・売るか・何もしないか
  • 報酬: 試行錯誤しながら決める予定。基本、最終的な資産額のイメージ。

強化学習に関する最新の論文を読み漁り、報酬関数を近似するディープラーニング部分を適切な構造に作り込み、報酬設計やパラメータチューニングといった試行錯誤を大量に検証しまくるというサイクルで開発していこうと考えています。

直近技術的にやりたいのはこのタスク。
とてもやりたいのですが、他にやらなければならないことを先に終わらして集中できる環境を整えてから、没頭して取り組む予定なので、実現はちょっと先になりそう。
僕の中では実装したくてウズウズする系の課題です😂

まとめ

以上が現在僕が考えている最強のAI自動取引プログラムの枠組みですw

必要な知識の勉強ばかりで全然実装が追いつけていなくて、実際やってみると絵に書いた餅に過ぎないと判明するのかもしれません。
ただ、アプローチや選択手法については、この記事で解説してきたように妥当性はあると思っています。

早く実装したいですが、諸事情で進捗が遅くなりそうなのが、悩ましいです。

進捗があり次第、また更新しますね。

© 2017-2019 れぞんでーとる All Right Reserved.