トレーダーのデジタルフィンガープリント:注文板の行動からマーケットメーカーを特定する方法
取引アルゴリズムの行動フィンガープリント:タイミング、サイズ、配置のユニークなパターン
すべてのアルゴリズムはユニークなフィンガープリントを残します。それを読み解く方法を学べば、取引の反対側にいる相手が誰かがわかります。
はじめに:犯罪現場としての注文板
法医学調査官が犯罪現場に到着すると、指紋、足跡、DNA — イベントと特定の個人を結びつけるあらゆるものを探します。注文板は、毎秒何百もの参加者が「指紋」を残す場所です:特定のサイズ、特定の頻度、価格からの特定の距離、特定の有効期間の注文。
中央集権型取引所(CEX)では、これらの指紋は匿名です — 各価格レベルでの集計された出来高しか見えません。しかし、集計データからでも多くのことがわかります。そして、オンチェーン注文板を持つDEX取引所 — Hyperliquidのような — では、各注文が特定のウォレットアドレスに紐づいており、「指紋」は個人的なものになります。
この記事では、参加者タイプおよび特定のマーケットメーカーアルゴリズムを識別するための「行動フィンガープリント」システムの構築方法を探ります。
パート1:行動フィンガープリントとは何か
レーダーチャート:トレーダーの行動フィンガープリントの5つの主要次元
すべてのアルゴリズムはルールの集合体
マーケットメイキングボットは、厳格な(または学習された)ルールに基づいて決定を下すプログラムです:
- 中間価格からどの程度離れた位置に注文を出すか? すべてのMMには独自の「スプレッドプロファイル」があります。
- どのようなサイズか? ラウンドロット(100、500、1000)?ランダムな数値?±5%のノイズ付き固定サイズ?
- どの程度の頻度でクォートを更新するか? 50msごと?中間価格が変わった時のみ?タイマーで?
- 約定にどう反応するか? 即座に再クォート?一時停止?残りの片側をシフト?
- ボラティリティにどう反応するか? スプレッド拡大?クォート撤回?サイズ縮小?
- 在庫をどう管理するか? ポジション蓄積時のクォートスキューイング?
これらの質問に対する各回答のセットが、アルゴリズムのユニークな「シグネチャー」です。
フィンガープリントの5つの次元
┌─────────────────────────────────────────────────────────────────┐
│ トレーダーのデジタルフィンガープリント │
│ │
│ 1. タイミング │ 注文間の間隔、イベントへの反応、 │
│ │ 日内パターン │
│──────────────────┼───────────────────────────────────────────── │
│ 2. サイジング │ 注文サイズの分布、 │
│ │ ラウンドロット比率、分散 │
│──────────────────┼───────────────────────────────────────────── │
│ 3. 配置 │ 中間価格からの距離、 │
│ │ bid/askの対称性、レベルアンカリング │
│──────────────────┼───────────────────────────────────────────── │
│ 4. 反応 │ 約定、キャンセル、価格ジャンプ、 │
│ │ ボラティリティ変化への応答 │
│──────────────────┼───────────────────────────────────────────── │
│ 5. ライフサイクル │ 平均注文有効期間、 │
│ │ キャンセル条件、modify vs cancel+new │
│──────────────────┴───────────────────────────────────────────── │
└─────────────────────────────────────────────────────────────────┘
パート2:特徴量抽出
自己励起Hawkesプロセス:指数減衰を伴うイベントクラスター
タイミング:いつ、どのくらいの頻度で
タイミングパターンは、フィンガープリントの中で偽造が最も困難な要素です。アルゴリズムのアーキテクチャ、ネットワークレイテンシー、ハードウェア、さらには開発者のタイムゾーンによって決定されます。
主要な指標:
-
注文間間隔(IOI) — 同一参加者からの連続注文間の時間。HFTボットの場合、IOI = 50〜500マイクロ秒。手動トレーダーの場合は数秒〜数分。
-
取引への反応時間 — 注文約定から次のアクションまでの遅延。ボットの内部アーキテクチャを反映します。
-
日内パターン — 日次のアクティビティプロファイル。機関投資家のMMは取引セッション中に活動します。暗号通貨ボットは24時間365日稼働します。
-
自己励起(Hawkes強度) — 現在の注文が次の注文をどの程度強く「トリガー」するか。マーケットメーカーは強い自己励起を示します。
タイミングパターンのモデリングには、Hawkesプロセス — 自己励起点過程 — が理想的です。Hawkesプロセスのパラメータ(基底強度μ、励起係数α、減衰率β)は、参加者のコンパクトな「時系列フィンガープリント」を形成します。
サイジング:どのくらい、どのように
- サイズ分布 — 注文サイズの分布。プロフェッショナルなMMはしばしばノイズ付きのラウンドロットを使用:100 ± 5、500 ± 10。
- サイズ-深度相関 — 注文サイズは板の現在の深度に依存するか?
- Bid-askサイズの非対称性 — bidとaskのサイズ比。スキューパターンは在庫管理の「筆跡」です。
- サイズの自己相関 — 時間経過に伴うサイズの反復性。
配置:板のどこに
- スプレッドオフセット — 中間価格からのティックまたはbps単位の距離
- レベル選好 — 特定のレベルへのアンカリング(ラウンドナンバー?)
- クォーティングの対称性 — bidとaskの注文がどの程度対称か
- マルチレベルフットプリント — 同時にいくつのレベルにクォートしているか
反応:イベントへの応答
- 約定後の行動 — 注文が約定した後に何が起こるか
- ボラティリティ応答 — ボラティリティが増加した時に行動がどう変化するか
- Quote-to-trade比率(QTR) — 注文更新と約定の比率
- 逆選択応答 — ポジションに不利な価格変動への反応
ライフサイクル:注文のライフサイクル
- 注文有効期間分布 — 平均注文有効時間
- Modify vs Cancel+New — modifyで更新するか、cancel+newで更新するか?
- キャンセルクラスタリング — 1つずつキャンセルするか、バッチでキャンセルするか?
パート3:参加者分類
市場参加者の分類:マーケットメーカー、HFT、オポチュニスティック、ファンダメンタル、ノイズトレーダー
市場参加者の分類体系
行動特徴に基づいて、参加者を安定したカテゴリに分類できます。CFTCの研究(Kirilenko et al., 2011):
1. マーケットメーカー
- 80%以上の時間で両建てクォート(bid + ask)
- 日末にゼロまたはゼロに近いネットポジション
- 高いQTR(>100:1)
- ボラティリティに対してスプレッド拡大で反応
2. 高頻度トレーダー(HFT)
- 超高メッセージレート(>1000イベント/分)
- 非常に短い保有期間(秒単位)
- サブミリ秒の反応時間
3. オポチュニスティックトレーダー
- 中程度の頻度
- 特定の市場条件に反応
- 不規則なタイミング、イベント周辺にクラスター化
4. ファンダメンタルトレーダー
- 長期ポジションを蓄積
- 低頻度、大きな注文サイズ
- 執行にTWAP/VWAPアルゴリズムを使用
5. ノイズトレーダー(リテール)
- 小さなサイズ、不規則なタイミング
- 反応的:価格変動の後に取引し、前には取引しない
- ピークボラティリティ時に成行注文
分類手法
教師あり学習: DEXデータ(Hyperliquid)の場合、既知のマーケットメーカーのアドレスから訓練セットを構築可能。RNNモデルで精度>85%を達成。
教師なし学習:
- スペクトラルクラスタリング(Cont et al., 2023)— 注文フローパターンの類似度行列によるクラスタリング
- FIDR-SCAN(2024)— 特徴補間 + 次元削減 + 密度ベースクラスタリング
- 逆強化学習(CFTC, 2014)— 各トレーダーの報酬関数の復元
パート4:特定のマーケットメーカーの識別
分類から識別へ
分類は「これはマーケットメーカーか?」という質問に答えます。識別は「これはあの特定のマーケットメーカーか?」という質問に答えます。
フィンガープリントベクトルの構築
5つの次元から数値ベクトル — 参加者のエンベディング — を抽出します:
Fingerprint Vector (example):
┌──────────────────────────────────────────────────────────┐
│ Timing: │
│ hawkes_mu: 0.3 (base intensity) │
│ hawkes_alpha: 0.7 (self-excitation) │
│ hawkes_beta: 1.2 (decay rate) │
│ median_IOI_ms: 240 (ms between orders) │
│ circadian_peak_utc: 14.5 (peak activity) │
│ │
│ Sizing: │
│ median_size: 500 │
│ size_cv: 0.08 (coeff. of variation) │
│ round_lot_ratio: 0.92 (round lot share) │
│ bid_ask_size_ratio: 0.97 │
│ │
│ Placement: │
│ median_offset_bps: 3.2 (from mid-price) │
│ quoting_symmetry: 0.94 (0=asymmetric,1=symm) │
│ num_levels: 5 (quoted levels) │
│ │
│ Reaction: │
│ post_fill_delay_ms: 12 │
│ vol_spread_elasticity: 2.1 (spread/sigma) │
│ qtr: 850 (quote-to-trade ratio) │
│ │
│ Lifecycle: │
│ median_lifetime_ms: 1200 │
│ modify_ratio: 0.85 (modify vs cancel+new) │
│ batch_cancel_rate: 0.60 (batch cancel share) │
└──────────────────────────────────────────────────────────┘
アドレスクラスタリング:「1つのオペレーター — N個のウォレット」
アドレスクラスターグラフ:1つのオペレーター — 複数のウォレット、行動類似性でグループ化
Hyperliquidでは、単一のマーケットメーカーが数十〜数百のアドレスを通じて運用できます。
クラスタリングアルゴリズム:
- 各アクティブアドレスについて — Nの時間ウィンドウでフィンガープリントベクトルを構築
- 階層的クラスタリング — 距離が閾値未満のアドレスを結合
- 時間的検証 — クラスターの時間的安定性を確認
- クロスペア検証 — 2つのアドレスが異なるペアを取引しているがフィンガープリントが一致する場合 — 強いシグナル
Cluster #7 (suspected: Wintermute)
├── 0x3a1f...2e8c — BTC/USDT, 45% of activity
├── 0x7b2d...9f1a — ETH/USDT, 30% of activity
├── 0xc4e8...5d3b — SOL/USDT, 15% of activity
└── 0x91fa...0c7e — ARB/USDT, 10% of activity
Common pattern: symmetric quoting, 5 levels, median_IOI=240ms,
median_size=500±8%, batch cancel 60%, presence 95%
パート5:操作シナリオとそのフィンガープリント
スプーフィング:偽の壁のフィンガープリント
Spoofer fingerprint:
cancel_rate: > 95%
lifetime: < 2 seconds
placement: 1-3 ticks from mid-price
size: anomalously large (>10x median depth)
reaction_to_approach: cancel when price approaches
cyclicity: repeats >3 times / minute
スクイーズ:流動性の罠
4つのフェーズ:静かな蓄積、流動性の除去、ストップオーダーのカスケード、利益確定。フェーズ1からフェーズ2への移行を識別することで、リアルタイム検出が可能です。
アイスバーグ / 隠れた蓄積:静かな積み上げ
Hidden accumulation fingerprint:
visible_size: small (10-50 lots)
refill_speed: instant (< 100ms after fill)
refill_count: > 20 at a single level per session
price_reaction: price does not move despite volume
ウォッシュトレーディング:自己取引
同じクラスターの2つ以上のアドレスがbidとaskに同時に注文を出し、互いに約定させます。目的:出来高の水増し。
パート6:Marketmaker.ccでの実装
行動フィンガープリントシステムアーキテクチャ
┌─────────────────────────────────────────────────────────────┐
│ DATA LAYER │
│ ├── Hyperliquid Node → L3 order-by-order + wallet IDs │
│ ├── CEX WebSocket → L2 depth + trades │
│ └── Historical Store → QuestDB / Parquet │
├─────────────────────────────────────────────────────────────┤
│ FEATURE EXTRACTION │
│ ├── Timing Engine → Hawkes fit, IOI distribution │
│ ├── Sizing Engine → Size stats, round-lot detection │
│ ├── Placement Engine → Offset calc, symmetry analysis │
│ ├── Reaction Engine → Post-fill tracker, vol response │
│ └── Lifecycle Engine → Lifetime stats, cancel patterns │
├─────────────────────────────────────────────────────────────┤
│ CLASSIFICATION / IDENTIFICATION │
│ ├── Online Classifier → Real-time participant tagging │
│ ├── Cluster Engine → Address clustering (DEX) │
│ ├── Similarity Search → Fingerprint matching │
│ └── Anomaly Detector → Spoof / squeeze / wash detection │
├─────────────────────────────────────────────────────────────┤
│ VISUALIZATION │
│ ├── Queue Position + Participant Labels │
│ ├── Cluster Graph (known MM clusters) │
│ ├── Alert System (manipulation detected) │
│ └── Historical Fingerprint Browser │
└─────────────────────────────────────────────────────────────┘
トレーダーがターミナルで見るもの
╔═══════════════════════════════════════════════════════════════════════════╗
║ 10000 USDT │ 合計: 3,200 ║
║──────────────┼───────────────────────────────────────────────────────── ║
║ 内訳: │ 🤖 MM (cluster#7, ~Wintermute): 800 lots [5 levels] ║
║ │ 🤖 MM (cluster#12, 不明): 400 lots [3 levels] ║
║ │ ⚠️ 疑わしい (spoof score 87): 500 lots [lifetime<2s]║
║ │ 🟡 @pro_scalper: 100 lots ║
║ │ 🔴 自分: 10 lots ║
║ │ 👤 リテール / 未分類: 1,390 lots ║
║──────────────┼───────────────────────────────────────────────────────── ║
║ 前方の列 │ 実質: ~1,200 (spoof除外) 名目: 1,800 ║
║ "クリーン"ETA│ 6.7秒 (名目10秒と比較) ║
║ 壁のタイプ: │ MMバック (65% MM出来高) — 維持される可能性が高い ║
╚═══════════════════════════════════════════════════════════════════════════╝
アラート
- 🔴 あなたの価格レベルでスプーフ検出 — 注文の前に疑わしいブロックが特定されました
- 🟡 MMの撤退 — マーケットメーカーがクォートを引き上げ、流動性が低下しました
- 🟡 スクイーズのセットアップ検出 — アドレスのクラスターがポジションを蓄積し流動性を除去しています
- 🟢 壁の強化 — 既知のMMからの出来高があなたのレベルに追加されました
パート7:倫理と限界
許容されることとされないこと
許容され推奨されること:
- 自身の取引判断のための匿名参加者のタイプ別分類
- 逆選択に対する保護のための操作検出
- 市場構造を理解するためのDEXでのアドレスクラスタリング
許容されないこと:
- ウォレットアドレスによる個人の特定
- 同意なく識別されたパターンの販売
- 市場操作のためのデータ使用
限界
- 適応型アルゴリズム — 高度なMMはランダム化を追加
- レジームスイッチング — 単一のボットが市場レジームに応じて行動を変更可能
- 偽陽性 — 2つの参加者が偶然類似のパラメータを共有する可能性
- CEXの不透明性 — L3データはCEXでは利用不可
結論:板の読み取りから参加者の読み取りへ
従来のトレーダーが見るもの:10000レベルに2,400ロット。高度なトレーダーが見るもの:「自分の注文は列の1,800番目、ETA — 15秒」。しかし、行動フィンガープリンティングを持つトレーダーが見るもの:
「2,400のうち800はマーケットメーカー(おそらくWintermute)で、壁は堅固。500はスプーフの疑いがあり、自分の前の実質的な列は1,800ではなく1,300。調整済みETA — 10秒。マーケットメーカーはクォートを引き上げていない — 今のところ大きな動きは予想されない。」
情報の各新しいレイヤーはエッジです。そしてスピードとは異なり、注文板解釈の品質はリテールトレーダーが競争できる領域です。
Marketmaker.ccでは、キューポジションから行動フィンガープリンティングまで、統合製品としてこのシステムを構築しています。
シリーズの前の記事:"壁の内部のキュー:注文板密度における注文ポジションの分析"
参考文献
- Kirilenko A., Kyle A., Samadi M., Tuzun T. — "The Flash Crash: High-Frequency Trading in an Electronic Market" (CFTC, 2011)
- Paddrik M., Hayes R., Scherer W., Beling P. — "Gaussian Process-Based Algorithmic Trading Strategy Identification" (CFTC / OFR, 2014)
- Cont R. et al. — "Unsupervised spectral clustering of trader order flow" (2023)
- FIDR-SCAN — "Explainable Machine Learning for HFT Dynamics Discovery" (2024)
- Do B.L., Putniņš T.J. — "Detecting Layering and Spoofing in Markets" (SSRN, 2023)
- Hawkes A.G. — "Spectra of Some Self-Exciting and Mutually Exciting Point Processes" (Biometrika, 1971)
- Avellaneda M., Stoikov S. — "High-Frequency Trading in a Limit Order Book" (Quantitative Finance, 2008)
MarketMaker.cc Team
クオンツ・リサーチ&戦略