2020.01.10

強化学習(PPO)によるFX取引の実践(その2)

Pocket

こんにちは、次世代システム研究室のK.Nです。今回も引き続き強化学習(PPO)によるFX取引に取り組みました。強化学習のアルゴリズムや課題の背景については前回の記事をベースにしていますので、まずそちらをご確認していただければと思います。

今回は、強化学習のモデルに与える観測値や報酬の種類を変更した時の影響を調査しました。

条件

使用した為替データ、強化学習のフレームワークは前回と同じです。

取引の設定は、初期費用100万円, レバレッジ25倍、スプレッドは0.3銭としました。

注文価格は、分足のUSD/JPYデータのcloseをそのままbidとして採用し、askはスプレッド分上乗せして計算しました。

次に環境の条件です。観測値はいくつかのパターンを試しました。詳細は以降述べます。報酬は決済損益を設定しました。行動については、-5, -4, ..4, 5まで11通りの離散変数から選択。1単位は1000ドルに相当します。

前回からの変更点についてですが、まず報酬は元々NetAssetValueでしたが、今回は決済損益にしています。こちらの変更による影響は後で言及します。また、アクション(注文方法)について、前回はポジション価値とレバレッジから計算される最大余力に対して等分する形で、注文量を決めていました。今回は、可能な注文単位をあらかじめ設定しています。こちらのほうがより自然です。

実験は、2019年5月の第2週から第5週までの4週間分を評価対象としました。評価対象の期間1週間分に対して、過去5週間分を訓練期間として、1週間ずつスライドしながら訓練、評価を行いました。

数値結果

今回、検証した条件は以下の通りです。
  1. PPO2(bid)
  2. PPO2(bid)+unrealized_pl
  3. PPO2(bid, available, realized_pl, open_position_unit)
  4. DQN(bid)
1は、通常のPPO2のモデルで観測値はbidプライスのみです。2は1にrewardに決済損益に加え、未決済損益を加えた場合です。3は1に対しモデルに与える特徴量を追加した場合です。追加した特徴量はbidからさらに余力、確定損益、ポジション量です。3は異なるモデル(DQN)を用いた場合です。また、特徴量による影響度の差が大きくならないよう、正規化の処理をしています。

以下の表は、上記4手法に対する4週間分の最終的なPLになります。
5/6-5/10 5/13-5/17 5/20-5/24 5/27-5/30 合計
1 ¥234,385 ¥-113,136 ¥-46,224 ¥263,900 ¥338,925
2 ¥69,376 ¥42,666 ¥40,674 ¥-253,301 ¥-100,585
3 ¥147,520 ¥-17,126 ¥-198,835 ¥-248,988 ¥-317,429
4 ¥-171,882 ¥1,813 ¥-222,200 ¥-302,825 ¥-695,094
 

良い結果は出ませんでした。一番良いのが一番工夫していない1の条件というのも残念です。

さらに、より詳細に結果について見ていきましょう。

図1:手法1による取引結果(5/6-5/10)



図1は手法1による5/6-5/10における取引の様子を示したものです。一番上のグラフはプライスの変化です。青がSell, 赤がbuyを表しています。2番目は持っているポジションの変化量、3番目は注文の様子、4番目は確定損益を示しています。最初からすぐに大きく売りポジションを持ったまま、価格下落基調で利確しながら利益を増やしている様子がわかります。そして、トレンドが終わった頃合いに今度は買いポジションを持つように調整しています。取引終了時には持っているポジションをすべて手仕舞うことにしているので、最終的なポジション量はゼロになります。また、持てるポジションの最大値はレバレッジから決まっており、今回の枠組みではそれを超えるような注文はすべて拒否される仕組みです。

 

図2:手法1による取引結果(5/20-5/24)



次に、手法1による5/20-5/24の取引の様子を見てみましょう。最初、大きく買いポジションを増やしたあと、そのままポジションは一定で、注文もまばらになっています。これは、全く注文を出していないわけではなく、この状態で出した買い注文が拒否されているからです。大きく買いポジションを抱えたまま、価格が下落基調になっているので、含み損を増やしながら、しばらくして一気に損失が確定している様子がわかります。

今回よく見られた気になる点が、取引の早い段階で上限近くまで、買い(売り)のポジションを増やしてしまう問題です。これは、マーケットリスクの増大を意味し、望ましくありません。手法1では、報酬は決済損益で与えられるので、ポジション増大に対するペナルティは存在しません。それを踏まえ、手法2において、決済損益にポジション損益を足した値を報酬としました。結果は表に示していますが、損益の合計値としては手法1より劣りますが、損失が発生しているのが1週間分しかないため、その意味では安定性は向上していると言えそうです。参考に、図3に手法2による取引結果(5/20-5/24)を示します。

図3:手法2による取引結果(5/20-5/24)



最初の段階で、売りポジションを十分に増やし、プライスが下がっていくにつれて、利益を確定していく様子がわかります。このような利益の増やし方を安定的に実現できれば理想的です。ただし、ポジション自体は上限まで増大しているので、今回意図した目的は満たされていないようです。ポジション量が増大するにつれて、報酬が下がるような効用関数等を設定する等より直接的なアプローチの方がより有効かもしれません。

まとめ

今回は、連続する数週間に渡る期間に対し、いくつかの条件を変えながら、パフォーマンスを検証しました。その結果、単にbidを特徴量に与えた一番シンプルなPPO2が最も良い利益を獲得しました。ただし、条件を変えたと言っても、そこまで劇的に変えたわけではないにもかかわらず、パフォーマンスにかなりの差が出ており、本結果に対する信頼性の検証は依然不十分と言えます。その意味では、さらに長期間でのバックテストが必要です。

また、今回は特徴量による調整がメインで、モデルのチューニングはあまり行いませんでした。今後は、よりポリシーのNN関数の構造を調整したり、異なる強化学習モデルを採用するといったアプローチを取ることも考えられます。しかしながら、個人的には、モデル調整による改善は特徴量の調整と比べて効果が低いのではないかと思っています。結局のところ、金融取引の優れたパフォーマンスをもたらすのは、将来の価格変動に対する予測精度であり、そのためのシグナルをうまく捉えた特徴量設計が需要であるからです。そもそも、マーケットデータは非定常な分布であるため、予測自体かなり困難です。強化学習が輝かしい成果を残しているゲームやロボティクスの分野と比べて、金融取引の分野で強化学習が優れたパフォーマンスを得たというニュースを聞かないのもそれが理由であるかもしれません(ただ、金融の場合上手くいっている手法ほど公にならないことが多いというのもありますね)。

前回、今回と強化学習のPPO2というモデルに注目して、FX取引に対する応用可能性を検討してきました。次回以降は、最新の事例も含めた、様々な強化学習のアルゴリズムを視野に入れて、応用可能性を考えていきたいと思います。

 

お知らせ

次世システム研究室では、ビッグデータ解析プラットホームの設計・開発を行うアーキテクトとデータサイエンティストを募集しています。興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧からご応募をお願いします。

一緒に勉強しながら楽しく働きたい方のご応募をお待ちしております。