Bot mmbot 開発ログ

🛠️開発記録#264(2025/7/15)MM(マーケットメイク)スナイプ戦略 ── 勝ち筋 vs 負け筋まとめ(理論編)

最近はMMbot開発に注力しているので、MM戦略の勝ち筋と負け筋の基本を整理しておきます。

⚠️本稿の解説対象は「個人レベルでのMM(マーケットメイク)のスナイプ = マーケットメイカー狩り」です。戦略の特徴などについては、本稿の中盤でざっくり解説します。

MM戦略 ── 勝ち筋 vs 負け筋〈エッセンス〉

✅ 勝ち筋(利益が残る条件)

  1. “純スプレッド”が正
    • spread > maker手数料 + 想定スリッページ + 余裕 (≈0.03 %)
  2. 流動性と板厚が十分
    • 24h出来高 ≥ ¥500 M/depth10×自玉比 ≤ 5 %
  3. 高速応答で先着優位
    • p99 ACK ≤ 120 ms(Time‑Price マッチング向け)
  4. 在庫ニュートラルを維持
    • |NetPos| ≤ 3σ → 超過時は即ヘッジ or Quoteスキュー
  5. ボラが“中程度”で片側連続Fillが続かない
  6. Maker手数料≦リベート
    • BNB払い割引などで実質コストを下げる
  7. 動的スプレッド制御
    • 板薄・急変時に自動的に幅を広げる

❌ 負け筋(避けるべき条件)

  1. spread ≤ 手数料 + スリッページ
    • 0.08 %幅 × maker0.10 % などは理論赤字
  2. 板が薄く、自玉でスプレッドを潰す
    • depth10 に対して自玉 >5 % 置くと即縮小
  3. 一方向トレンドで在庫ハマり
    • 片側ばかり約定 → ヘッジ遅れで大DD
  4. Makerリベートが無い/極小
    • 手数料だけ払って利幅が消える
  5. 高レイテンシー競争環境
    • p99 > 120 ms → 置いた瞬間に抜かれ実効スプレッド縮小
  6. ミドル価格推定が遅延
    • (bid+ask)/2 固定で高ボラ時に中心価格がズレる
  7. Inventory Risk 管理を後回し
    • 勝率55 %でも NetPos 偏りでトータル負け
  8. 深夜帯 JPY 板の“見掛け広スプレッド”
    • 約定しない広がりを鵜呑みにして置いてしまう

✏️ 実践メモ

  • 戦わない判定ルール
if spread_pct ≤ fee_pct + 0.03%: skip pair
if 24h_vol_jpy < 500M: skip pair
if depth10 * 0.05 < my_size: size = depth10*0.02
if p99_latency > 120ms: throttle ½
  • 勝ち筋確保の鍵
    1. まず PairFilter で “期待値マイナス板” を除外
    2. 次に Depth/Latency ガードで負け局面を自動停止
    3. 最後に Inventory ヘッジでトレンド偏りを防ぐ

この3段階を守れば、MMbot は「広すぎず・薄すぎず」の市場で安定した正の期待値を維持できます。

ツッコミ

上記は概念設計としてはだいたい筋が通ってる――つまり「とりあえず爆散は避けられそう」ラインには乗ってる――けれど、まだ “ほつれ” が残っているので順番にディスっていきます。


1. スプレッド=利幅 という単線思考

妥当度:70 %

  • OK な点:「純スプレッドが正」で期待値+という枠組み自体は textbook。
  • 抜け: トキシシティ指標(OFI、VPIN、Markout 等)を無視。見かけプラスでも「約定直後に 2〜3 tick 不利に動く」毒板なら赤字。
    • 処方箋: 約定後 1 s マークアウトを日次ロギング。平均が負ならスプレッド拡張 or quote-skew。

2. 「24 h出来高 ≥ X」式の流動性チェック

妥当度:60 %

  • OK: 整数でカットオフするのは簡単。
  • 抜け: リアルタイム厚みは時価総額じゃなく「キュー位置」。同じ depth10 でも行列 20 ms 先頭と 200 ms 後ろで fill-toxic 度が激変。
    • 処方箋: 自分の queue_pos / depth10 を推計して、後ろ 30 % に落ちたら自動 widen。

