クロス取引所フットプリント
フットプリント・チャートが Binance、Bybit、OKX、Hyperliquid パーペチュアル先物の深さと取引フローを分単位の bid × ask セルにどう統合するか:ソース、正規化、時間整列、ウォール分類、エッジケース、限界。
ライブ・ウィジェットを見る: /perpetuals/footprint.
データソース
4 取引所フィード、公開深さストリームのみ。API キー不要。
- Binance USDT-M パーペチュアル。 diff-stream WebSocket とコールド・スタートの REST スナップショット、両方ともフューチャーズ・エンドポイント。ローカルでシーケンス検証された L2 ブック、資産あたり上位 200 レベルを公開。
- Bybit V5 リニア・パーペチュアル。 公開 WebSocket、
orderbook.<tier>.<SYMBOL>。取引所がサポートする資産で tier 200(現在 BTC、ETH、SOL)、その他は tier 50。購読時にスナップショット・フレーム、単調増加uインクリメント、シーケンス・ギャップ時に再購読で新スナップショットを強制。 - OKX V5 SWAP。 公開
booksチャンネル(400 レベル、認証不要)、上位 200 レベル保持。スナップショット + 更新フレームは各エントリのseqId/prevSeqIdで連結。tick-by-tick バリアントも検討したが、当社が持たない VIP 手数料ティアが必要(限界参照)。 - Hyperliquid パーペチュアル。 公開 WebSocket
l2Book購読。取引所が各フレームを生 20 レベルにキャップするため、デーモンは資産あたり段階的に粗いnSigFigs集計で並列購読を開きます(生 / 4 / 3、XRP・DOGE には追加でnSigFigs=2:それらは 4 ストリーム、その他は 3 ストリーム)。アグリゲーターが公開時にすべてのストライプをひとつの Hyperliquid 寄与に統合し、UI は単一 venue として表示します。 - 追跡資産。 BTC、ETH、SOL、BNB、XRP、DOGE。
正規化:価格と数量
クロス取引所集計はすべてのソースが同じ単位を話すときのみ機能。アグリゲーターに到達する前にインジェストで 2 つの調整。
数量を基礎コインへ。 Binance と Bybit は基礎通貨で数量を直接返す(BTC-USDT パーペチュアルは BTC 単位など)。OKX は契約単位でサイズを返し、1 契約は基礎コイン ctVal 単位。BTC-USDT-SWAP は ctVal = 0.01、DOGE-USDT-SWAP は 1000。OKX フィードは起動時に公開 instruments エンドポイントから ctVal を解決し、公開前に全レベルに乗数を適用。このステップがないと DOGE 深さがクロス取引所ビューで 1000× 深く読まれる。
価格を資産別バケットへ。 取引所ごとに tick サイズがわずかに異なる。アグリゲーターが価格を最寄りのバケット境界に切り下げ、取引所間で隣接 tick が同じ壁にマージされるようにする。資産別主バケット:
btc: $1.0 eth: $0.10 sol: $0.05 bnb: $0.10 xrp: $0.001 doge: $0.0001
マルチバケット・ビュー
サイクルごとに同じ生深さが並列で資産あたり 2 バケット・サイズにビン。主 tick(上)と 5× 粗いバリアント。ユーザーがどちらを表示するか選択。フットプリントは再接続なしで正しいバケットに切り替え。
BTC の場合、$1 ビュー(細かく、mid 近くで密)と $5 ビュー。サイド当たり 200 バケット・ビンで $1 ではフットプリントが mid ±$200 をカバー。$5 ビューは ±$1 000 に達し、ラウンドナンバー磁石($79k / $80k / $81k)が存在する場所。同じロジックが資産別にスケール:ETH は $0.10 + $0.50 を公開、DOGE は $0.0001 + $0.001 を公開。
集計:合計 + 取引所別分割
各バケットについて、アグリゲーターが 3 ソースの数量を合計し、取引所別の貢献を合計とともに保持。UI が単一壁行と、ホバー時のスタック分解を 2 度目のラウンドトリップなしでレンダリングできるようにする。
for src in (binance, bybit, okx):
for (price, qty_base) in src.depth.bids:
bucket = floor(price / BUCKET_SIZE) × BUCKET_SIZE
bid_buckets[bucket].total += qty_base
bid_buckets[bucket].by[src] += qty_base
# asks: 同じ、価格昇順でソート
top_bids = sorted(bid_buckets, by price desc)[:200]
top_asks = sorted(ask_buckets, by price asc)[:200]出力 payload はソース・リストと取引所別ベストビッド/ベストアスクを別々に含む。単一の統合ベストビッド/アスクは公開しない — 限界参照。
ケイデンスと spoof 解像度
アグリゲーターは 10 Hz で公開(~100 ms ごとに 1 スナップショット)。プロデューサー・フィードは ~20 Hz まで書けるが、制約は取引所プッシュ率(原生 ~50-100 ms)。
フットプリント 100 ms セル幅で、壁と spoof は次のように表示:
- spoof ≥ 100 ms → 1 可視セル(境界検出)。
- spoof ≥ 200 ms → 2 可視セル(信頼可能)。
- spoof ≥ 500 ms → 5 セル、明確な垂直点として表示。
- 数秒持続する壁 → 複数セルにまたがる水平 smear。
100 ms 未満の spoof は検出不可。当社アクセス・ティアで 3 取引所すべてにロックされた tick-by-tick(TBT)チャンネルが必要。
時間整列
各プロデューサーは原生深さストリームから取引所イベント・タイムスタンプを抽出(Binance の E フィールド、Bybit の top-level ts、OKX の entry-level ts)、プロデューサー自身の公開時間とともに伝播。
アグリゲーターで各スナップショットはソース別イベント・タイムスタンプとクロス取引所 skew(OK ステータスのソース間のイベント時間最大 − 最小)を公開。フットプリント・スナップショット ts はタイムラインが均等に間隔を持つようアグリゲーターのポーリング瞬間のまま。skew はツールチップに ≥ 100 ms(≥ 300 ms は赤)で表示され、セルの「合意」が正直に境界付けられる。
典型的な観測 skew:定常状態 < 100 ms。あるソースが一時的に遅れる basis ストレス時に 300-500 ms スパイク。この帰属がなければ Binance T+0 と Bybit T+200 ms に投稿された壁が単一瞬時合意として読まれてしまう — 実際にはそうでない。
Stale 処理
各プロデューサーが 60 秒 TTL とタイムスタンプでソース・キーを書く。アグリゲーターがサイクルごとにソース別年齢を計算し、60 秒以上経過したソースを統合ビューから除外。除外されたソースは依然として sources 配列に stale 状態で現れ、FE が劣化インジケーターをレンダリング。
FE:ツールバーのソース pill が色 + 状態を表示。フットプリントは残りのソースで動作継続。持続する stale 状態は通常プロデューサーがウォッチドッグ・リセットを経験したか、WebSocket がクリーンな再接続なしに切断されたことを意味。ページは静かにではなく可視的に劣化。
限界と既知の落とし穴
- 統合ベストビッド/アスクなし。 クロス取引所 basis は通常。Binance BTC パーペチュアルはしばしば Bybit と OKX の同じ instrument より $5-15 上または下で取引。これらの期間に素朴な統合 top-of-book は反転(統合ベストビッドが統合ベストアスクより大きい)。この落とし穴を避けるためウィジェットは統合壁と取引所別ベスト見積もりを別々に表示。差が mid の 0.10 % を超えるときのみ紫の inversion band を公開(URL の
?inv_bps=Nで設定可能)。 - 深さカバレッジ。 バケット・サイズあたりサイド当たり 200 バケット・ビン:$1 BTC ビューが ±$200、$5 BTC ビューが ±$1 000 到達。mid ±2 % のラウンドナンバー・アンカーは 3 取引所が公開チャンネルで返す範囲を超えて位置。その深さはこの方法論で構造的に不可視。
- 100 ms 未満の遅延。 アグリゲーターは 10 Hz ポーリング。無料公開チャンネルの取引所プッシュ率は ~50-100 ms キャップ。OKX tick-by-tick バリアント(
books-l2-tbt、books50-l2-tbt)は当社が持たない高い取引手数料ティアが必要。購読時にcode 64003を返す。Bybit と Binance はフューチャーズに比較可能な無料 tick-by-tick チャンネルを公開しない。 - 200 レベル ≠ 深いブック。 各プロデューサーが 200 生レベル供給。通常市場で BTC の原生クォート粒度で mid から約 $30-50 まで広がる。静かなペアではさらに到達可能。ブック内のより深い壁はバケット・サイズに関係なくフィードにない。
- クロス取引所 skew は実在。 フットプリントは均等な 100 ms 間隔でセル・レンダリングするが、各セル背後の 3 取引所スナップショットはイベント時間で
cross_exchange_skew_msまで広がる可能性。典型的 < 100 ms、時に 200-500 ms。意味あるときツールチップがそれを公開。時間粒度の下限として扱ってください。
バージョン管理
v1.0.0 初回リリース 2026-05-08(4 Hz 集計、50 レベル)。v2.0.0 2026-05-09:10 Hz、200 レベル、マルチバケット・ビュー(資産あたり $1 + $5)、ソース別イベント・タイムスタンプ整列とクロス取引所 skew 公開へアップグレード。v2.1.0 2026-05-21:multi-resolution l2Book 購読を通じて Hyperliquid を 4 番目のソースとして追加(生 20 レベル・キャップは単独では短すぎる。粗い nSigFigs のストライプが mid 近くのネイティブ granularity を保ちながらリーチを拡張)。v3.0.0 2026-05-23:M2 フットプリント UI 廃止後、クロス取引所オーダーブック・フットプリント方法論からフットプリント方法論へ rebrand。Substrate(ソース、正規化、整列)は変更なし — フットプリント init aggregator が同じ `prod:agg:<asset>:history` キーを読む。マルチバケット・バリアント(`prod:agg:<asset>:b<size>:*`)は同時期に廃止(フットプリントが唯一の消費者だった)。コンピュート経路の重要変更はバージョンを上げ発行日を更新。化粧的編集はしない。