前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
今回の記事では、MMBotがどういうものなのか?そして、MMbot開発の要となる「マーケットメイキング戦略のコスト」を整理していきます。
開発におけるメンタルモデルの構築は重要です。
MMbot開発のメンタルモデルを構築中。マインドマップは思考を回すきっかけにしやすいので好き。 pic.twitter.com/CfjBKS5PPU
— よだか(夜鷹/yodaka) (@yodakablog) December 10, 2023
そして、MM戦略のコストとリスクの分析も欠かせません。
高頻度取引のコスト分析およびそれらの整理。
MMbot開発に応用する。 pic.twitter.com/vL0IivDhHs— よだか(夜鷹/yodaka) (@yodakablog) December 12, 2023
それでは、さっそく解説に移っていきます。
なお、今回の記事執筆にあたって、以下の記事を参考にさせて頂きました。
MMBotとは
Market Making Botの略称。高頻度取引を行うBotの一種です。特定の取引板におけるスプレッド(価格の差分)の間に買いと売りの指値を挟み込んで、それらを2つとも約定させることで利益を得るという戦略がベースになっています。収益源は、成り行きテイカーの執行コストです。
差額が利益になり、一回の取引の儲けは少ないため、何度も取引を繰り返すことで利益を最大化します。また、価格差が大きいほど利益を上げやすい点も特徴です。
その取引の性質上、成り行きテイカーの執行コストが収益源となります。要するに、テキトーな成り行き注文から利益を吸い取る仕組みが戦略の中心となります。
同じ板の中で「安く買って高く売る」を実行しているとも言えますね。
利点
まずは「数を打つことができる」という点が挙げられます。シンプルに試行回数を稼ぐことができるため、戦略の検証を行いやすくなります。
また、取引所によってはマイナスのメイカー手数料を設定しているところもあるため、「手数料で稼ぐ」ということも可能です。この場合は、どの取引所を選ぶかということも非常に重要なポイントです。
元となるロジックも簡単で、コードで実行しやすいこともメリットの一つです。
その分、競合も多いのですが、これは「研究が進んでいる」ことの裏返してあるため、「開発における参考ソースが多い」という点も見逃せません。
「高頻度×複利」で利益を大きくしやすいという点も魅力です。
欠点・リスク
欠点の一つは「競合が多い」ということです。
また、取引ボリュームが必要であるため、「板が薄いところではMM戦略自体が有効に働かない」可能性があります。
「在庫リスク」を回避する観点も重要です。2つの指値注文を約定させなければならないため、「片方の指し値注文だけ約定すると他のトレーダーの養分」になってしまいます。論文の中では「5秒以内で約定できるかが利益が出るかどうかの分かれ目」とされています。
高頻度botの宿命として、「手数料がかさむ」という点にも対策が必要です。手数料が無料だったり、マイナス手数料を実装している取引所を選んだりしましょう。
APIの利用制限が稼ぎの頭打ちになることもあります。取引所のAPIは一定時間内での利用制限が課されていることが多いため、各取引所の仕様を確認して対策しましょう。
工夫
「指値の入れ方」で指し残りが無いようにするロジックを組み込む必要があります。
また、在庫処理の損切りを何分にするか、何円以上価格が乖離したら行うかという点も重要です。
この点は、記事後半の「リスクとコスト分析」にて掘り下げます。
さらにライバルBotter達の動きにどう対処するかという点を考慮すると、追加の処理に取り入れる工夫が増えます。
この点は、コードが複雑になることを避けるためにできる限り最小限に抑えたいです。
立ち回り
「高速な取引を行う」ことで、競合に先んじて指し値注文を約定させることができます。
具体的には、Pythonでasyncライブラリを用いて非同期処理を行って高速で動くコードを書いたり、Rustなどの高速で実行されるプログラミング言語を使ってコードを書いたりすることができます。(2023年12月現在、筆者が取り組んでいるのはasyncによる非同期処理で高速稼働するコードを実行することがです)
リスクを減らす方法
リスクを減らすためにはいくつかの視点を持つことが重要です。
まずは「取引ボリューム・注文量を優先する」ことが挙げられます。MM戦略の収益源が「成り行きテイカーの執行コスト」であるため、「テキトーな成り行き注文からいかにして利益を拾い切るか」が最重要項目です。そのため、「成り行き注文が十分な取引量及び流動性を形成しているか」という点は絶対に欠かせない視点です。
また、「未約定の注文をすぐに処理する」ことも重要です。論文においては「MM戦略にいて同じポジションを5秒以上保有すると最終的に破産につながる」と分析されています。未約定の指し値注文はすぐに指値変更するようにコードを書いて、在庫リスクによる損失を減らすようにしなければいけません。
「スプレッドが小さいときは無理に注文を出さない」ことも重要です。しかし、「注文を出さない」ということは利益獲得のチャンスを見逃すことにもなるため「どの程度のリスクまでなら処理できるのか」ということを踏まえて注文の閾値を設定するとことが必要です。
マーケットメイキング(MM)戦略のコスト分析
高頻度取引のコスト分析およびそれらの整理。
MMbot開発に応用する。 pic.twitter.com/vL0IivDhHs— よだか(夜鷹/yodaka) (@yodakablog) December 12, 2023
マーケットメイキング戦略には、特有のコストが存在します。それらな主に「A:透明な執行コスト」と「B:潜在的な執行コスト」の2種類に分けられます。
「透明な執行コスト」とは「事前に分かるもの」であり、具体的には「ブローカー手数料」「取引所の手数料」「税金」の3種類があります。これらのコストは、事前にリサーチすることで明確に算出することができます。
一方、「潜在的な執行コスト」とは「事前に分からなかったり隠されていたりするコスト」のことで、「ビッド/アスクスプレッド」「投資の遅延」「価格の変動」「マーケットインパクト」「タイミングリスク」「機会損失」の6種類があります。これらのコストは、過去のデータから推測されるコストの履歴分布から推定することができます。
それぞれのコストについて詳しく見ていきましょう。
A①:ブローカー手数料
ブローカー手数料とは、ビジネスコストをカバーするための手数料です。
主に「取引手数料」「金利、資金調達の手数料」「マーケットデータやニュースの費用」「研究費用」「その他雑費」などです。
これらの手数料はひとまとめにされて徴収される(バンドル)こともあれば、個別に処理(アンバンドル)されることもあります。
取引量や取引回数に応じて、これらの手数料は変化します。例えば、あなたの取引回数が多いのであれば、個別に処理する方式を取ることで余分な手数料を支払続けることを避けられます。
A②:取引手数料
取引手数料とは、トレーダーが取引所で取引しようとしているオープン売買の利息の在庫です。
取引所は流動性を提供する注文(Maker)を優遇するため、Makerが有利になるような手数料体系を実装していることもあります。例えば、Maker手数料をマイナスにして、流動性の提供者が利益を得られるようにするケースなどがそれにあたります。
一方で、市場あるいは取引板から流動性を取り除く注文(Taker)には高い手数料を課す傾向にあります。これは、取引所の性質を考えれば至極当然のことです。
流動性は、オープン指し値注文によって作成され、成り行き注文によって減少するからです。従って、取引所としては常に流動性が提供され続ける状態が保たれていることが望ましいのです。
A③:税金
税金は、事業が所属する管理区域によって大きく異なります。
取引事業の純利益から算出することができます。
高頻度取引の場合は、全税率の対象となる短期利益として計上されるのが一般的です。注意点としては、減税キャピタルゲインとして計上される1年以上の投資枠には含まれないことです。
また、正確な形状を行うには会計士の知識が必要となるため、一定額以上の稼ぎを達成した場合は素直に税理士や会計士に相談をした方が安全です。
B①:ビッド/アスクスプレッド
ビッド/アスクスプレッドとは、「購入意思の最高価格と販売同意の最低価格の差」です。これは、市場に存在する買い手と売り手に左右されて決まります。
「同じ商品に対して購入者と販売者が同意する価格の差」とも言えます。
仮想通貨Botterとしての具体例を挙げると、
「1BTCを500万円で売る注文」と「1BTCを499万円買う注文」があった場合に生じる「500万−499万=1万円」の価格差
のことです。
ビッド/アスクスプレッドは「確率変数」「履歴値の分布形状」「平均」「標準偏差」「時間帯」「市況」「統計的特性」などの観点から分析することが可能です。
どの観点をどのように組み合わせるかによって、botの動きが大きく変わります。
B②:遅延コスト
投資遅延コストとは、取引を行う決定がされてからその取引が実際に執行されるまでの遅延によって生じるコストです。
遅延が起こる原因は市場価格の変化やネットワーク通信の中断、同時注文多発によるネットワークの過負荷などです。
これは、取引プラットフォームそのものが持つ課題でもあるため、完全に制御することは困難です。
しかし、遅延が起こった時に余分な取引をしないようにしたり、遅延によって生じる価格の歪みを拾うような戦略を実装することである程度の対策ができます。
B③:価格変動コスト
価格変動コストは、大きなポジションの実行中に生じるコストのことです。
通常、大きなポジションを一度に決済しようとすると、市場がその注文を消費し切るまでに時間がかかります。その間にそのポジションの投資価値が変動することで、注文を出した時と異なる価格でポジションの一部が決済されるという状況が起こります。
このコストは価格の基本的な変動によって生じるものです。
そのため、一度に大量の注文を出すことを避け、小分けにして注文を出すことで対処できます。
例えば、「100BTCを1BTC=500万円の価格で売りたい」という注文を出した時に、市場に100BTCをその価格で捌くだけの流動性がなければ、100BTCのうち20BTCだけが決済され、残りの80BTCは注文時の希望価格で決済されないということが起こり得ます。そこで、100BTCを20BCTずつ5回に分けて注文を出すようにすると、その市場の流動性に沿って価格変動コストを最小限に抑えながら取引をすることができます。
ただし、流動性の低い市場においては一度に大量の注文が出ることで価格に歪みが生じることもあります。この歪みに反応して、取引を行うbotも存在します。
B④:マーケットインパクト
マーケットインパクトとは、「成り行き注文に実行に続く流動性の低下」のことです。
板における成り行き注文の多くが処理されることで、その商品の需要は減少します。板には指し値注文ばかりが残るため、注文の成立が発生しにくくなり、板の流動性が低下します。それが投資価値が低下を招きます。
マーケットインパクトの発生原因は「大量注文」「供給または需要に対する圧力」「注文によって作成された在庫の不均衡によって生じる情報の歪みや不透明さ」です。
マーケットインパクトに見舞われた市場では、適正な価格での取引が困難になります。
一般的な対策としては、成り行き注文と指し値注文のバランスを観測し続けるロジックを導入することが挙げられます。
B⑤:タイミングコスト
タイミングコストとはランダムで予測できない価格変動によって生じるコストのことです。執行戦略が最適な実行価格で指値を待っている、または注文しようとするのを待っている間に発生するランダムな価格変動が原因です。基本的には成り行き注文で起こるリスクであり、指値注文には適用されません。
このリスクの発生原因は、過去の取引データから分析することができます。その際に重要な観点は「出来高のボラティリティ」と「価格のボラティリティ」の関連性を特定したり、「潜在的なマーケットインパクトの不確実性」を織り込んだ戦略を練ることです。
過去の取引データを収集・分析することで「価格変動の原因となった突発的な出来事」を特定し、同じようなパターンが現れたときに対応できるロジックを導入することができます。
B⑥:機会損失
機会損失とは注文を完了できないことに関連する費用のことです。
具体的には、「市場価格が指値価格にかからない」「希望する価格で注文を捌くだけの充分な流動性が存在しない」「価格の急激な下落によって、取引が不採算になり注文がキャンセルされる」ことなどが原因です。
いずれの場合も、市場の流動性を適切に観測する仕組みを持つことで対策を立てることができます。
まとめ
今回まとめた内容は、取引戦略を考える上で基礎となる部分です。
取引戦略に組み見込む際にも、基礎固めが疎かになっていると損失ばかりが膨らむことになります。
基礎的なロジックを理解するとともに、リスク対策やコスト削減を意識したロジックを考えて実装していきます。
また、複合的な観点を盛り込んでロジックが複雑になりすぎないようにするとも重要です。複雑になりすぎた戦略はそれ自体が管理コストを膨らませることになるため、シンプルかつ管理のしやすい戦略設計をすることも重要です。
次回以降の記事でも、引き続き学んだことを取り入れたボット作りに取り組んでいきます。