最近、BTC-FXのbotを作成するためにマーケットメイク戦略を勉強していました。
そもそもマーケットメイクとは、通常の顧客同士の注文をマッチングさせるオークション方式に対して、取引所より資格を得た値付け業者が常時指値を提示して顧客と業者の間で取引を行う方式を指します。
かつてJASDAQがこの方式を採用していましたが、2008年に廃止されています。
現在でいうマーケットメイクとは、オークション方式の市場において大量の指値を供給することでその見返りとしてスプレッド分の利益を得る、という戦略を指すことが多いようです。
今回は私の備忘録としてマーケットメイク戦略の概要をまとめたものを公開します。
1.参考文献
マーケットメイクにおける数学的理論は以下の洋書2点を参考としています。
「High-Frequency Trading: A Practical Guide to Algorithmic Strategies and Trading Systems」 (Aldridge、2013)
「Algorithmic and High-Frequency Trading」 (Cartea, Jaimungal, Penalva、2015年)
数学的理解を深めるために上記の書籍が引用している文献もいくつか読みました。
マーケットメイクの分野で権威のある論文を紹介しておきます。
「Optimal Dealer Pricing under Transactions and Return Uncertainty」 (Ho, Stoll、1981年)
「Liquidity and Market Structure」 (Grossman, Miller、1988年)
「High-Frequency Trading in a Limit Order Book」 (Avellaneda, Stoikov、2008年)
上記の洋書や文献の流れを簡潔にまとめてあるワーキングペーパーがあるので、ざっと概要を理解したい方はこちらを読むことをお勧めします。
「執行戦略と取引コストに関する研究の進展」 (杉原、2012年)
ここでは主に、杉原(2012)も引用しているAvellaneda, Stoikov(2008)のマーケットメイク理論式(杉原の文献中の21式)について解説していきます。
なおここで取り上げているマーケットメイクとは、リベート狙いで割り込みや注文キャンセルを駆使しながら同値撤退を繰り返す手法とは異なることに留意してください。
2.マーケットメイク戦略の最適化問題
(1)最適化問題の概要
マーケットメイク戦略は板の上下に指値(売り指値と買い指値)を提示し、自身の利益を得るものです。
これを数学的な命題として記述すると、
「ある一定期間Tを経た後の自身の資産価値を最大化する指値の幅を求める問題」になります。
ここで自身の資産とは、キャッシュ+ポジション時価(マーケットメイク理論ではポジションのことを在庫(inventory)と呼びます)を指します。
価格の上下変動により上下両方の指値が約定した場合、キャッシュが増えます。
片方しか約定しなかった場合、在庫として自身が抱えることとなります。
在庫は市場の価格変動に晒されているため(在庫リスク)、単純に資産を最大化するのではなく、在庫リスクにペナルティ(リスク回避度)を課した効用関数を最大化することになります。
AvellanedaとStoikovは、この効用関数を以下の形としています。
これは、絶対的リスク回避度一定(CARA)型効用関数の派生形となっています。
(γ:リスク回避度、Ct:t時点のキャッシュ、qt:t時点の在庫、St:t時点の中央値)
(2)指値の定義
売り指値と買い指値を置く位置は、ベストアスクとベストビッドの中央値Stを基準として、それぞれδask、δbid離れた位置に置きます。
つまり、売り価格PaskはSt+δask、買い価格PbidはSt-δbidとなります。
命題をもう一度まとめると、
「(1)の効用関数uを最大化するδaskおよびδbidを求める問題」であり、この解を導出するために市場のモデリングを行うことになります。
(3)市場のモデリング
市場のモデリングをどれだけ複雑に行うかで得られる解は変わってきます。
あまり簡単にモデリングしすぎると、当然実際の挙動と大きく乖離することになるでしょう。
しかし逆に複雑にしすぎると式の形で解を記述することが難しくなり、数値的な解法が必要になってしまいます。
(a)価格変動のモデル
まず中央値Stの値動きは、以下の式で表される分散σ^2のブラウン運動と仮定します。
このとき、AvellanedaとStoikovは値動きのドリフトは考えていません。
ドリフトを考えると現象の記述がさらに難しくなります。
(b)板の厚み
板の厚みは各価格帯に置かれた指値を累積することで求めることができます。
もしも全ての価格帯に一定の量の指値が置かれていた場合、厚みを記述する関数は線形となります。
実際の市場では、中央値Stに近い価格帯での指値が多くなるため、厚みの関数はEXP関数で近似することが多いようです。
(c)注文の強さ
注文の強さ(trading intensity)とは、単位時間当たりにStまわりのどの価格帯でどれだけの注文が約定するか表した指標です。
これは、(b)の板の厚み形状とその時点で流入してくる成行注文の量で決まります。
成行注文の量は一定と仮定したり価格のべき乗で表現したりするのですが、結論としてAvellanedaとStoikovは注文の強さはEXP関数としています。
(4)在庫リスクの抑制
自らの在庫状況を全く考えずに指値を設定すると、市場の動きに合わせて気が付けば大量の在庫を抱える羽目になってしまいます。
従って、在庫を解消する方向に指値を調整しなければなりません。
例えば在庫がプラスに傾いているときには、δbidに対してδaskを相対的に小さくし、売り注文が約定しやすくなるようコントロールすることで在庫の解消を図ります。
この抑制の強さは、当然ですがリスク回避度と関連することになります。
3.マーケットメイク戦略の最適解
上記を考慮すると、この命題の最適解は以下のようになります。
実際にはδaskとδbidを個別に求めるのではなく、指値の全体幅δ(ask+bid)と中央値StからのオフセットであるSoffsetを求めるようになっています。
導出の過程については、Avellaneda, Stoikov(2008年)に記載されています。
ここでは各項が持つ意味を説明し、マーケットメイクにおいて指値をどのように設定すればよいか定性的に説明します。
(1)指値の全体幅δ(ask+bid)
まず第1項はリスク回避度×残存ボラティリティとなっています。
残存ボラティリティとは、時点tから満了期間Tまでの残り時間における分散の大きさであり、σ^2×(T-t)で表されます。
つまりリスク回避度が大きいもしくは残存ボラが大きい場合、指値の幅を広げて約定する注文の量を抑制します。
ショックの発生によってボラティリティが極端に大きくなった場合、指値の幅は無限大に近づき、このときには指値は全く約定しなくなります。
続いて第2項は、注文の強さから決まる値です。
この値は、注文の強さ(板の厚みと成行注文量)に対して約定確率×値幅の期待値が最も高くなるポイントに設定されます。
この項のリスク回避度への依存性は低く(分子と分母で打ち消しあうため)、注文の強さのパラメータαが支配的となります。
注文の強さが強い場合(αが大、板に対して成行が多い場合)、Stから離れた板まで約定する確率が高く、このときは指値の位置をStより遠ざけます。
逆に注文の強さが弱い場合(αが小、板に対して成行が少ない場合)、Stから離れた板は約定する確率が低く、このときは指値の位置をStへ近づけます。
なお、上記の式はAsk側とBid側の注文の強さが同じものとして式を簡略化していることにも注意してください。
まとめると、
- リスク回避度を大きく取る場合は指値の幅を広げる
- (残存)ボラティリティが大きいときは指値の幅を広げる
- 注文の強さが強い(板に対して成行が多い)場合、指値の幅を広げる
(2)中央値からのオフセットSoffset
この項は、-リスク回避度×残存ボラティリティ×在庫量となっています。
考え方としては、ある在庫qtを保有しているとき、それを解消する方向に指値が約定するようオフセット量が調整されます。
このとき、リスク回避度を大きく取る場合にはオフセット量が大きくなり、積極的に在庫を解消するような挙動となります。
また、値動きのボラティリティが大きくなれば、それに応じてオフセット量が大きくなり在庫の解消が促進されます。
まとめると、
- 在庫を解消するよう、オフセットを加算する
- リスク回避度を大きく取る場合、オフセット量は大きくなる
- (残存)ボラティリティが大きいときは、オフセット量は大きくなる
4.ここまでのまとめ
上記は基礎理論であり、実践にマーケットで運用して利益を得たり安定させたりするためのテクニックが他にも多数存在します(逆選択リスクへの対応など)。
こちらは次回に紹介するつもりです(たぶん)。