深層強化学習はビットコインのmmbotに応用可能か?〜その2〜

はじめに

前回は強化学習をトレードに適用する上でのイントロダクション的な記事を紹介するとともに、進歩が著しい最新(〜2018年末)の強化学習アルゴリズムの紹介を行った。

深層強化学習はビットコインのmmbotに応用可能か?

今回は、強化学習をMarket Makingに適用する上で重要となる検討ステップ・思考の大枠を記述する。

強化学習用モデル(RL Model)構築

利用する情報の候補として、4本値(OHLC)ではなく、より微視的な約定履歴・板情報を選ぶべきであろう。Market Makingを行う前提であれば、1分足レベルの情報は遅く、そこにエッジが存在している可能性は低いと想定される。約定履歴は過去(指値と成行の相互作用)、板情報は未来に関する情報を含むと解釈できる。

自身の注文・約定が約定履歴・板情報に影響を与えるモデルを作るのは実稼働時以外では困難である。学習モデル(Simulator)上では自身の行動(Action)によるマーケットインパクトを無視するしかない。

これは、状態に対して自身の行動が変化を与えるという一般的な強化学習の枠組みから外れるものである。ただし、いきなりマーケットインパクトまで考慮していては、複雑さが増し、検討を進めるのが困難となる。まずはマーケットインパクトは気にせず、モデルをシンプルにするべきだろう。

OpenAI Gymにて独自の環境(Env)を構築することを検討する。OpenAI Gym環境とのインタラクションはPythonコード上では

observation, reward, done, info = env.step(action)

によって行われる。observationは状態、rewardは報酬、doneは終了フラグ、infoはデバッグ情報、actionは行動である。

次にモデルの主要要素である状態・行動・報酬について述べる。

状態(State)

①在庫(保有ポジション)
②約定履歴
③板情報

の3つが候補として考えられる。

①は行動(Action)によって変わり得る
②③はシミュレーションでは行動(Action)の影響を受けない

そのため、①は行動が状態を変化させる問題と相性の良い強化学習に適した状態パラメータ候補と考えられる。一方で、②③は外生的に与えられるものとして簡略化するしかなく、状態というよりはランダム性をAgentに与える外乱・負荷として考えるべきかもしれない。

行動(Action)

設計候補1

①保有(Hold)(=何もしない)→0
②指値買い(Limit Buy)→1
③指値売り(Limit Sell)→-1
④成行買い(Market Buy)(=在庫処分)→2
⑤成行売り(Market Sell)(=在庫処分)→-2

の5つが候補としてある。それぞれ-2〜2のラベル付けをした。ただし、マーケットメイクの基本的なスタイルに沿うのであれば現実には②③いずれかのみを行うメリットは無い。また、④⑤も「在庫を処分する」ということを1アクションとすれば良い。そのため、次の設計候補2の考え方のほうが適切かもしれない。

設計候補2

①保有(Hold)(=何もしない)→0
②③指値買い&売り(Limit Buy & Sell)→1
④⑤成行買いor売り(Market Buy or Sell)(=在庫処分)→-1

この場合、指値は売り買い両方に同時に出すことを想定する。また、成行は自身のポジションを解消する方向であるとする。

より詳細な行動情報

②③は指値の価格と数量の情報を加える必要がある。
④⑤は成行の数量の情報を加える必要がある(一部処分or全処分)。

そのため上述のラベル付けは簡易的なもので、厳密には行動は2次元 or 3次元であり、それらを1次元に展開したものを用いる必要がある。

また、ディープラーニングを利用する際は連続値でも問題ないが、よりベーシックなQ学習・SARSA等を用いる場合は離散値へとDigitizeする必要がある。

設計候補2+α

以下では適度な単純化を仮定する。例えば、指値価格をMidPriceからの上下幅とし、それを小・中・大の3値へと単純化(それぞれ、行動1, 2, 3に対応)、指値数量は固定、成行は在庫全処分とすると、行動は

①保有(Hold)(=何もしない)→0
②③指値買い&売り(Limit Buy & Sell)→1,2,3
④⑤成行買いor売り(Market Buy or Sell)(=在庫処分)→-1

となり、5つとなる。さらに言えばここに予測中央値をずらす行動と指値キャンセルを追加するということもできるが、複雑性が増すため一旦保留とする。

報酬(Reward)

①未確定損益
②確定損益
③在庫(保有ポジション)
④ドローダウン

の4つが候補として挙げられる。①〜④は独立ではなくそれぞれ関連性を持つ。効率的な学習のためには何を最も重視し報酬を与え、何にペナルティを課すか。適切な報酬設計が重要になる。この部分が一番の肝であろう。

終了フラグ(Done)

ドローダウンを基準とすると良いだろう。例えば-10%のドローダウンをもって終了とする。

RL(最適化1)アルゴ選定

上記のモデルを基に、どの強化学習アルゴリズムが最適かを検討する。基本的な手法としてはQ学習、SARSA、モンテカルロ法などがあり、深層学習を取り入れたものにはDQN、Double DQNなどがある。選定の基準は次のとおりである。

・そもそも学習が可能であるか(=問題(タスク)との相性が良いか)
・学習収束時間は現実的か
・学習した結果が汎化性能を持つか

同じ学習アルゴリズムを用いたとしても、前提となるモデルが異なれば上記の結果も変わってくる。アルゴ選定とモデル構築は密接に結びついている。相互の組み合わせの検討が、報酬設計と同じくらい重要なポイントであろう。

ハイパーパラメータ調整(最適化2)

どんな強化学習アルゴリズムにもハイパーパラメータが存在している。基本的なものとして、学習率や報酬割引率である。

また、ニューラルネットワーク利用時には最適化の手法(Adam等)や活性化関数(シグモイド、tanh、Relu等)も同様に最善のものを選択する必要がある。

このステップは経験的・職人技的なものである。これらを同一モデル・同一アルゴ下において最適化することも自動化可能であろうが、その調整時間が現実的なものであるかは注意が必要だ。また、これらの調整も汎化性能を意識しながら行う必要がある。

RLモデルと統計ベースモデルの比較

強化学習はミクロな探索をベースとした力技的な学習(=最適化)である。得られた学習結果による行動・結果が、よりマクロなレベルでの統計ベースモデルと比べ、どう異なるかを明らかにすると、そもそも強化学習のアプローチがコストに見合うものなのか判断することができるだろう。

RLモデルと実環境の比較

ここに来てやっと実稼働に入る。モデルと学習によって得られた結果が実環境においてどのような結果を残すのか、差異を検証する必要がある。遅延の影響等が現れてくるかもしれない。

RLモデル修正

上記の全てを踏まえ、初めのステップに戻り、モデルを改善する。理想的には実環境での稼働結果をベースとし、そこから逆方向にさかのぼっていき、ボトルネックとなった部分を見つけ出す。それが過学習・未学習どちらに起因するのかを検証し、モデル修正へとつなげることが重要であろう。

まとめ

以上、思考実験として一連のステップを想定し、それぞれでの課題を記述した。Market Making分野での強化学習適用については、いくつかの研究・論文が発表されている。それらを踏まえ、さらなる検討を進める。