高頻度MMbotのスケーリングアイデアを8つまとめました。
高頻度MMの知見は以下の戦略にもシナジーがある。8月は開発をスケールさせていく。
・クロス CEX/DEX arb
・perp‐spot “ベーシス”/Funding arb
・清算スナイプ & 部分清算ループ
・オプション ガンマスキャルピング & ボラMM
・統計アービトラージ(ペア/PCAモデル)
・MEV サンド/バックラン— よだか(夜鷹/yodaka) (@yodakablog) July 25, 2025
今回の記事で扱うのは以下の4つです。
・オプション Γ(ガンマ)スキャルピング
・Statistical / Pairs Arbitrage
・DEX Concentrated-LP Rebalancing
・MEVプライオリティトレード
暗号資産のデリバティブ領域は日本居住のままで実戦に移そうとなると規制面で引っかかることが多くて煩わしいな。実用上は 「清算先の国籍制限 × FSA のデリバティブ規制」 がボトルネックでDeribit系や Binance系デリバティブはほぼ触れず、CME系やオンチェーン現物 RFQ が現状の選択肢、みたいな。
— よだか(夜鷹/yodaka) (@yodakablog) August 2, 2025
オプション Γ(ガンマ)スキャルピング ― 実装ガイド
目的:Γ > 0(価格変動に対して収益が凸)のポートフォリオを構築し、
underlying が動くたびに 秒〜分足のデルタヘッジ を回して “ガンマを刈り取る”
(=小さな値動きでも確定利益を積む)
1. 基本概念をおさらい
| 記号 | 意味 | 実務での解釈 |
|---|---|---|
| Δ(デルタ) | 価格変動¹次感度 | 今この瞬間の方向性リスク |
| Γ(ガンマ) | Δ の感度 | “曲率” ⇒ ポジが凸なら動くほど儲かる |
| Θ(シータ) | 時間価値減衰 | Δヘッジで削れない “時間コスト” |
| ν(ベガ) | IV 変化感度 | IV クラッシュで Γ収益が吹き飛ぶ |
戦略コア:
- Γ > 0 を確保(例:ATM オプション買い/ロング straddle/strangle)
- underlying が ±Δp 動くたびに、Δ をゼロに戻す(現物 or 先物で反対ポジ)
- 得られた スキャルピング α = Σ(Δhedge * Δp) が Θ を上回れば勝ち
2. システム全体図
graph LR
P(Price Feed) --> D(Delta-Gamma Engine)
O(Option Greeks Feed) --> D
D -->|"hedge order"| R(Route Executor)
D -->|"quote RFQ"| Q(RFQ Handler)
R --> E(Exchange Adapter)
Q --> E
E --> I(Inventory Manager)
I --> D
M(Metrics & Alert) --> D
M --> I
RFQ Handler は大口ヘッジを Paradigm / 0x で一括決済するときに使用。
3. モジュール詳細
| モジュール | 主責務 | 実装ポイント |
|---|---|---|
| Price Feed | underlying の tick (50 ms WS) | MMで使用中のものを再利用 |
| Option Greeks Feed | Δ, Γ, Θ, ν を 250 ms 毎に pull | Deribit private/get_positions 等 |
| Delta-Gamma Engine | Γ>0 ポート構築・Δヘッジ頻度決定 | アルゴ: target_Δ = 0; target_Γ ≥ Γ_min |
| Route Executor | 指値/IOC/Block Order でヘッジ | dual-leg ロジックそのまま |
| RFQ Handler | size>block_thresh で RFQ発行 | Paradigm, WOO Block, 0x RFQ |
| Inventory Manager | 在庫上限 & Cash/Collateral 管理 | hot-wallet=在庫モデル |
| Metrics & Alert | Γ収益, Θコスト, IVリスクを Slack | Prometheus/Grafana 共通基盤 |
4. Gamma ポジの作り方(3パターン)
| 手法 | Γ確保 | Θコスト | 流動性 | メモ |
|---|---|---|---|---|
| ATM Straddle | ◎ | ▲ | ◎ | buy ATM Call + Put。同数。 |
| Wing Strangle | ○ | ○ | ◎ | buy OTM Call + Put。Θ小。 |
| Calendar Spread (long near, short far) | ◎ (net Γ>0) | ○ | ○ | 横軸勝負。要 ν管理。 |
Γ_min は資本の 20–30 delta equivalent を目安。
5. Delta-Hedge アルゴリズム
def hedge_loop():
while True:
u_px = price_feed.last()
greeks = option_feed.greeks() # {'delta':-, 'gamma':-, ...}
d_err = greeks['delta'] + inv.delta # net Δ
if abs(d_err) > cfg.delta_band:
qty = -d_err / 1 # 1 = Δ per contract for underlying
route_executor.exec_market(qty) # or IOC limit
time.sleep(cfg.hedge_interval_ms/1000)
- delta_band:±0.3 % notional / ±n Δ でトリガ。
- hedge_interval_ms:50–500 ms(板厚次第で可変)。
- 在庫キャップ:
|inv.delta| < cap,|inv.gamma| < 1.5×target.
6. IV クラッシュ & 流動性断絶へのガード
| リスク | シグナル | アクション |
|---|---|---|
| IV クラッシュ | iv_zscore < -2 or 24h ν PnL < -Θ*0.5 | Γポジ 20 %削減(RFQで一括売却) |
| 板枯れ | bid_depth < depth_min for 3 s | hedge_interval ×2, 指値スプレッド拡大 |
| モニタ停止 | feed latency > 1 s | Circuit Breaker: all new hedges OFF |
νリスク は sell wing options (vega hedge) or long upside call spread で抑える。
7. RFQ 併用フロー
- size > block_thresh(例:> BTC 10 Δ相当)
rfq = {"side":"SELL","inst":"BTC-PERP","qty":Δ_eq}→ Paradigm WS- best_quote ← 200 ms 集約 → accept → block trade
- Route Executor で反対 legs を同時に閉じる
ブロック MM で説明した Quote Engine をそのまま流用可。
8. KPI & 監視指標
| KPI (rolling 24 h) | 目標 | Alert |
|---|---|---|
| Γスキャルピングα / Θ | ≥ 1.3 × | < 1.0 × |
| net Δ 偏差 | ≤ 0.3 % notional | > 0.5 % |
| ν PnL | > 0 | < 0 |
| RFQ フィル率 | ≥ 40 % | < 20 % |
| 最大 DD | < -5 % | ≥ -5 % |
Slack 通知例:
[GammaBot] ✅ α/Θ = 1.42 | Γ 380 | νPnL +0.004 BTC | Δ 0.02 % [GammaBot] ⚠️ νPnL -0.002 BTC (<0)
9. PoC 14 日ロードマップ
| 日 | マイルストーン |
|---|---|
| 1–2 | Price & Greeks feed scaffolding(Deribit) |
| 3 | Gamma Portfolio Builder(straddle/strangle) |
| 4–5 | Delta-Hedge loop + inventory limits |
| 6 | RFQ Handler接続(Paradigm Dev environ) |
| 7–8 | Backtest (past 30 d) → α/Θ >1 判定 |
| 9–10 | Shadow Mode(Δ size 0)→ latency & fill check |
| 11 | 小ロット live (資本 0.5 %) |
| 12–14 | IV crash / liquidity guard tune, KPI dashboard |
TL;DR
- Γ>0 ポジ(ATM straddle など)を構築。
- 秒〜分足 で Δ が外れたら underlying で即ヘッジ
→ スキャルピング α 獲得。 - Θコスト + ガス/手数料 + νリスク を常時計測し、
α/Θ > 1.3が続く限りロール継続。 - 流動性不足や大口決済は RFQ で一撃処理。
モジュールはほぼ MM で使っている dual-leg 発注・在庫キャップ・モニタリング の再利用で済む。
まずは小資本で PoC を回し、α/Θ と νドローダウン が許容範囲か数字で確認する。
Statistical / Pairs Arbitrage ― 実装ガイド
目的:複数銘柄の過剰乖離を分単位で検知し、平均回帰(Mean-Revert)の瞬間に 両建て で抜く。
基本フロー:
- ペア発掘(日次) → リアルタイム乖離検知(rolling z-score) → 同時発注(µs-級)
- ポジ解消:スプレッド 0 回帰 or 時間切れ/ストップに達したらイグジット
1. 全体アーキテクチャ
graph LR
D(Data Collector) --> F(Feature Store)
F --> P(Pairs Finder)
P --> S(Signal Engine)
FT(Feed Taker) --> S
S -->|"long / short"| R(Route Executor)
R --> E(Exchange Adapter)
E --> I(Inventory Service)
I --> S
B(Backtest Engine) --> P
B --> S
M(Metrics Alert) --> S
M --> I2. データ収集 & Feature Store
| 項目 | 設定 | 実装ヒント |
|---|---|---|
| 粒度 | 1 s or 5 s mid-price(高ボラなら 100 ms) | MM の PriceFeed をリサンプリング |
| 保管 | columnar Parquet, partition = symbol/date | PyArrow & DuckDB → 秒単位でも高速 |
| 特徴量 | log-return, z-score, rolling std(30 min) | 追加で volume, skew if spot & perp |
3. ペア発掘ロジック(毎日 00:05 UTC)
3-1. PCA ファクタモデル
X = np.stack([log_price[s] for s in universe], axis=1) X = (X - X.mean(0)) / X.std(0) pca = PCA(n_components=k).fit(X) residual = X - pca.inverse_transform(pca.transform(X)) corr = np.corrcoef(residual.T)
- k:説明分散 80–90 %(典型的に 3-4)
- 上位 corr < -0.2(負相関大) or > 0.8 を候補へ。
3-2. 距離メトリクス & Cointegration
- ADF test p-value ≤ 0.05
- Hurst exponent < 0.5
- Mahalanobis distance < thresh → 類似歩調。
自動再計算:全ペア数 nC2 ⇒ n≈50 の universe でも ~ 1 250 ペア。DuckDB + NumPy で 30 s 内に完了。
4. シグナル生成(Signal Engine)
def spread(s1, s2):
beta = hedge_ratio[s1,s2] # from linear regression
return log_price[s1] - beta*log_price[s2]
z = (spread_now - roll_mean) / roll_std
entry = abs(z) > z_entry # e.g. 2.0
exit = abs(z) < z_exit or t > max_hold
| パラメータ | 典型値 | コメント |
|---|---|---|
z_entry | 2.0–2.5 | 過剰乖離検知 |
z_exit | 0.5 | 平均回帰確認 |
max_hold | 60 min | 流動性喪失避け |
- 自適応バンド:
roll_stdは 30 min EWMA、分単位で更新。 - スリッページ調整:
edge_adj = z * roll_std - est_slip。edge_adj < 0 なら skip。
5. Route Executor(発注)
- 同時注文:
POST /batchOrdersor multi-call SDK - 注文種別:IOC / FOK、slippage ≤ 0.05 % wrapped
- レイテンシ最短化
- 原資 MM Trader の gRPC 発注パイプを再利用
- 同一 NUMA→socket pinning → µs 低減
6. Inventory & Risk
| ルール | 具体設定 |
|---|---|
| max_notional_per_pair | ≤ 2 % 総資本 |
| max_open_pairs | 10–20 |
| drawdown_stop | DD pair ≤ -1 % → 強制 exit |
| diversification | 極端な β 重複を避ける(PCA ローディング上限 0.3) |
ポジションクローズは Inventory Service で一括管理。
7. バックテスト & Online Refit
- Backtest Engine(既存 MM の tick-sim 再利用)
- 仮想委託 x-ray:fill ルール=BestBid|Ask ± slip。
- パフォ指標:Sharpe > 1、Win_rate > 55 %、roll-maxDD < -5 %。
- Walk-Forward:30 d train → 7 d test → 日次リフィット。
8. KPI & Monitoring
| 指標 | 目標 | Slack Alert |
|---|---|---|
| Sharpe (30 d) | ≥ 1.2 | < 0.8 |
| Hit rate | ≥ 55 % | < 45 % |
| Avg Slippage | ≤ 0.05 % | > 0.1 % |
| Max DD pair | > -3 % | ≤ -3 % |
| Latency order→fill | < 150 ms | > 300 ms |
9. PoC 14 日ロードマップ
| Day | マイルストーン |
|---|---|
| 1–2 | Collector + Feature Store pipeline (1 s bar) |
| 3–4 | Pair Finder(PCA + ADF) + Daily cron |
| 5–6 | Signal Engine(z-score) + unit tests |
| 7 | Route Executor hook(reuse MM Trader) |
| 8–9 | Historical backtest (30 d) → param tune |
| 10–11 | Shadow mode:0 size / latency & fill stats |
| 12 | Live min-notional 0.5 % 資本 |
| 13–14 | KPI dashboard + risk guards (DD stop, slip alert) |
TL;DR
- 日次:PCA & cointegration で “今日の仲良しペア” を生成。
- 分単位:z-score が±2σを超えた瞬間、同時両建て → 平均回帰でクローズ。
- MMの高速発注・在庫管理 をそのまま流用し、Fill レイテンシ < 150 ms を確保。
- Backtest → Shadow → 小ロット運用で Sharpe > 1、Win_rate > 55 % が続くかを検証して本格投入へ。
DEX Concentrated-LP Rebalancing ― 実装ガイド
目標:Uniswap v3/v4・Pancake v3・Hyperliquid LPD などの CLMM (Concentrated-Liquidity Market Maker) で、
1️⃣ ズレクオート(Dynamic Spread)+ 2️⃣ 帯幅の自動再配置 を実行し、
手数料 APR を極大化しながら impermanent loss (IL) を最小化する。
新課題は ガス最適化 (L1/L2 差異) と IL 事前シミュレーション。
DEX Concentrated-LP Rebalancing の “そもそも”
| 視点 | 内容 | 一言で |
|---|---|---|
| どこで | Uniswap v3/v4・Pancake v3・Hyperliquid LPD など CLMM (Concentrated-Liquidity Market Maker) 型プール | 「価格帯を自分で決める流動性プール」 |
| 何を | ① 帯域(レンジ)を設定して流動性を置く → ② 価格が帯域を外れたら burn → 新しい帯域へ再配置 を自動で繰り返す | 「板読みMMを LP 帯に変換し、常に“価格の近く”に流動性を張り直す」 |
| 狙い | 1) 手数料収入を最大化(スプレッドを狭めて出来高を集める) 2) Impermanent Loss(IL) を抑える(価格乖離が進む前に撤退) | 「手数料>IL を保ち続ける」 |
| 武器 | MMで使う ‐ スプレッド決定ロジック → 帯幅(k σ) ‐ 板厚・ボラ計測 → 再配置タイミング | 既存 MM アルゴを“帯”に置き換えるだけ |
| 課題 | <ul><li>ガス代:L1 は高い→リバランス頻度を抑制 or L2 へ</li><li>IL:急騰急落時に焼かれる→シミュレーションと自動退出</li></ul> | コストとILが敵 |
仕組みを流れで見る
- 価格フィード取得
- CEX や DEX オラクルで現在価格とボラσを 1 s〜1 min 間隔で取得
- 帯域を決定
- 例:現在価格P、幅 = k σ (k=1〜1.5)
- → 下限 P·(1-幅), 上限 P·(1+幅) に mint して流動性を集中
- 手数料を稼ぐ
- 価格が帯域内に留まる間、トレードが起こるほど手数料が積み上がる
- ドrift検知 & 再配置
- Mid が帯域中心から 20-30 % ずれたら burn → 新帯域へ mint
- Uniswap v4 Hook や multicall で 1 Tx にまとめガス節約
- ILモニタ
- シミュレーションで「手数料 < 予想IL」なら離脱 (一度トークン化)
- ガス/ROI ガード
ガスコスト / 見込み手数料 < 0.2など閾値を満たすときだけ実行
何が嬉しいの?
| 従来 (固定幅 LP) | Concentrated-LP Rebalancing |
|---|---|
| 広い帯域に資金を薄く撒く → APR が希薄 | 価格の近くに資金を濃く置く → 高 APR |
| 価格乖離が進むほど IL が拡大 | 外れたら即 burn → IL を限定 |
| ほぼ放置だが ROI 低い | 自動再配置で手間はコード任せ |
抑えておくリスク
- 急激な価格ジャンプ
→ 再配置が間に合わず IL が跳ね上がる - ガス高騰
→ リバランス頻度を落とす / L2 へ逃がす - 出来高低下
→ 手数料が稼げず、IL だけ抱える “負けパターン” に - スマコン更新(Uniswap v4など)
→ Hook 仕様変更で bot が動かなくなる
まとめ
DEX Concentrated-LP Rebalancing は
板読み MM の「スプレッド調整」と「在庫リバランス」を
そのまま CLMM の「帯幅」と「再配置」に置き換え、
手数料で IL を上回らせる自動 LP 戦略
です。
CLMM の “自分で価格帯を決められる” 性質を活かし、常に市場の中心に流動性を集中させることで
薄利 MM より高 APR を狙いつつ、ボラが大きく動けば即帯域を移動して損失を限定します。
1. システム全体
graph LR
P(Price Feed) --> B(Band Manager)
V(VOL & Skew Feed) --> B
G(Gas Oracle) --> X(Tx Router)
B -->|"mint / burn bands"| X
D(Data Lake) --> S(IL Simulator)
B --> S
X --> A(DEX Adapter)
A --> I(Inventory & Fees)
I --> B
M(Metrics & Alert) --> B
M --> I
2. モジュール詳細
| モジュール | 主要責務 | 実装ポイント |
|---|---|---|
| Price Feed | 100 ms mid-price(CEX best bid/ask or TWAP oracle) | 既存 MM PriceFeed を再利用 |
| VOL & Skew Feed | 1 min EWMA σ, order-flow skew | Uniswap v4 Hook “TimeConcentrate” 参照 GitHub |
| Band Manager | 価格帯・幅の計算、mint/burn決定 | dynamic_spread → [P-w/2, P+w/2] |
| Gas Oracle | baseFee, priorityFee, L2 gasPrice | EIP-1559 or L2 RPC |
| Tx Router | batch mint/burn, multicall, fee-tier 選択 | L2 なら multicall3 でガス削減 |
| DEX Adapter | Uniswap v3/v4, Pancake v3, Hyperliquid LPD | v4 では Hook 経由で一括実行 arrakis.finance |
| IL Simulator | forward Monte-Carlo & closed-form IL | formula ΔIL = (2√r / (1+r)) – 1 cointracker.io |
| Inventory & Fees | 現在 LP ポジ・未収手数料・ガス残高 | LP-token 窓口をホットウォレット化 |
| Metrics | APR, IL%, gas/fee ratio, rebalance PnL | Prometheus → Grafana |
3. バンド設計アルゴリズム
def compute_band(mid, vol, skew, cfg):
# 1. width from vol (1σ ≈ vol * sqrt(dt))
width = cfg.k_sigma * vol * math.sqrt(cfg.dt)
# 2. dynamic skew adjustment (buy/sell pressure)
shift = cfg.skew_coef * skew # skew ∈ [-1,1]
lower = mid * (1 - width) * (1 - shift)
upper = mid * (1 + width) * (1 + shift)
return round_tick(lower), round_tick(upper)
| パラメータ | 典型値 | 解説 |
|---|---|---|
k_sigma | 1.0-1.5 | “1σ-1.5σ” 幅で 70-85 % 滞留 |
dt | 4 h | 市場状態が変わるまでの平均時間 |
skew_coef | 0.15 | order-flow skew を ±15 % シフト |
MM の dynamic spread パラメータを width に写像しているだけ。
4. 自動 Rebalance フロー
| ステップ | 条件 | アクション |
|---|---|---|
| 1. Monitor | ` | mid - band_center |
| 2. Re-compute | compute_band() で新帯域 | mint concentrated LP 新帯域 |
| 3. Gas Guard | gas_cost/new_band_fee > roi_min | if True → skip / delay |
| 4. Fee Harvest | uncollected_fees > fee_thresh | claim fees 同 tx で複合 |
Uniswap v4 の Hooks を使えば burn+mint+fee-claim を 単一 Tx にまとめられ、
ガス削減 & MEV 保護が可能 Medium。
5. ガス最適化 (L1 vs L2)
| テクニック | L1 (ETH) | L2 (Arb, OP, zk) |
|---|---|---|
| Multicall | multicall3 で 10-20 % 削減 | ほぼ必須、Tx 数削減 |
| Bundler / Builder | Flashbots + 1559 | 可。baseFee 抑制効果小 |
| Batch Range Update | 15-30 bps ガス削減 | negligible gas, 速度優先 |
| TimeConcentrate Hook | +α ガス増 | 無視できる |
実践指針:L1 では 4 h 毎、L2 では 1 h 毎 のリバランスが一般的。
6. Impermanent-Loss (IL) シミュレーション
- インパーマネント・ロス(IL)の準閉式準閉式:IL(r) = (2 * sqrt(r) / (1 + r)) - 1
・r はポジションを組んだ価格 P₀ に対する、現在価格 Pₜ の比率r = Pₜ / P₀
・sqrt(r)は r の平方根です
・返り値は負の値(=損失)になる。手数料収入が IL を上回れば総合計でプラスになる見込み。
cointracker.io - Monte-Carlo:
- Generate GBM paths with
σ=volover horizonT. - For each path compute IL & fee income.
- Decide
k_sigmasuch thatE[fee] - E[IL] > roi_target.
- Generate GBM paths with
- Hook-based off-chain preview (Uniswap v4):
simulate()returns fee + IL vs gas before broadcasting.
7. リスク & ガードレール
| リスク | モニタ変数 | ガードレール |
|---|---|---|
| 急騰急落 (“gap”) | ` | ΔP |
| Long-tail IL | IL_sim > IL_max | widen band or exit |
| Gas Spike | baseFee > base_thresh | freeze rebalances |
| Low Volume | fees_per_hour < fee_min | widen band, harvest only |
8. KPI
| 指標 | 目標 | Alert |
|---|---|---|
| Fee APR (net) | ≥ 20 % | < 12 % |
| IL / Fee Ratio | ≤ 0.6 | > 0.8 |
| Avg Rebalance Gas / Fee | ≤ 0.2 | > 0.3 |
| Band Utilization (time in-range) | ≥ 80 % | < 60 % |
Slack 通知例:
[CL-LP] ✅ APR 24.3 % | In-range 83 % | IL/Fee 0.55 | Gas/Fee 0.18 [CL-LP] ⚠️ Gas spike 220 gwei, rebalances paused
9. PoC 14日ロードマップ
| Day | Deliverable |
|---|---|
| 1–2 | Price & vol feed + Band Manager prototype |
| 3 | Gas Oracle + Tx Router (v3/v4) |
| 4–5 | IL Simulator (closed-form & Monte-Carlo) |
| 6 | One-click burn+mint Hook (Uniswap v4 Devnet) |
| 7–8 | Backtest vs static LP (30 d) → param tune |
| 9–10 | Shadow on L2 testnet, auto-gas / fee log |
| 11 | Mainnet L2 pilot (0.3 % 資本) |
| 12–14 | KPI dashboard, alert rules, ROI review |
TL;DR
- Dynamic Spread → Band Width に単純マッピングし、
mid±kσのレンジで LP。 - Price drift > tol ごとに burn→mint をワンショット Tx(Uniswap v4 Hook or multicall)。
- リバランス前に IL シミュレーション+Gas / Fee ロジック を回し、
Expected Fee – (IL + Gas)がプラスのみ実行。 - L1 は 4 h 周期/L2 は 1 h 周期が目安。
まずは L2 テストネットで Shadow → 小口 live。
Fee APR > 20 % & IL/Fee ≤ 0.6 を 2 週間キープできれば本格投入へ。
MEVプライオリティトレード― 実装ガイド
— “μs級オーダーループ” を EVM Tx + Private Bundle に置き換え、サンドイッチ/バックランで α を取る —
「MEV プライオリティトレード」とは?
| 要素 | 意味 | キーワード |
|---|---|---|
| MEV (Maximal Extractable Value) | ブロックを作る側 (バリデータ・ビルダー) が 「どのトランザクションをどの順番で入れるか」を操作することで、ガス手数料やブロック報酬を超えて追加で抜き取れる価値。 | 取引の 並べ替え/挿入/除外 ethereum.org |
| Priority Trade (プライオリティ取引) | その MEV を取るために、取引の掲載順位を買いに行く行為全般。 検索者(bot)は「ガスを吊り上げる」「ビルダーに私設バンドルを賄賂付きで送る」などで 自分の tx を優先実行させる。 | Priority Gas Auction (PGA)、Flashbots Private Bundle MEV WikiFlashbots Docs |
ざっくり言えば 「“並べ替え権” をお金で奪い合う短期トレード手法」 が MEV プライオリティトレードです。
どんな種類がある?
| 大分類 | ブロック内での相対位置 | 典型シナリオ | 価値の出どころ |
|---|---|---|---|
| フロントラン (Front-run) | 被害者 tx の前 | 大口スワップの手前で同方向成行→直後に利確 | 被害者のスリッページ |
| バックラン (Back-run) | 被害者 tx の後 | プール価格が歪んだ瞬間を追従 → 次ブロックで戻り取り | 価格歪みα |
| サンドイッチ | 前+後の 2 tx | Buy⇢Victim Buy⇢Sell で往復取り | 両側スリッページ |
| PGA アービトラージ | 任意 (競り勝つまで) | 複数 bot が同じ裁定を見つけ、優先ガス競争で抜く | プール間価格差 |
| JIT 流動性 | Swap の直前で Mint, 直後で Burn | CLMM(集中LP) に一瞬だけ入る | 手数料+α |
| 清算スナイプ | 清算 tx の直後 | レバ強制決済を横取り | 清算報酬 |
| オラクル操作系 | オラクル更新の前 | 推し上げ→清算→戻す | 清算/価格差 |
これらはすべて 「順番さえ取れれば無リスク or 超低リスク」 なので、
bot 同士が PGA(ガス吊り上げ戦) に陥りやすい仕組みです Collective Shift。
仕組み:何を“買って”いるのか?
- 公開メンプール (lit route) で
ガス価格 -→ max gas ≒ 期待α まで入札競争。 - プライベートバンドル (dark route) で
ビルダーへ ブロック内挿入順位 を“賄賂”付き発注。- Flashbots Relay / Titan / bloXroute などを利用 Flashbots Docs。
- Validator/Bundler がより高い贈与 (priority fee) を優先し、
順番権を落札した bot が α(裁定利益) − 手数料 を獲得。
どうして“μs級 HFT ロジック”が効くのか?
- 取引探索:メンプールから平均 10 ms 以内 に価格インパクトを推測
- バンドル生成:50 ms 未満で gas, nonce, access list を計算
- 送信:ローカルノード IPC → Builder Relay へ TCP keep-alive
→ ブロック締切まで 100–200 ms の余裕を確保
この速度要件は、あなたが既に使っている HFT-MM の μs級オーダーループ と共通で、
“REST 注文 → EVM Raw tx” に置換するだけで PoC が動きます。
価値だけでなくリスクも“大”
| リスク | 説明 | 主な対策 |
|---|---|---|
| ガス焼損 | PGA で α を超える入札をして赤字になる | 期待 α /gas 比をシミュレータでチェック |
| 規制・ToS違反 | UI が front-run 禁止、証券法上の市場操作に該当 | プロトコルごとに ToS/Ethics ガードを実装 |
| ユーザ反感 / センサリング | 被害者からリライト訴訟、Builder の blacklist | Private Order-flow (MEV-Share) を尊重 |
| 技術衝突 | Reorg・同梱失敗で取りっぱぐれ | Bundle revert 条件を設定し損失ゼロ化 |
まとめ
- MEV=「ブロック内並べ替えで抜ける追加価値」
- プライオリティトレード=「その価値を取る順番権を買う競り」
- 主な手口は Front / Back / Sandwich / PGA / 清算 / JIT など、
すべて “取引順序 × μs レイテンシ” が勝敗を分けます。 - 技術は 既存 HFT-MM の高速オーダーループ+ガス入札ロジック の組み合わせで流用可能。
- ただし 規制・倫理ライン が曖昧な領域も多く、
ToS と法規制を踏まえた撤退基準 をコードに埋め込むのが実運用の鍵。
1. 戦略概要
| 型 | 狙い | 必要シグナル | 収益源 |
|---|---|---|---|
| サンドイッチ(Sandwich) | ユーザ成行の前後に買→売/売→買を挟みスリッページを奪取 | ①入射Tx が価格を±x bps以上動かす予測 ②対面ペアの板厚 | 被害者のスリッページ |
| バックラン(Back-run) | 価格を動かすTxの直後で方向一致ポジを取り、次Tickで利確 | ①ターゲットTxで価格歪み ②1–2 blkで元値回帰しやすい銘柄 | Price-impact α + AMM手数料リベート |
コアは order-flow 予測 × レイテンシ競争。既存 MM の µs ループを「pendingTxストリーム → Bundle送信」に差し替えれば PoC が動くようになる。
2. システム構成
graph LR
M(Mempool Sniffer) --> C(Classifier)
S(MEV-Share / Private OF Stream) --> C
C -->|"victim tx & trade plan"| B(Bundle Builder)
G(Gas Oracle) --> B
B -->|"bundle"| R(Builder Relay)
R --> N(Local Node RPC)
N --> P(PnL Tracker)
P --> A(Alert)
E(Ethics Guard) --> C
E --> B
- Mempool Sniffer:geth/parity RPC の
txpool.content+ p2p gossip - MEV-Share:Flashbots private order-flowイベント Flashbots Docs
- Builder Relay:
https://relay.flashbots.netなど Flashbots Docs - Ethics Guard:規制・ToSフィルタ(後述)
3. オーダーフロー予測
| ステップ | ロジック | 実装ヒント |
|---|---|---|
| Tx 解読 | decode_input(data) → swap, addLiquidity… | 0x/UniV3 ABI キャッシュ |
| 価格インパクト推定 | impact = size / depth(level) | AMM なら Δx=... 公式 |
| 被災者判定 | impact > cfg.min_bps & 💸 ≥ min_notional | 帯域外はスキップ |
| 方向決定 | Buy→Sand(Buy先行-Sell後) / Back(Buy後) | ルックアップテーブル |
並列化:Rust or C++ で tx feed → lock-free queue。
レイテンシ目標:< 25 ms でバンドル構築。
4. Bundle Builder & Gasマネジメント
bundle = [
my_front_tx, # sandwichの場合
victim_tx, # 要同一nonce除外
my_back_tx
]
bundle_params = {
"txs": [tx.raw for tx in bundle],
"block": current_block + 1,
"minTimestamp": now,
"maxTimestamp": now + 1200, # 20 min
"revertingTxHashes": [] # front/backが失敗したらbundle反転
}
relay.send_bundle(bundle_params)
- gas_limit:
simulate()→ +10 %。 - priority_fee:
tip_coef * sqrt(pending_tx)動的計算。 - baseFee上限:
eth_feeHistory→ 95%tile 超なら skip。
失敗 Tx は Bundle Cache API で即再利用 Flashbots Docs。
5. レイテンシ最適化 Tips
| レイヤ | 手法 |
|---|---|
| ネットワーク | 100 GbE → buildersへ常時 TLS keep-alive |
| ノード | geth --txpool.nolocals --cache=4096 --http=false --authrpc.addr=... (IPC直結) |
| プロセス | Sniffer → Classifier → Builder を同 NUMA ソケットに配置し busy-spin |
| コード | SIMD memcmp で ERC-20 アドレスフィルタ / 逐次 branch-less |
6. Ethics & Regulation Checklist
| 項目 | 必須アクション | ソース |
|---|---|---|
| OFAC/制裁リスト | Builder/Relay が OFAC準拠か確認;Tx 先アドレスを SDN 再走査 | Figment |
| EU/ESMA 提言 | Market-manipulation懸念あり → 月次レポート保存 | esma.europa.eu |
| 取引所 ToS | DEXによっては“sandwich禁止”条項 → 黙認不可 | プロトコルdocs 1inch Network Sushi Labs |
| ユーザ保護 | MEV-Shareなど“公開”ルートを尊重;private orderflowは侵襲しない | Flashbots Docs |
| 撤退基準 | ①法改正・警告②Builderブラックリスト入り③hit_rate<20% ④net_PnL<0%/週 |
Ethics Guard コンポーネントで Txごとに K/KYC リスト & ToS 非遵守チェック → NGなら skip。
「“sandwich(=front-running)の禁止条項」が明記されている代表的な DEX ToS 例
| DEX/UI | 条文抜粋 | 該当条項の主旨 |
|---|---|---|
| 1inch Network Interface (2025-07-08版) | “You agree not to … use … front-running tools, sniper or arbitrage bots …” 1inch Network | インターフェース経由で自動 bot や front-running(=サンドイッチを含む)に利用すること自体を禁止。 |
| Sushi.com Terms of Service (2024-10版) | “Use the Services for market manipulation (such as … front running …) is prohibited.” sushi.com | サービスを通じた front-running/サンド行為を “市場操作” として明確に禁止。 |
ポイント
- “サンドイッチ攻撃” は法的には front-running の一形態なので、ToS では front-running tool / market-manipulation の一括禁止でカバーされるケースが多い。
- CoW Swap や 1inch Fusion など “MEV-resistant” を謳う UI は ToS で明確に攻撃を禁じる一方、Uniswap v3/v4 のように 禁止を明文化していない UI もある(代わりに MEV FAQ でリスクを啓蒙)。
どう読み替えればよいか
- ToS で front-running が禁止 ⇒ サンドイッチも不可
- bot 実装者側はインターフェースを迂回(オンチェーン直接呼び出し)しても、規約違反リスクを完全に排除できるとは限らない。
- ToS に禁止記載がない ⇒ “黙認” ではなく自己責任
- コントラクト自体は permissionless でも、UI/ブランド側の利用規約違反で API Key BAN 例もある。
実運用では 「利用 UI の ToS+各国規制」 を二重に確認し、リスク低減のために
- Private Tx Relay(Flashbots Protect / MEV-Share)
- Intent-based DEX(CoW Swap など)
を併用するのが無難。
7. PnL & KPI
| KPI (24 h rolling) | 目標 | Alert |
|---|---|---|
| Hit rate (bundle inclusion成功率) | ≥ 40 % | < 25 % |
| Net α / gas | ≥ 1.5 × | < 1.0 × |
| Bundle delay (incl.block-send.block) | 1 blk | > 2 blk |
| Failed bundle ratio | < 15 % | > 30 % |
| Reg-flag events | 0 | ≥ 1 |
PnL Tracker が Flashbots/Relay receipts + eth_getTransactionReceipt でガス・報酬を集計。
8. PoC 14 日ロードマップ
| Day | マイルストーン |
|---|---|
| 1-2 | Local geth + mempool sniffer + bundle send demo |
| 3-4 | Classifier α1 (swapOnly) → impact > X bps 検知 |
| 5-6 | Bundle Builder + Relay (simulate pass≥90 %) |
| 7 | PnL Tracker + Slack 通知 |
| 8-9 | Shadow Mode:0 ETH bundles → inclusionラグ測定 |
| 10-11 | Mainnet pilot (gas-capped)・Ethics Guard稼働 |
| 12-14 | KPI dash、撤退基準・自動pause 実装、回帰テスト |
TL;DR
- Mempool + MEV-Share で order-flow を先読みし、
- 25 ms 以内に private bundle を組んで Relay へ送信、
- Gas / BaseFee / Ethics Guard を通過したものだけ実行、
- KPI が hit≥40 %、α/gas≥1.5、規制違反0 を維持できなければ自動撤退。
既存 MM の µsオーダーループ を EVM bundle に差し替えるだけで PoC は作れる。
ただし 規制・道義的ライン を事前に文書化し、“やめ時” を自動化してから本格運用へ移行する必要あり。
付録:MEV プライオリティトレードの体系図
軸 ❶:取りに行く価値 (Value)
軸 ❷:抽出手段 (How it is extracted)
軸 ❸:ブロック内での位置関係 (tx ordering)
下表は研究・Flashbots 文献で頻出の分類を三軸で整理し、「優先ガス競争=Priority Trade」 に該当するものを網羅しています。
| 大分類 | サブタイプ | オーダー位置 | 代表的な tx パターン | 価値源 | 主なリスク | 出典 |
|---|---|---|---|---|---|---|
| ① Ordering-Only(Value-Diverting) | Front-run ・Displacement ・Replacement ・Suppression | Victim 前 | 1 tx | スリッページ・手数料 | UI ToS違反/市場操作 | arXivSpringerLink |
| Back-run | Victim 後 | 1 tx | 価格歪みα | フィル率低 | cow.fi | |
| Sandwich | Victim 前+後 | 2 tx | 前+後 α | 明確な被害・規制リスク | blocknative.com | |
| Gas Priority Auction (PGA) | 前 / 後 (競り勝ち) | 1 tx | Arbitrage差額 | ガス焼損 | ||
| ② Value-Creating & Diverting(State Change 利用) | DEX アービトラージ | 任意 | 1 tx または Multi-hop | プライス差 | Revert率 | arXiv |
| Liquidation Sniping | 清算直前 | 1 tx | 清算報酬 | Gas spike | ||
| JIT Liquidity (CLMM) | Swap 前 に Mint、後 に Burn | 2 tx | 手数料 + α | Slip逆行 | ||
| ③ Cross-Layer / Oracle-Driven | Oracle Manipulation (Push / Pull) | Oracle 更新 前 | 2 tx | 不当利得・清算 | Revert/追徴 | |
| Time-Bandit Reorg | ― (reorg) | ブロック再編 | Block報酬 + MEV | 検閲・規制 | arXiv | |
| ④ NFT / Airdrop 特化 | Mint Sniping | Mint直前 | 1 tx | 即時フロア差額 | 高競争 | |
| ⑤ Cross-Chain MEV | HTLC Front-run / Bridge Arbitrage | Chain A→B | 2 tx (各チェーン) | レート差・手数料 | クロス再org | ResearchGate |
位置づけ早見
flowchart TD
%% ───── Nodes ─────
VD[Value-Diverting]
ORD["Ordering Only\n(Sand / Front / Back)"]
PGA[PGA]
VDC["Value-Diverting &\nValue-Creating\n(Arb, Liq, JIT)"]
SCM[State-Change MEV]
%% ───── Edges ─────
VD --> ORD
VD --> PGA
ORD --> PGA
PGA --> VDC
VDC --> SCM
各カテゴリの “Priority Trade” 共通要件
| 要件 | 技術要素 | 既存 MM 資産の流用 |
|---|---|---|
| Order-Flow 事前観測 | Public mempool/MEV-Share feed, builder hints | μs級 observer → tx classifier |
| Bundle 構築 & Gas Bid | Flashbots Relay / MEV-Builder, dynamic tip | オーダーループ→EVM Raw tx |
| レイテンシ最小化 | Local full-node IPC, busy-spin queue | MM 高速 I/O ランタイム |
| 撤退基準 | hit_rate, α/gas, Reg flag | Risk engine (circuit breaker) |
倫理・規制フレームと紐付け
| グレー度 | 該当タイプ | 典型的規制・ガイドライン |
|---|---|---|
| 低 (Value-Creating) | DEX アービトラージ/清算 | “正常化取引” として黙認されやすい |
| 中 | Back-run/JIT流動性 | 利用 UI の ToS & MEV-Share との整合 |
| 高 (Value-Diverting) | Front-run/Sandwich/Suppression | 市場操作・利用規約違反の可能性大 |
実装ロードマップへの落とし込み例
- フェーズ0: DEXアービトラージ/Liquidation(低グレー度)から実装
- フェーズ1: Back-run+JIT流動性 → Private order-flow優先
- フェーズ2: Sandbox環境で Front/Sandwich を実験、Ethics Guard と撤退ラインを自動化
参照した主なソース
- Flashbots Research “MEV Transaction Taxonomy” (2024) arXiv
- 1inch・Sushi ToS の front-running禁止条項例 SpringerLink
- BitQuery / CoW Docs MEV attack explanations (front/back/sandwich) Bitquerycow.fi
- Cross-chain MEV (front-run in atomic swaps) 新規論文 2025-06 ResearchGate