3. p99 ACK ≤ 120 ms 信仰

妥当度:50 %

  • OK: レイテンシを KPI に入れたのはエラい。
  • 抜け: **ジッター(標準偏差)**が無視されてる。平均 90 ms でも揺れ幅 150 ms なら実戦アウト。
    • 処方箋: p99/p50 比率をモニタ。1.8 超えたら quote-throttle。

4. 在庫ニュートラル&3 σ ガード

妥当度:80 %

  • OK: シグマ管理は鉄板。
  • 抜け: クロスペア相関を見てない。BTC/JPY と ETH/JPY を別物で管理すると、合算 delta が片寄ってることに気づかず地味に死ぬ。
    • 処方箋: 全ペアを USD 価値換算して “ポートフォリオ σ” でリスク計算。

5. 「ボラが中程度で片側 Fill 続かない」お祈り条項

妥当度:40 %

  • OK: 一方向ラリーは地獄、という認識は正しい。
  • 抜け: イベント・カレンダー(CPI、公示地価発表、ビットコイン ETF 可否 etc.)をトリガーにポジションを寸前で閉じるルールが無い。
    • 処方箋: econ_calendar.json から±3 min で自動 pause。

6. Maker 手数料(リベート)幸福論

妥当度:65 %

  • OK: 手数料が収益の最後の命綱、理解できている。
  • 抜け: Taker 避難口を忘れてる。Maker リベートが消えた瞬間、速攻で片側を Taker でヘッジする手数料コストを計算していない。
    • 処方箋: fee_diff = maker_fee - taker_fee/2 が負なら即キャンセル。

7. 動的スプレッド制御

妥当度:75 %

  • OK: 板が薄い時に widen する発想は王道。
  • 抜け: 流動性クラスタを考慮していない。板が崩れた瞬間、戻りも速い(リバーサル)なら widen が逆に fill 確率を落とすだけ。
    • 処方箋: 崩壊後 1 s の VWAP 距離が平均<1 tick なら spread_backoff を短縮。

8. “深夜帯” リスクの扱い

妥当度:55 %

  • OK: 見掛け広スプレッドを疑っているのは良い。
  • 抜け: サーバーメンテ告知 & API throttle を忘れてる。23:50JST 頃に突如廃板になり約定もヘッジも停止、がある。
    • 処方箋: Exchange ステータス Websocket を監視し “CANCEL_ONLY” モードで強制退避。

9. ファットフィンガー/バグ対策

妥当度:?? %(未言及)

  • “勝ち筋”にも“負け筋”にも 「自前バグで自爆」 が書いてない。典型は:
    • 数値オーバーフロー → 1000× サイズで発注
    • price=0 のテスト値が本番に混入
    • 処方箋: 発注前 assert:size < max_size & abs(px - mid) / mid < 3 %

10. “ここに書いてないヤツ”

  • 取引所リスク:上場廃止、出金停止、ハッキング。→ 保証金分散 or 保険。
  • レギュレーション:JFSA のレバ上限制限が来たらスプレッドと在庫枠が両方死ぬ。

TL;DR — 考え方は7割合格、残り3割は“毒板・ジッター・クロスリスク”に未対処

  • マークアウト & QueuePosで “見えないコスト” を計ってる?
  • レイテンシの振れ幅を KPI に入れろ。
  • ポートフォリオ在庫で σ を測れ。
  • イベントカレンダー停止線を引け。
  • バグ & 取引所リスク=究極の負け筋を忘れるな。

── MM(マーケットメイク)で「生き残る側」と「爆散する側」を分けるざっくり地図 ──

勝ち筋 ≒ “残る利益+残る命”負け筋 ≒ “ドローダウン予告”
① スプレッド & 手数料- 純スプレッド > 手数料+滑り+α
 → α は「毒板マークアウト」も含めて最低 0.03 % くらい積む。
