Order flow 方法論、OBI × CVD 4 象限
Order flow 4 象限のソース・サイジング・読み方:深さから派生した板情報、taker フロー CVD、ローリング P95 正規化、ゾーン分類、HTF レジーム、鮮度規則。
ライブ・ウィジェットを見る: /perpetuals/positioning.
データソース
4 象限は待機深さと taker フローを 4 つの無期限取引所、Binance、Bybit、OKX、Hyperliquid、から両軸について集計します。ランタイムは全 Rust で、hot path に Python デーモンはありません。
- 深さインジェスト。
mt-ingestバイナリが各取引所の先物深さフィードを 6 資産すべてについて購読し、取引所別ブックをTOP_LEVELS_PER_SIDE = 200レベル(サイドあたり)で維持し、各ブックをprod:<venue>:<asset>:depthに公開します。これら取引所別ブックが OBI 計算を支えます。 - Taker フロー / CVD。
mt-cvdバイナリが各取引所の約定ストリームをクロス取引所の約定テープ(prod:trades:*)と符号付きランニング CVD(prod:*:cvd)に消費します。取引所別の taker サイド・セマンティクスはこの段階で正規化されます、Bybit、OKX、Hyperliquid は攻撃側を Binance と異なる方法でエンコードし、すべて 1 つの符号規約にマップされます。 - クロス取引所集計。
mt-aggdバイナリが取引所別ブックとフローを 10 Hz で結合し、取引所がスタンプしたevent_tsで取引所を整列させ、マージされたスナップショットをprod:agg:<asset>:*に公開します。 - オーバーレイ + バー。
mt-microstructureバイナリが OBI/CVD オーバーレイ(prod:agg:*:micro)を計算し、分あたり 1 バーをdata/<asset>/microstructure_bars.jsonl(トレイル・ヒストリー表面)に書きます。
バックエンドの /ws/market WebSocket は ~10 秒ごとにスナップショットを、購読時とウィンドウ変更時に trail/normaliser フレームをプッシュします。
板情報(OBI)
OBI は中値周辺の狭い帯内の待機流動性偏りを測定します。まず取引所別に、各取引所自身のブック上で計算され、クロス取引所ブレンドは次のセクションで説明します。帯外のレベルは除外、スプレッドを取る取引に影響しないため。
mid = (best_bid + best_ask) / 2 // 取引所別 band = [mid * 0.998, mid * 1.002] // ±0.2 % bid_qty = 帯内のビッド qty の合計 ask_qty = 帯内のアスク qty の合計 OBI = (bid_qty - ask_qty) / (bid_qty + ask_qty) 範囲: [-1, +1] +1 → アスクが空、全重みがビッドに -1 → ビッドが空、全重みがアスクに 0 → 帯内バランス
計算は帯内の各サイド上位 200 レベルを取ります(TOP_LEVELS_PER_SIDE = 200)。プロットされる X 軸は下のクロス取引所ブレンドで、この段階では平滑化なし。ウィジェットは OBI ラベルを 3 桁の小数で表示し、0.01 の動きが見えるようにします。
クロス取引所 OBI 集計(flow-weighted)
各取引所の取引所別 OBI(上)は、その取引所の直近の taker フローで重み付けした単一のクロス取引所 OBI に結合されます、flow-weighted (FW)、逆分散ではありません。取引所の重みは実際に約定が出ている場所を追うため、静かなブックはほとんど寄与せず、活発なブックがコンセンサスを主導します。
2026-05-26 に集計は逆分散重み付け(IVW)から FW に切り替わりました。IVW では Hyperliquid がブレンドを支配していました:nSigFigs で量子化された(粗い)ブックは人為的に低分散の OBI を生み、IVW は背後にどれだけ小さいサイズしかなくても高い重みで報います。Flow-weighting は重みを実現された攻撃側ボリュームに結び付けるため、粗い量子化の取引所はもはやマージされた読みを支配できません。
累積ボリュームデルタ(CVD)
CVD はローリング・ウィンドウ内の符号付き taker 名目を 4 取引所すべてにわたって合計します。符号規約は業界のテープ・リーディング慣行に従い、taker 買いは上に、taker 売りは下に。各取引所の攻撃側はインジェストで正規化され(Bybit、OKX、Hyperliquid は Binance と異なる方法でエンコード)、すべてのプリントが同じ符号を寄与します。
各 taker プリント(任意の取引所)について: notional = qty * price // USD 攻撃側 == 買い の場合: delta = +notional // taker 買い そうでなければ: delta = -notional // taker 売り (ts, delta) を 2 時間 deque に追加 cvd_30m_usd = Σ delta, ts ∈ [now - 30m, now] cvd_2h_usd = Σ delta, ts ∈ [now - 2h, now]
2 時間 deque は最長ホライズン。30 分ウィンドウは書き込みごとに同じバッファからスライス。bars ファイルは分あたり 1 行と両ウィンドウを保持し、再起動後にトレイルがヒストリーをリプレイできるようにします。4 取引所の合算スループットはアクティビティに応じて ~40–200 prints/s。
Y 軸ノーマライザー
生の 30 分 CVD 大きさは BTC($1M クラスの動き)と ETH・SOL・小規模パーペチュアル間で 2 桁の差があります。生 USD をプロットすると小さな資産はフラットなラインに押し潰されます。したがって Y 軸は資産別にローリング 7 日 |cvd_30m_usd| P95 で割り、結果を [-1, +1] にクランプします。
y_norm = clamp(cvd_30m_usd / p95_30m_usd, -1, +1)
p95_30m_usd: ローリング 7 日パーセンタイル、スナップショット・エンドポイントで更新
fallback: ローリング・パーセンタイルがまだ利用不可のとき
(コールド・スタートまたは薄いサンプル)2_000_000 USD を使用エンドポイント /api/market/cvd-normalizer?asset=… が資産別 P95 値を提供し、WebSocket の normalizer フレームとしてミラーされるため、FE はその値がトレイル・データの後に到着するときトレイルを一貫して再スケールできます。
ゾーン分類(v2)
生の 4 象限ルール(OBI 符号、CVD 符号)は sub-bp ノイズで判定がちらつかないように 3 層パイプラインで包まれています。各層が順次発火し、3 層すべてを通過する信号のみが表示されるゾーンとなります。
層 1、OBI に EMA(CVD はすでにスライディング・ウィンドウ集計)
obi_ema(t) = α · obi_raw(t) + (1 - α) · obi_ema(t-1)
α = 1 - exp(-dt / span_seconds)
span_seconds 30m 資産別:BTC/ETH/SOL/DOGE 120s, BNB 60s, XRP 5s
層 2、大きさデッドバンド(Schmitt-trigger 下限)
両軸ともデッドバンド内 → 候補 = "balanced"(フラットな市場:
|obi_ema| < OBI_DB かつ |cvd| < CVD_DB_PCT × p95_30m_usd、どちらにも偏りなし)。
ちょうど一軸のみ内 → 現在ゾーンを保持(曖昧)。
両軸とも外 → 候補 = (obi_ema, cvd) の 4 象限。
OBI_DB 資産別:BTC 0.12, ETH 0.20, SOL 0.12, BNB 0.12, XRP 0.05, DOGE 0.20
CVD_DB_PCT 資産別、ローリング |cvd_30m| p95 の割合:
BTC 0.15, ETH 0.05, SOL 0.20, BNB 0.10, XRP 0.20, DOGE 0.20
層 3、最小テナー(Schmitt-trigger 上限)
新しい候補は現在になる前に ≥ MIN_TENURE_S 持続する必要があります。デッドバンドへの
一度のディップはもはや成熟中の候補を消しません。タイマーは連続ホールドの最大 3s
の猶予まで存続します(CVD は平滑化されていない)。
MIN_TENURE_S 30m トレイル 300s(DOGE 30s); 4h 300s; 24h 1800s。4 つの方向性象限、そしてどちらの軸にも偏りがないときの balanced 状態:
x >= 0 かつ y >= 0 → "買い手優勢" x < 0 かつ y < 0 → "売り手優勢" x < 0 かつ y >= 0 → "需要吸収中" x >= 0 かつ y < 0 → "板が支持" 両軸ともデッドバンド内 → "Balanced"(明確な支配なし)
候補がテナーを満たす途中のとき、FE は判定の下に明示的な candidate_pendingサブラインをレンダリング (“売り手 · 4m 22s 持続 · 買い手候補 18s / 5m”)。クラシファイヤはブラックボックスではなく可視ステート・マシン。
パラメータは資産別 7 日グリッド・スイープ(scripts/replay_classifier.py)からチューニング。選ばれた値は backend/classifier/config.py に存在し、再デプロイなしのホットパッチ用に env オーバーライド(例:MICRO_DEADBAND_DOGE=0.20)可能。状態(OBI EMA、候補タイマー、entered-at)はアグリゲーター・サイクル間で Redis に永続化されるため、デーモン再起動はコールド・スタートではなく同じゾーンから再開します。
トレイル・ヒストリー
トレイルは最近 N 個の 4 象限位置を年齢別にフェードするポリラインで描きます。選択可能なウィンドウは 30m、4h、24h。各ウィンドウは bars ファイルからダウンサンプリングされたシーケンスを取得し、24 時間リプレイが 1440 の生分をストリームする必要がないようにします:
- 30 分。 1 分バケット。
- 4 時間。 5 分バケット。
- 24 時間。 30 分バケット。
FE はレンダリングされたトレイルを 60 点に制限し、24 時間ウィンドウがオーバープロットなしで収まるようにします。ライブ・スナップショットは同じバッファに追加され、バケット・シーケンスの後に痕跡を残します。資産切替時にローカル・バッファはリセットされ、新しい 4 象限が前の資産のトレイルで汚染されないようにします。
HTF レジーム・タグ
ウィジェット・ヘッダーの Trend BULL/BEAR/NEUTRAL タグは scripts/btc_monitor.py(維持される cron writer)の htf_regime() がスナップショット cron の 5 分ケイデンスで計算:
300 1 分キャンドルを取得(>= 289 有効バーが必要) pct_4h = (close - close_4h_ago) / close_4h_ago * 100 pct_24h = (close - close_24h_ago) / close_24h_ago * 100 BULL if pct_4h > +0.5 or pct_24h > +1.5 BEAR if pct_4h < -0.5 or pct_24h < -1.5 NEUTRAL そうでなければ(サンプル不足時も)
タグは HTF コンテキストのみで、フロー・リーディングではありません。4 象限の短ウィンドウ判定(30 分 CVD)が複数時間方向に対して sanity チェックできるように存在します。
Long/Short 比率
L/S スタットは Binance の globalLongShortAccountRatio(15 分期間)をスナップショット cron が ~5 分ごとにポーリング。1.0 上は小売アカウント net long、下は net short。これはアカウントのポジショニングでフローではない、4 象限平面ではなく OBI と CVD とともにサイド・パネルに位置します。
鮮度
3 つの独立信号がウィジェットを非ライブとしてマークできます:
micro_book_state≠"ok"、WS 再接続後デーモンが再同期中。REST スナップショットが再到着するまで OBI は古くなる。ステータス pill がDaemon <state>に切り替わる。micro_stale、ハートビートがウィンドウより古い。FE はトレイルに新しい点の追加を停止。- トレイルが
partial: trueマーク、ウィンドウを支える jsonl が要求された lookback より短い(デーモン再起動直後に一般的)。キャンバスにアンバー pill が表示される。
限界
- クロス取引所の時間スキュー。 アグリゲーターは取引所がスタンプした
event_tsで取引所を結合しますが、10 Hz ではアライメント・ウィンドウは ~100 ms しかありません。速い動きの間、同じ価格イベントが取引所ごとに隣接するスナップショットに落ちることがあり、単一フレームのクロス取引所 OBI が一時的に自己矛盾することがあります。 - 粗い量子化の取引所。 Hyperliquid は
nSigFigsで量子化されたブックを公開するため、取引所別 OBI は粗いです。Flow-weighting(2026-05-26 に逆分散重み付けを置換)はそれがブレンドをどれだけ動かせるかを制限しますが、依然としてコンセンサスに入ります、HL の寄与は精密ではなく方向性として読んでください。 - ±0.2 % 帯は固定ノブ。 OBI 帯は全資産・全取引所で同じ幅。タイト・スプレッドのメジャー(BTC、ETH)は薄いブックのアルトより帯内で深いブックを見ます、これが CVD が一次判定で OBI が補助軸である理由の 1 つ。
- L/S は Binance の小売ポジショニング。 比率は Binance のアカウントを数えクロス取引所集計ではなく、すべてのアカウントをサイズに関係なく同等重み付け。フロー入力ではなくソフトなコンテキストとして使用してください。
- HTF レジームは全資産に BTC スタイル閾値使用。 4h ±0.5 % / 24h ±1.5 % 閾値は BTC に対してチューニングされた。高ボラ資産(DOGE、SOL)では BULL/BEAR が直感より早く発火、タグをキャリブレーションされたトレンド・フィルターではなく粗いコンテキストとして扱ってください。
- 4 象限は記述的で予測的ではない。 現在の板と taker 圧力を読み取るもので、次の動きの予報ではありません。ゾーンを今フローがある場所のスナップショットとして扱ってください。
バージョン管理
方法論バージョン v2.0.0 · 更新 2026-07-04。重要な変更(取引所追加、公式微調整、閾値変更)はバージョンを上げ、上の構造化データの dateModified を更新。