高頻度MMbotの開発で得た知見をスケールさせるためのbotアイデアを8つまとめました。
高頻度MMの知見は以下の戦略にもシナジーがある。8月は開発をスケールさせていく。
・クロス CEX/DEX arb
・perp‐spot “ベーシス”/Funding arb
・清算スナイプ & 部分清算ループ
・オプション ガンマスキャルピング & ボラMM
・統計アービトラージ(ペア/PCAモデル)
・MEV サンド/バックラン— よだか(夜鷹/yodaka) (@yodakablog) July 25, 2025
今回の記事では以下の4つの拡張戦略と実装プランを扱います。
・クロス CEX/DEX アービトラージ
・RFQ/ブロック向けマーケットメイク
・Perp-Spot ベーシス & Funding アービトラージ
・清算スナイピング
クロス CEX/DEX アービトラージ ― 実装ガイド
ゴール:板読み MM で培った “サブ秒レイテンシ・在庫制御” をそのまま流用し、
価格差 ≧ (取引手数料 + ガス + 出金手数料) を検知した瞬間に 同時約定 で抜く PoC を2 週間で構築する
1. 全体アーキテクチャ
┌──────────────────────────────┐
│ Liquidity Snapshot Service │ ← WebSocket / REST
└───────────────▲──────────────┘
│ best_bid / best_ask / depth
┌───────────────┴──────────────┐
│ Dynamic Edge Calculator │ ← 手数料・ガス・Withdraw 推定
└───────────────▲──────────────┘
│ edge ≥ 0 ?
┌───────────────┴──────────────┐
│ Order-Router / Tx Coordinator│ ← atomic swap or risk-skew
└───────────────▲──────────────┘
│ fills / rejects
┌───────────────┴──────────────┐
│ Inventory / Risk Engine │ ← hot-wallet balances
└──────────────────────────────┘
- Liquidity Snapshot
- 既存 MM の order-book collector を拡張:複数 CEX REST+WebSocket、複数 DEX SDK (e.g. 0x, Uniswap routers)。
- Edge Calculator
edge = (sell_px – buy_px) – fees_buy – fees_sell – gas_est – withdraw_est
wundertrading.com
- Order-Router
- “双方向同時発注” が基本。片側 fill 失敗時は ヘッジ成行 でポジを閉じる。
- Inventory Engine
- Hot-wallet = 倉庫 と割り切り、exchange1_qty – exchange2_qty = net_delta を常に 0±ε に維持。
- Monitoring / Slack
- 未約定建付が 3 s > 0 の場合は circuit_breaker を発動しペアをクールダウン。
2. 優先タスクの詳細
2-1. “hot wallet ≈ ポジション” 在庫モデル
概念 | 実装ノート |
---|---|
ウォレット=在庫 | inventory[exch] = {asset: balance} をRedisに常駐。更新は 約定WebSocket イベント+1 s毎のREST再同期。 |
ペア在庫リバランス | delta = inv[A] – inv[B] .|delta| > rebalance_thresh なら自動 withdraw / deposit キューへ送信。 |
リスクキャップ | 各ペアに max_notional を設定、Edge>0 でも超過していればスキップ。 |
流動性ブロック | withdraw/bridge 中は state = locked , 該当在庫を計算対象外に。 |
2-2. 動的エッジ計算器
def calc_edge(pair, buy_ex, sell_ex, qty): buy_fee = fee_table[buy_ex](qty) sell_fee = fee_table[sell_ex](qty) gas_cost = gas_oracle.estimate(tx_size(pair, qty)) # DEX only wd_cost = withdraw_cost[buy_ex][pair.base] # CEX→CEX用 edge = sell_px - buy_px - buy_fee - sell_fee - gas_cost - wd_cost return edge
- fee_table:Maker/Taker, VIPティア, リベートまで動的計算 Medium
- gas_oracle:EIP-1559 (baseFee × 1.1 + tip) を RPC から取得 HyroTrader
- withdraw_cost:API or Parse HTML → 1 h毎にキャッシュ(変動が遅いため)
閾値:edge >= min_profit_pct * buy_px
でトリガ。 min_profit_pct は 0.15–0.30 % が現実的。
3. Order-Router / Tx Coordinator
ステップ | CEX↔CEX | CEX↔DEX (on-chain) |
---|---|---|
1. Pre-check | 両方の exchange_status, net_delta < cap | ガス≦上限・nonce最新 |
2. Place orders | 同時に LIMIT IOC | ① CEX LIMIT IOC ② DEX swap in same block (private Tx or revert-if < min_out) |
3. Fill monitor | WebSocket fill event (≤ 200 ms) | Flashbots / Bundle status |
4. Fallback | 1 s後 fill 片側 ⇒ 残側 MARKET HEDGE | 同一ブロック未fill ⇒ 全Tx revert |
5. Inventory update | Redis incr/decr | 同左 |
4. 既存 MM モジュールへの差し込みポイント
MMモジュール | 追加実装 |
---|---|
PriceFeed | MultiExchangeSnapshot クラスを追加し、同じ feed.tick() インターフェースで多取引所返却 |
DecisionEngine | spread→edge へ置換。関数シグネチャを def decide(edge, inventory) に統一 |
Trader / Executor | route_order(exch, side, qty, price, order_type) を抽象化し、DEX SDK call/CEX REST call を切替 |
RiskManager | delta_cap , dd_cap をペア単位で持ち、超過時は route_order をブロック |
5. PoC ロードマップ(2 週間)
Day | マイルストーン |
---|---|
1–2 | Multi-exchange adapters(REST+WS, DEX SDK) scaffolding |
3–4 | Liquidity Snapshot & Edge Calculator 単体テスト - 価格差検知 ≤ 100 ms |
5–6 | Order-Router with atomicity fallback(片側ヘッジ) |
7 | Inventoryモデル & Redis キャッシュ、Slack 通知 |
8–10 | Paper-trade / Shadow Mode(0 qty)→ Fill率 & レイテンシ測定 |
11–12 | 本番 min-notional 0.1 % 資本で A/B テスト |
13–14 | KPI レポート:Edge分布 / Fill成功率 / PnL vs ガス・手数料比 |
6. リスクと拡張
リスク | 対策 |
---|---|
送金遅延(CEX↔CEX) | Hot-wallet 在庫モデル+“すでに持っている在庫”でのみ同時発注。 |
競合Botで滑り | edge_adj = raw_edge – (depth_slippage(qty)) で事前補正。 |
DEX ガス急騰 | gas_oracle.watch() で baseFee spike 時に route を disable。 |
API rate-limit | 全 REST 呼び出しを backoff-async queue に統一。 |
次段階の拡張
- Flash-loan or CEX 借入 でレバレッジ → エッジ薄でも ROI↑。
- オフチェーン solver(e.g. Cow-Protocol)接続で MEV 抑制。
Edge Score Engine
を組み、MMBot と資本を自動シフト。
一言まとめ
板読みMMの “速さ” と “在庫制御” を横展開し、
サブ秒の価格乖離をスキャン → エッジ計算 → 同時発注 → 在庫ゼロ化 のループを作る。
これが動けば 手数料+ガスを払っても“確定利益” を量産できる ― まずは最小ロットで PoC を回し、Fill率と損益を数値で検証する。
RFQ/ブロック向けマーケットメイク ― 実装ガイド
狙い:板外で飛んでくる Request-For-Quote を瞬時に値付けし、大口取引を 確実・手数料効率的 に成約させる。
コア資産:既存MMの ①高速価格計算 ②在庫スキュー制御 ③発注エンジン を再利用。
1. 対象ネットワークの整理
ネットワーク | 取扱商品 | 接続方式 | 決済先 | 早期参入メリット |
---|---|---|---|---|
Paradigm | CEX先物・オプション・パーペチュアル | WebSocket RFQ → Quote | Deribit, BinanceFut 他 | デリバティブ向け深い流動性 paradigm.co |
WOO X Block | CEXスポット/パーペ | REST+WS “Block Trade” | WOO X内クロス | 狭スプレッド・VIP手数料 docs.woox.io |
0x RFQ | EVMチェーン現物 (ETH/L2) | HTTP /quote 回答 + 署名 | オンチェーンSwap | 少額資本でも供給者登録可 0x.org |
※PoCなら Paradigm (デリバティブ) と 0x (オンチェーン現物) の 2本立てで十分幅広い検証が可能。
日本居住の個人でも実行可能か?
結論だけ先に
- Paradigm 自体は「日本在住=即 NG」ではない。制裁対象国・US/CA 個人などが“Restricted Jurisdictions/Persons”に列挙されているが、日本は該当しない paradigm.co。
- ただし
- 機関投資家/適格投資家向け(法人・プロ向け KYC が必須)
- クリアリング先(Deribit など)が日本居住を禁止している場合、そのプロダクトは利用不可 ─ Paradigm は「清算先の国籍制限をそのまま継承する」と明言 paradigm.co。
- 日本の金融商品取引法・改正資金決済法により、個人が海外暗号資産デリバティブを扱うこと自体がグレー/NG のケースが多い(FSA の認可を受けた業者経由でないと基本的に禁止)。
1. Paradigm のオンボーディング要件
項目 | 内容 | 備考 |
---|---|---|
居住国チェック | ドロップダウンに「Japan」が存在 → 選択可 | “Restricted Jurisdictions” に日本はない paradigm.co |
ユーザー区分 | Business(法人) or Individual(個人だが desk admin レベルで機関取引を行う人) | いずれも KYC/AML 必須 |
適格性 | <ul><li>暗号デリバティブの取引経験</li><li>十分な資産規模(EU基準で 50 万 EUR 相当以上 が目安)</li></ul> | User Agreement Art. I — Sophistication 条項 paradigm.co |
禁止属性 | US Person・Canadian Person・総合制裁国居住者 | 日本人はここでは該当しない |
2. 清算先ごとの実際の可否
清算先/商品 | Paradigm での扱い | 日本居住者の可否 | 根拠 |
---|---|---|---|
Deribit (BTC/ETH オプション、永久先物) | 取扱い最多 | 不可:Deribit が日本を Restricted Jurisdiction に指定 support.deribit.com | Paradigm の「 venue の規制を継承」ポリシー |
CME(CME ClearPort) | OTC スワップ → CME 清算 | 要 FCM 経由。日本法人でも可だが 商品先物取引業 の登録や大口証拠金が必要 | FSA+CME ルール |
Binance系 Perp | 2023 年以降取り扱い停止 | 日本向けデリバティブは FSA 規制で不可 | |
WOO X Block Trade | 可能 | WOO X Pro アカウントが法人なら可(2025/6 時点) | WOO X ToS |
0x RFQ (オンチェーン現物) | 清算はチェーン上 | 可:スマートコントラクトへの直接呼び出し。ガス送金のみ | 日本の現物売買は合法(課税義務あり) |
実用上は 「清算先の国籍制限 × FSA のデリバティブ規制」 がボトルネックです。
Deribit系や Bybit系デリバティブはほぼ触れず、CME系やオンチェーン現物 RFQ が現状の選択肢。
3. 日本居住者が実際に使うまでのステップ
- 法人(または個人事業主)名義で Paradigm KYC
- 登記簿・代表者パスポート・主要株主リストを提出。
- 対象プロダクトのクリアリング要件を確認
- 例:CME ClearPort なら国内 FCM(ABNアムロ東京支店など)との取引関係が必要。
- FSA への自己確認
- 商品デリバティブ扱いになる場合、「第一種金融商品取引業」登録がないと自己売買不可。実質は 「プロップは不可・投資運用業が必要」。
- 税務 & 会計処理
- 裁定収益は雑所得(個人) or 法人所得。オンチェーン RFQ で得た手数料も課税対象。
- オンチェーン清算の場合のガス管理
- ETH/GAS をホットウォレットに常時補充。
- コンプラ体制
- 反社チェック、疑わしい取引報告(STR)フローを準備。Paradigm から定期的にデューデリが来る。
4. まとめ & 実務アドバイス
- 規約上は日本は“許容国” ⇒ Paradigm の申請フォームに存在し、Restricted リスト外。
- 実戦では
- 日本 FSA の 個人向け海外デリバティブ規制
- 清算先(Deribit 等)の 自主規制で日本禁止
が二重で効くため、使えるのはCME系 + オンチェーン現物RFQ
程度。
- 法人格 & プロ投資家ステータス があれば、Paradigm+CME でブロック取引を行う余地はあり。
- 最終的には Paradigm オンボーディング担当と日本の外為法・金商法専門の弁護士へ確認 するのが安全(本回答は法律アドバイスではありません)。
2. システム構成
graph LR A(RFQ Gateway) -->|"RFQ JSON"| Q[Quote Engine] Q -->|"price size ttl"| G[Quote Signer] G -->|"signed quote"| A A -->|"fill or expire"| S(Settlement Orchestrator) S --> E[Exchange and Chain Adapter] E --> I[Inventory and Risk Service] I -->|"inventory skew"| Q M[Metrics and Alert] --> I M --> Q
モジュール | 主責務 | 既存MMから流用 |
---|---|---|
RFQ Gateway | 各ネットワークの RFQ メッセージ受信・Ack | WebSocket/RESTクライアント |
Quote Engine | mid ± margin + inventory_skew で秒内値付け | price_feed, spread_model |
Quote Signer | ネットワーク毎の署名(API key / EIP-712) | auth_utils |
Settlement Orchestrator | Quote成約後のブロックオーダー送信 + ヘッジ | order_router |
Inventory & Risk | 在庫上限監視、skewパラメータ算出 | inventory_service |
Metrics/Alert | Fill率・レスポンス遅延・在庫偏りをSlack通知 | monitoring_stack |
3. Quote Engineのロジック
def build_quote(rfq: RFQ, inv: Inventory, cfg): mid = price_feed.mid(rfq.symbol, rfq.size) skew = cfg.inv_skew_coef * inv.net_delta(rfq.symbol) risk_margin = cfg.base_margin + cfg.vol_curve(rfq.size) price = mid + skew + rfq.side.sign * risk_margin ttl = min(cfg.max_ttl_ms, rfq.request_ttl_ms) return Quote(price=round_price(price, cfg.tick), size=rfq.size, ttl=ttl)
- inventory_skew_coef:在庫が+Δなら売り値を下げ/買い値を上げて自然ヘッジ。
- vol_curve:サイズ依存のマージン(例:
risk_margin = k * sqrt(size)
)。 - 価格算出から署名返信まで < 150 ms を目標。
4. ネットワーク別実装ポイント
項目 | Paradigm | 0x RFQ |
---|---|---|
接続 | wss://paradigm.ws/trading で SUB {"type":"rfq","inst":"BTC-PERP"} | 自ホスト/quote エンドポイントをSwapAPIがポーリング |
受信RFQ | JSON → {"inst":"BTC-PERP","sz":"500k","side":"BUY","ttl":500} | HTTP query string→ makerToken,takerToken,amount,txOrigin,expiry |
レスポンス | "type":"quote","id":...,"px":...,"sz":...,"ttl":..." | JSON {price, size, expiry, makerAddress, salt} + EOA署名 |
成約検知 | WebSocket "fill" イベント → settlement venueに block order | SwapAPIがオンチェーンTxをブロードキャスト; event logs で確認 |
ヘッジ | 同一CEXで反対成行 / 他CEXでミラーマーケットメイク | 片側現物なのでヘッジ不要(inventory管理のみ) |
手数料 | Maker Rebate: -1bps 〜 +3bps tiers | ガス + 0x protocol fee(50–100 Gwei) |
失効処理 | TTL超過 → Quote自動パージ | expiry 過ぎたhashをRedis掃除 |
5. Inventory “hot-wallet” モデル
- ウォレット=ポジション
inv[custodian][asset] = on_exchange_balance()
.- RFQ提示サイズは
avail_balance – safety_buffer
以内に制限。
- Rebalance Job
|net_delta| > rebalance_threshold
ならwithdraw(exchangeA) → deposit(exchangeB)
を自動スケジュール。- 出金手数料も Quote Engine の
risk_margin
に反映。
- Circuit Breaker
- 在庫偏り > hard_cap、または連続未約定 n 件 ⇒ RFQ Gateway を pause 60 s。
6. PoC 2週間ロードマップ
Day | Deliverable |
---|---|
1–2 | Paradigm & 0x API keys取得・テスト接続 (ping OK) |
3 | RFQ Gateway + basic logging |
4–5 | Quote Engine with inventory skew → unit test (<150 ms ) |
6 | Signer実装(Paradigm HMAC / 0x EIP-712) |
7 | Settlement Orchestrator:CEX block order & EVM Tx stub |
8–9 | Shadow Mode:Quote返答のみ、Fill率/latency計測 |
10–11 | 本番 min‐notional 0.5 %資本 → Fill成功・PnL確認 |
12–14 | KPIsダッシュ(fill%, avg_edge, inv_delta) + Slack alert & 回帰テスト |
7. リスク & ガードレール
リスク | 緩和策 |
---|---|
Quote片側Fill→在庫偏り | TTL≤500 ms、fill監視 → 未Fillならcancel/hedge Auto |
RFQスパム | IPレート制限 & RFQ Gatewayで最小サイズ/TTLフィルタ |
過度競争で利幅蒸発 | risk_margin_floor を設定しエッジ最小確保 |
ガス急騰(0x) | gas_oracle 監視、baseFee>thresholdで Quote停止 |
Reg/コンプラ | 相対取引規制の国を除外 (whitelist_countries ) |
8. KPI 例(週次レビュー用)
指標 | 目標値 |
---|---|
Quote → Fill 率 | > 35 % |
Avg response time | < 120 ms |
Edge after fees | ≥ 0.02 % |
在庫偏り | |
RFQスパム拒否率 | > 90 %(不採算RFQを遮断) |
TL;DR
- RFQ Gateway でネットワーク特有のRFQを受ける → Quote Engine で mid ± margin + inventory_skew を<150 msで値付け → Signer で返送。
- 成約時は Settlement Orchestrator が即ブロック注文(CEX)/オンチェーンTx(0x)を発火し、Inventory Service が在庫偏りを監視。
- Paradigm(オフチェーンデリバティブ)と 0x(オンチェーン現物)を押さえれば、「大口・板外」マーケットへの 初期シェア を小資本でも確保できる。
早期にShadow Mode→小ロット実運用→KPI計測のサイクルを回し、利幅の厚いRFQ市場で“存在感”を築きます。
Perp-Spot ベーシス & Funding アービトラージ ― 実装ガイド
目的:
- 8 h ごと に発生する Funding Fee と Perp-Spot ベーシス(価格乖離)を同時に抜き取る。
- デルタニュートラル を維持しつつ、連続ポジション維持コスト(資金調達・在庫バランス)を最小化する。
1. システム全体像
graph LR P(Perp Price Feed) --> C(Core Engine) S(Spot Price Feed) --> C F(Funding Oracle) --> C C -->|"open / close"| R(Route Executor) R --> A(Exchange Adapter) R --> B(Exchange Adapter) C --> I(Inventory Service) I --> C M(Metrics & Alert) --> C M --> I
2. モジュール詳細
モジュール | 主な責務 | 実装ノート |
---|---|---|
Perp / Spot Price Feed | 各取引所の WebSocket best-bid/ask 取得 | 既存 MM の price_feed を複数取引所対応に拡張 |
Funding Oracle | 現在の funding_rate, 次回支払までの 残時間 を取得 | REST /funding_rate , /premium_index を 1 min 毎に pull |
Core Engine | Edge 計算・ポジション管理・再平衡 | edge = funding_edge + basis_edge - costs |
Route Executor | 指値/成行を組み合わせてデルタ中立を構築 | 同一CEX が最速、なければ CEX↔DEX でヘッジ |
Inventory Service | 資本配分・在庫偏り監視・リバランス入出金 | hot-wallet = 在庫 モデル、MM と共通 |
Metrics & Alert | ROI・DD・Funding 支払タイミングを Slack 通知 | Prometheus → Grafana or loki logs |
3. エッジ計算ロジック
# t: 秒単位 funding_edge = funding_rate * perp_price * (seconds_to_next / 28800) basis_edge = perp_price - spot_price # コンバージ狙いなら符号反転 carry_cost = borrow_rate * spot_price * (holding_sec / SEC_IN_YEAR) tx_cost = taker_fee_perp + maker_fee_spot + est_slippage edge = funding_edge + basis_edge - carry_cost - tx_cost
- funding_rate:年率ではなく 8 h 単位(Bybit, Binance 等は API で直接取得可)。
- borrow_rate:現物不足時の margin borrow or オフチェーンレポレート。
- edge ≥ min_profit_pct × spot_price でエントリ。
- exit 条件:edge < -cut_loss_pct * spot_price or max_holding_hrs 超過。
4. ポジション管理フロー(8 h サイクル想定)
- Pre-Check
edge_calc()
が正値かつ|net_delta| < cap
。
- Open
- Perp SHORT + 同数量 Spot LONG(or Perp LONG + Spot SHORT)
- 同一取引所に現物が無ければ cross-exchange でヘッジし在庫 Service へ登録。
- Hold
- Funding 受取(or 支払)ごとに PnL + funding を記録。
basis_edge
が逆転したら delta neutr を維持しつつポジサイズを調整。
- Close
- 一括成行 or basis 0 接近時の指値で約定。
inventory.rebalance()
が現物差引、出金/入金をスケジュール。
要点:日常の MM で 1 秒〜数分おきに行っている delta hedge を 8 h 間隔に伸ばすだけ。
リアルタイム板取り合いではないため、レイテンシは 100 ms 程度でも十分。
5. 維持コスト & リスクモデル
コスト要因 | 推定方法 | 随時更新頻度 |
---|---|---|
Funding Variance | EWMA( funding_rate^2 ) → VaR風に 95 %tile | 15 min |
Borrow/Stake Rate | CEX API or on-chain lending pool | 15 min |
Inventory Borrow Fee | borrow_fee_rate * t_hold | 持ち越しごとに再計算 |
Tx Fee / Slippage | fee_table(exch) + depth_impact(qty) | 約定直後 |
ポジション続投判定
exp_edge_next = funding_edge_next - borrow_fee_next
exp_edge_next > keep_threshold
なら継続、そうでなければロールオフ。
6. PoC 14 日ロードマップ
Day | Deliverable |
---|---|
1–2 | Price feeds・Funding Oracle scaffolding(Bybit / Binance) |
3–4 | Edge Calculator & backtest on last 30 d data → Param tune |
5–6 | Route Executor(同一 CEX 優先、次点 CEX↔DEX) |
7 | Inventory Service 共通化(MM と共有) |
8–9 | Shadow Mode:size 0 オープン → Funding 受取シミュレーション |
10–11 | 本番 min-notional (総資本の 1 %) → KPI計測 |
12–14 | レポート自動化(edge分布, funding PnL, basis PnL, DD)+Slack alert |
7. 監視 & KPI
指標 | 目標ライン | Slack Alert |
---|---|---|
Δ hedge エラー | |Δ| ≤ 0.5 % notional | >1 % |
Funding PnL / 手数料 | ≥ 1.2× | <1.0× |
Basis PnL | ≥ 0 | < -0.2 % |
最大 DD | < -3 % | > -3 % |
ROI (月次) | ≥ 4 % | < 1 % |
実装Tips
- 同一 CEX 優先:Bybit や Binance は 現物 & Perp を同アカウントで持てる → Withdraw コスト不要。
- 跨 CEX の場合は flash-transfer 的に hot-wallet 在庫 を厚めに維持し、出金遅延リスクを緩和。
- Borrow Limit Guard:マージン枠を使う場合は API で
borrowable
を取得 → 枠が 10 % 未満なら新規建を停止。 - Funding Spike Detection:
rolling_zscore(funding_rate, 24h)
> 2 で 優先度 HIGH。 - 税務考慮:Perp の未実現 PnL と Funding Fee 課税タイミングが異なる場合、会計レイヤで仕分けを分離。
TL;DR
- Edge = Funding + Basis – Carry – 手数料 をリアルタイム計算し、正の期待値が出た瞬間だけ Perp SHORT + Spot LONG(逆も可)を建てる。
- 既存 MM の delta ヘッジロジック と 在庫管理 を “8 h ペース” に緩めるだけで PoC は動く。
- 維持コストモデル(Funding 変動・Borrow Fee)を常時更新し、続投 or 差し替え を数字で判断。
まずは Shadow → 小ロット実運用 で Funding PnL が手数料を安定的に上回るかを検証する。
清算スナイピング ― 実装ガイド
狙い:清算発火の数十〜数百ミリ秒前に「危険ポジション検知 → Tx 発火」し、
Liquidator Incentive(清算ボーナス)+ Price Impact α を獲得する。
対象は Hyperliquid‐style on-chain perpetual DEX を想定(EVM L2 同系でも同手法)。
1. システム全体アーキテクチャ
graph LR B(BBO and L2 Feed) --> D(Detector) O(OI Change Feed) --> D P(Price Oracle) --> D D -->|"liquidation signal"| Q(Quote Builder) Q -->|"tx params"| X(Tx Dispatch) X -->|"bundle"| H(Builder Relay) H --> N(Node RPC) N --> G(Gas Monitor) G --> D I(Inventory and Profit) --> D I --> M(Metrics) M --> X
2. データ・シグナルレイヤ
ソース | 更新間隔 | 使う特徴量 |
---|---|---|
BBO / L2 Orderbook | 100 ms WS | best_bid , best_ask , depth_Δ , spread_Δ |
Open Interest / Position Feed | 500 ms REST or gRPC | OI_Δ , pos_size , liq_px |
On-chain Price Oracle | 2 s | mark_px , index_px |
Gas Monitor | 500 ms | baseFee , pendingBlockTxs |
3. Liquidation Detectorアルゴリズム
def detect_liq(r): # r = realtime snapshot dict # 1) price crosses liq price within Δ% cross = r['best_ask'] <= r['liq_px'] * (1 + cfg.cross_tol) # 2) OI shrink or spike in bankrupt events oi_drop = r['OI_now'] < r['OI_prev'] * (1 - cfg.oi_tol) # 3) L2 depth vacuum (thin layer) depth_vac = r['depth_bid_lvl1'] < cfg.depth_thresh # α score score = cfg.w1*cross + cfg.w2*oi_drop + cfg.w3*depth_vac return score > cfg.score_cut, score
cross_tol
: 0.2-0.4 %- 重み
w1>w2>w3
(価格優先) - 検知〜Tx 構築で ≤ 50 ms を目標。
4. Tx Dispatch & Builder Private Tx
- Quote Builder
liquidate(account, max_pos)
かtake_ask(size)
の calldataを生成。gas_limit
= シミュレーション (eth_estimateGas
) + 15 %.
- Builder Relay(Flashbots / Titan)
bundle = [tx]
, target block =pending_block_number + 1
.send_bundle(bundle)
→ returns bundle hash +bundle_price
。- フォールバック:builder不応答 100 ms →
eth_sendRawTransaction
.
- Gas オプティマイザ
baseFee
spike >cfg.max_base
⇒ Tx skip。priorityFee
=cfg.tip_coef * sqrt(pending_txs)
(動的)。
- μs レイテンシ短縮 Tips
- IPC でローカル
geth --http=false --ipcdisable=false
に直送。 - TLS offload:builder エンドポイントへ持続コネクション。
- CPU pinning:Detector → Quote → Dispatch を同 NUMA node 上に。
- IPC でローカル
5. Inventory & Profit Accounting
項目 | 処理 |
---|---|
Liquidation reward | on-chain log Liquidate(account, size, reward) を decode |
PnL α | fill_px - mark_px_pre × size |
Gas cost | gas_used × effective_gas_price |
Net PnL | reward + alpha - gas (Slack に即送信) |
Cashflow guard | 連続 5 回 Net < 0 → Detector pause 10 min |
6. ガストークン在庫管理
- Wallet Manager
eth_balance
<3 × avg_bundle_cost
⇒swap(USDC→ETH)
via 0x API。
- Prefund Queue
- Pre-sign
prefund_tx
(nonce+1) を mempool監視で自動送信、ガス不足リスクを 0 に。
- Pre-sign
- Alert
- ETH 残高 <
min_balance
⇒ Slack mention。
- ETH 残高 <
7. KPI と監視
KPI | 目標 | Alert |
---|---|---|
Hit rate | ≥ 45 % | < 30 % |
Avg Net α / trade | ≥ gas×1.5 | < gas |
Bundle inclusion delay | 1 block | > 2 blocks |
Failed bundle rate | < 10 % | > 25 % |
Max DD (rolling 7d) | < -5 % | ≥ -5 % |
Slack 通知フォーマット例
[Liq-Bot] ✅ profit 0.014 ETH | α 0.009 | reward 0.006 | gas 0.001 [Liq-Bot] ⚠️ hit_rate 28 %(24h) < target
8. PoC 2 週間ロードマップ
Day | Milestone |
---|---|
1–2 | L2/BBO/OI WebSocket collectors & local node setup |
3–4 | Detector prototype + replay test (past 7 d data) |
5–6 | Quote Builder + Tx simulation (eth_call ) |
7 | Builder relay integration, bundle success ≥ 80 % |
8–9 | Shadow mode: 0 size liquidate call → inclusion latency計測 |
10–11 | Mainnet pilot (0.1 % capital), KPI logging |
12–14 | Gas optimizer fine-tune, DD guard, auto-prefund, full Slack stack |
9. リスクとガードレール
リスク | 対策 |
---|---|
Bundle Frontrun | sim_tx_hash チェック、他Tx一致ならガス上乗せ or skip |
Gas spike | BaseFee watchdog, profit simulation before send |
Account liquidation disabled | Call revert → auto-blacklist address 24 h |
Regulatory / Terms | 取引所 ToS で liquidator role OK か確認 → API key 専用口座 |
TL;DR
- Detector が price cross + OI drop + depth vacuum を数十 ms でスコアリング。
- Quote Builder → Builder Relay へ private bundle を投げ、競合より前に清算Txを確定。
- ガス残高オート補充と KPI 監視で 勝率 > 40 %・Net α > gas×1.5 を維持できれば成功。
まずは Shadow → 小ロット運用で bundle inclusion latency と Net PnL を数字で確認し、
インセンティブが期待通りに乗るか検証する