- Maker リベート or 割引をシミュレータ込みで最大活用。
- 表示スプが潰れて有効スプ ≤ コストになる瞬間に突っ込む。
- 手数料変更・プロモ終了を感知せず固定想定のまま走る。
② 流動性 & 板厚- 深さ × 出来高が安定(例:24 h Vol ≥ 動的閾値)。
- 自分の queue_pos が depth10 の先頭 30 % 以内
- 薄板 or 夜間で自玉が板を潰して逆に自分が食われる。
- キュー最後尾で fill→即抜かれ、毒板確定。
③ レイテンシ & ジッター- p99 ACK +その揺れ幅が同業より速い。
- ジッター悪化時は quote-throttle / pause
- 平均 OK でもジッター爆発→スプレッド蒸発を連続被弾。
- レイテンシ監視がなく“遅延沼”に気づかない。
④ 在庫リスク管理- NetPos ≤ 3 σ(σ を 1 s EWMA で更新)。
- 全ペアを USD/JPY 換算して ポートフォリオ σ で管理。
- 自動ヘッジ & Quote Kill が即発動。
- σ が膨張しても窓幅を更新せず、片側 fill ラリーで積み上がる。
- クロスペア相関を無視して “合算デルタ” が膨大。
⑤ 動的スプレッド制御- depth-aware widening:板が 60 % 蒸発→spread × (depth_ratio)^γ。
- 崩壊後のリバーサル検知で即元幅に戻す。
- 固定±倍率しか持たず、板崩壊→ノーフィル or 広げ損ねで被弾。
⑥ 市場トキシシティ- Markout / VPIN をモニタ、毒流入時は widen or 停止。- 見た目スプだけでエントリー→約定直後 2-3 tick 裁定され赤字。
⑦ イベント & 取引所リスク- 経済カレンダー±3 min で全 Cancel。
- Exchange status WS で CANCEL_ONLY 反応。
- 資金・銘柄分散でハッキング/廃止ケア。
- CPI やメンテ開始を板で知る(=知った瞬間もう詰み)。
⑧ 手数料/FX クロス戦略- VIP 実現 or BNB 割引 vs 為替ヘッジを常時比較し最安へ。
- 海外 CEX の Maker リベートをクロスヘッジで取り込む。
- BNB を裸保有でボラ 100 % に巻き込まれ、Fee 分を吐き出す。
- クロス先の USDT/JPY・ガス代を過小評価。
⑨ バグ・オペレーション- 発注前 assert:サイズ/価格 上限
- Heartbeat & Kill-Switch、PnL ドローダウン停止。
- 0 円注文・桁ミス・無限リトライで自爆。
⑩ 定量 vs 経験則 表示- すべて日時付きスナップショット+社内測定ラベル- 公開データと社内ログをごっちゃにし、読者と未来の自分が迷子。

超要約

  • 勝ち筋 = コスト < (スプレッド − 見えない毒) & リスクを測って即止められる。
  • 負け筋 = コストが想定外に膨らむ or 見えない毒が想定外に深いのに突っ込んで、止まらない。

この10本の“ほつれ”を全部縛れば、ようやく 「市場のノコギリで指を落とさずに済む初級免許」 が手に入る。

実際のbot作成&運用においては、上記の理論を取引所ごとにチューニングしていくイメージです。

個人レベルでのMMスナイプ

マーケットメイカー狩り (クオートスナイプ、瞬間アビトラ) を超ざっくり整理してみましょう。


1. 立ち位置:バーに来て他人のタブを奪う客

MMMM ハンター/スナイパー
板への役割流動性を供給流動性を瞬殺で吸う
主な収益スプレッド残りカス「遅れた/ズレた気配」差額
武器在庫管理・広げ縮めアルゴレイテンシ最速・価格予測
主なリスク在庫地獄・毒注文取りこぼし(滑り)・埋まらないヘッジ

2. 勝ち筋(スナイパー編)

  1. “古い or バカ広” クオートを秒速特定
    • スプレッドや mid の“異常乖離”をリアルタイム Z-score で監視。
    • ターゲット=p95 から外れたクオート
  2. 撃つ前にヘッジ先をロックイン
    • クロス板 or デリバティブ側で即反対ポジが取れる 確率 > 99 %
    • 片側だけ fill = “MMに風呂敷預かってもらう” ことになるので本末転倒。
  3. レイテンシは “他人が ACK 受け取る前”
    • 自分→取引所 RTT+ジッター < 競合の p99。
    • 1 ms 遅いと 同じアイデアを抱えた奴が先に吸う
  4. 注文タイプは IOC or FOK ONLY
    • 板に残った瞬間、自分が“狩られる側”に転生。
    • キャンセル受領も遅延リスクなので FOK で確定かつ短 TTL。
  5. 毒見(Markout)を必ず取る
    • 約定 1 s 後に損していないかを毎回記録。
    • “勝率 95 %だけど平均−0.5 tick”なら トータル負け
  6. イベントブラックアウト
    • CPI/FOMC/メンテ直前は MM がクオートを引っ込める → 餌なし市場で自爆。
    • 経済カレンダー±3 min は自動スリープ。

3. 負け筋(ハンターが自爆するパターン)

  • レイテンシ錯覚
    “ping 20 ms だから速いでしょ♡” → 本番は gateway queue で +100 ms。
  • ヘッジ先が同時に固まる
    叩いた瞬間、別の取引所もスプレッド潰れて逃げ場ナシ。
  • クオートが実はアイスバーグ
    「広いスプレッド♪」→ぶつけたら一瞬で 10 x の反対サイズが湧いて死亡。
  • スリッページ地獄
    板に当るサイズがデカすぎて自分の約定で価格が動き、差額が蒸発。
  • 手数料見落とし
    ターゲット差額 4 bp なのに両取引所 taker 手数料合計 3.8 bp → 実利 0.2 bp = 実質マイナス。

4. スナイパー向け“ゆる KPI”

KPI合格ライン
Fill→ヘッジ完了までのΔt< 25 ms
Markout(1 s)> +0.0 tick(負なら死)
成功率(完全両建てでクローズ)≥ 99 %
平均レイテンシ / ジッター< 取引所 p95 / ジッター比 < 1.5
日次 PnL / 期待値比実測 > 0.8 × 理論値(理論と乖離大ならモデル劣化)

5. 一口メモで総括

「他人の広げた傘に速攻で潜り込んで傘ごと奪うゲーム」

成功=傘を奪って雨よけ+差額、失敗=手数料払って傘骨が刺さる。
だから 速さ・ヘッジ確率・毒見統計 の三点セットが揃っているか毎秒チェックしろ、
揃ってないなら 日雇いマーケットメイカー にクラスチェンジしてしまうぞ。

1. ACKって何者?

  • 正式名: Order Acknowledgement(注文受領通知)。
  • いつ来る? あなたが POST /order を投げた直後、取引所が「受け取ったよ、IDはコレね」と返す最初の FIX/REST/WebSocket メッセージ。
  • なぜ重要?
    1. レイテンシ指標 - ts_send → ts_ack が最短でないと、同じアイデアを抱えた速い人に横取りされる。
    2. 生死確認 - ACK が返らない=通信断 or 取引所障害。放置すると“送れてないのにヘッジだけ約定”事故が起きる。

要するに ACK は「注文の心電図」。心拍が遅れたら即 CPR(Cancel-All & Pause)。


2. “餌(見せ板)を撒く”=自作自演 Maker?

MM スナイパー専業なら基本は“餌を狩る側”。
でも 勝ち筋強化という文脈では、小さく流動性を供給するハイブリッド戦略が効く場合があります。

やること得られる果実リスク/必要ケア
① ミニサイズ埋め草
(Best ±1-2 tick に極小 Qty を置く)
- 自分の mid 推定を板に写しておける。
- 他人の“ズレたクオート”が出る確率UP=狩りやすい。
- 逆に自分が毒見役に。
- IOC/FOK で即逃げ or TTL ≤ 50 ms。
② Rebate Farm
(Maker リベートを餌代にする)
- 取引所が -0.02 % Maker なら、狩りミス分をリベートで穴埋め- リベート終了=突然赤字。
- Fee-watcherで即スイッチOFF。
③ Depth Spoof Shield
(1-2% 離れた所に薄い板)
- 他の MM の板潰しを早期検知→先回りヘッジ。- Spoof規制でBANのリスク。
- TTL で自動キャンセル、過剰チカチカはNG。
④ Feel-Out Ping
(板イベント前に極小枚数を置いて流動性反応を見る)
- 実在板か氷山か判定。本物なら狩りGo。- Ping自体が狩られる→手数料負け。
- サイズは「手数料×2 以下」で。

実装メモ

# ミニ埋め草例:Qty 0.001 BTC, TTL 30 ms
if spread_live > target and not event_blackout:
    order_id = post_limit(side='buy', price=best_bid+1, qty=0.001, ttl=30)

3. まとめ

「ACK 遅延は息切れサイン、餌撒きは釣り糸のオマジナイ」

狩り専でも最小限の流動性を撒くと獲物は寄って来る
ただし撒いた餌に自分が引っかかったら本末転倒。
TTL・リベート・イベント停止線を三点セットで装備すれば、
“蚊” のまま 血を吸い逃げできる確率が上がる。

ここから “個人トレーダー視点での MM 幻想 vs 現実” を 4 コマでぶった斬っていきます。

コマよくある解説動画のセリフ実際に起きること
広いスプレッドを見つけたら同時に両建てして利ザヤ確定!」その板、あなたより速い BOT が 200 台監視中。置いた瞬間 Ask だけ吸われて在庫沼へダイブ。
片側 fill したら すぐ逆サイドも約定するので在庫リスクはゼロです」すぐ”=乱数。秒単位で逆走 → ヘッジを成行で投げた瞬間スプレッド蒸発、手数料で赤字完成。
レイテンシ? ping 30 ms なら十分30 ms = 永遠。本職は 300 µs 台。結果、あなたが Liquidity Provider 役(=養分)に昇格。
個人でも日利 0.5 % 余裕微益を 200 回重ねる前に 1 回のイベントでドローダウン −10 %。帳簿もメンタルもフラットライン。

個人が “瞬間乖離抜き” をやるなら最低限知っておく地雷マップ

  1. 板が薄い ≠ スプレッドが抜ける
    • depth10 がショボいほど 自分の成行で価格を動かす。利幅が自分の足で消滅。
  2. 手数料と滑りを 2 倍盛りで見積もる
    • 動画は手数料 0.1 %×2 だけ計算 → 滑り 0.05 %×2 を忘れて爆死。
  3. ヘッジ先の“回線混雑”
    • 国内取引所はメンテ時間前後で注文が固まる → 両建ての片足が宙づり。
  4. イベント無警戒は一撃死
    • CPI・雇用統計・ETF 可否報道… 予約投稿で YouTuber が動画を上げる頃にはもう遅い
  5. 資本効率とポジサイズ
    • 100 万円で BTC/JPY を 0.02 BTC ずつ刈っても 年 5 桁円の世界
    • レバを掛けに行くと在庫ショックで 1 回退場。

「それでもやるなら」チェックリスト(ミニ版)

項目合格ライン
ラウンドトリップ手数料 (双方向)< 差額の 40 %
ping→ACK< 100 ms & ジッター < 50 ms
ヘッジ成功率≥ 99 %(失敗 1 % で PnL が 0 になる計算)
Mark-out(1 s)平均 ≥ 0 tick
イベント停止線経済指標 ±3 min は自動 pause

学びの近道(=手抜き指南)

  1. 板 WebSocket ログ を 1 日垂れ流し → 自分の脳で “毒板” と “空白” を可視化。
  2. 超小ロットで 100 回テスト → fill 後 1 s PnL を Excel プロット。
  3. 手数料・滑り・失敗ヘッジを全部差し引いて 理論値と照合 → 食えるか即判定。
  4. 食えそうなら 自前 kill-switch(p99 ×2 over, PnL -3σ) を先に書く。

ワンフレーズで締め

「個人 MM は ‘他人の落とした小銭を拾う競争’。
先に拾われたら、そのまま ‘小銭を落とした人’ になる。」

勘で突っ込むより、まず板ログを見て“拾える小銭が本当に転がっているか”を数字で確認。
それが 個人レベルで瞬間乖離を抜く唯一の現実的スタート地点です。

-Bot, mmbot, 開発ログ