MarketMaker.cc Team
量化研究与策略
MarketMaker.cc Team
量化研究与策略
交易算法的行为指纹:独特的timing、sizing和placement模式
每个算法都会留下独特的指纹。学会解读它——你就能知道交易对手方是谁。
当法医鉴识人员到达现场时,他们会寻找指纹、鞋印、DNA——一切能将事件与特定个人关联起来的线索。订单簿就是这样一个场所,每秒钟数百名参与者在此留下自己的"指纹":特定大小、特定频率、距价格特定距离、特定存活时间的订单。
在中心化交易所(CEX)上,这些指纹是匿名的——你只能看到每个价格层级的汇总委托量。但即使从汇总数据中也能了解很多。而在拥有链上订单簿的DEX交易所——如Hyperliquid——每笔订单都绑定到特定的钱包地址,"指纹"变成了个人专属的。
在本文中,我们将探讨如何构建"数字指纹"(behavioral fingerprints)系统,用于识别参与者类型和具体的做市商算法。
雷达图:交易者行为指纹的五个关键维度
做市商机器人是一个按照严格(或可学习的)规则做出决策的程序:
每一组答案都构成了算法的独特"签名"。
┌─────────────────────────────────────────────────────────────────┐
│ 交易者数字指纹 │
│ │
│ 1. TIMING │ 订单间隔、对事件的反应、 │
│ │ 日内活动模式 │
│──────────────────┼───────────────────────────────────────────── │
│ 2. SIZING │ 订单大小分布、 │
│ │ 整数倍特征、离散程度 │
│──────────────────┼───────────────────────────────────────────── │
│ 3. PLACEMENT │ 距mid-price的距离、 │
│ │ bid/ask对称性、价格水平锚定 │
│──────────────────┼───────────────────────────────────────────── │
│ 4. REACTION │ 对成交、撤单、价格跳跃、 │
│ │ 波动率变化的响应 │
│──────────────────┼───────────────────────────────────────────── │
│ 5. LIFECYCLE │ 订单平均存活时间、 │
│ │ 撤单条件、modify vs cancel+new │
│──────────────────┴───────────────────────────────────────────── │
└─────────────────────────────────────────────────────────────────┘
带自激励的Hawkes过程:具有指数衰减的事件簇
Timing模式是指纹中最难伪造的元素。它由算法架构、网络延迟、硬件甚至开发者的时区所决定。
关键指标:
订单间隔(IOI) — 同一参与者连续订单之间的时间间隔。HFT机器人的IOI为50-500微秒,手动交易者为数秒至数分钟。
成交反应时间 — 订单被执行到下一次操作之间的延迟。反映了机器人的内部架构。
日内周期模式 — 日内活动分布。机构做市商在交易时段活跃,加密货币机器人则全天候运行。
自激励(Hawkes强度) — 当前订单"激发"下一个订单的程度。做市商表现出强烈的自激励特征。
Hawkes过程非常适合建模timing模式——这是一种具有自激励特性的点过程。Hawkes过程的参数(基础强度μ、激励系数α、衰减速率β)构成了参与者紧凑的"时序指纹"。
市场参与者分类体系:做市商、高频交易者、机会主义者、基本面交易者和噪声交易者
基于行为特征,可以将参与者划分为稳定的类别。CFTC研究(Kirilenko等,2011):
1. Market Makers(做市商)
2. High-Frequency Traders(高频交易者)
3. Opportunistic Traders(机会主义者)
4. Fundamental Traders(基本面交易者)
5. Noise Traders(噪声/散户交易者)
有监督学习: 对于DEX数据(Hyperliquid),可以从已知做市商地址构建训练集。RNN模型准确率可达>85%。
无监督学习:
分类回答的是"这是做市商吗?"的问题。识别回答的是"这是那个特定的做市商吗?"的问题。
从五个维度中,我们提取一个数值向量——参与者的embedding:
Fingerprint Vector(示例):
┌──────────────────────────────────────────────────────────┐
│ Timing: │
│ hawkes_mu: 0.3 (基础强度) │
│ hawkes_alpha: 0.7 (自激励) │
│ hawkes_beta: 1.2 (衰减速率) │
│ median_IOI_ms: 240 (订单间隔毫秒) │
│ circadian_peak_utc: 14.5 (活跃高峰) │
│ │
│ Sizing: │
│ median_size: 500 │
│ size_cv: 0.08 (变异系数) │
│ round_lot_ratio: 0.92 (整数手比例) │
│ bid_ask_size_ratio: 0.97 │
│ │
│ Placement: │
│ median_offset_bps: 3.2 (距mid-price) │
│ quoting_symmetry: 0.94 (0=不对称,1=对称) │
│ num_levels: 5 (报价层级数) │
│ │
│ Reaction: │
│ post_fill_delay_ms: 12 │
│ vol_spread_elasticity: 2.1 (价差/σ) │
│ qtr: 850 (报价成交比) │
│ │
│ Lifecycle: │
│ median_lifetime_ms: 1200 │
│ modify_ratio: 0.85 (modify vs cancel+new) │
│ batch_cancel_rate: 0.60 (批量撤单比例) │
└──────────────────────────────────────────────────────────┘
地址聚类图:一个操作者——多个钱包,通过行为相似性聚合
在Hyperliquid上,一个做市商可以通过数十甚至数百个地址进行操作。
聚合算法:
聚类 #7(推测为:Wintermute)
├── 0x3a1f...2e8c — BTC/USDT, 45%活跃度
├── 0x7b2d...9f1a — ETH/USDT, 30%活跃度
├── 0xc4e8...5d3b — SOL/USDT, 15%活跃度
└── 0x91fa...0c7e — ARB/USDT, 10%活跃度
共同模式: symmetric quoting, 5 levels, median_IOI=240ms,
median_size=500±8%, batch cancel 60%, presence 95%
幌骗者指纹:
cancel_rate: > 95%
lifetime: < 2 秒
placement: 距mid-price 1-3个tick
size: 异常大(>10倍median depth)
reaction_to_approach: 价格靠近时撤单
cyclicity: 每分钟重复>3次
四个阶段:静默建仓 → 撤走流动性 → 止损单级联触发 → 获利了结。通过监测从第1阶段到第2阶段的转变,可以实现实时检测。
静默吸筹指纹:
visible_size: 小量(10-50手)
refill_speed: 即时(成交后< 100ms)
refill_count: 单一价位每个交易时段> 20次
price_reaction: 尽管有成交量但价格不动
来自同一聚类的两个或多个地址同时在bid和ask挂单并互相成交。目的:刷交易量。
┌─────────────────────────────────────────────────────────────┐
│ 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 手 [5 levels] ║
║ │ 🤖 MM (cluster#12, 未知): 400 手 [3 levels] ║
║ │ ⚠️ 可疑 (spoof score 87): 500 手 [lifetime<2s] ║
║ │ 🟡 @pro_scalper: 100 手 ║
║ │ 🔴 我的: 10 手 ║
║ │ 👤 散户 / 未分类: 1,390 手 ║
║──────────────┼───────────────────────────────────────────────────────── ║
║ 前方排队 │ 真实: ~1,200 (排除spoof) 名义: 1,800 ║
║ "净"ETA │ 6.7s (vs 名义 10s) ║
║ 挂单类型: │ MM支撑 (65% MM成交量) — 大概率不会撤走 ║
╚═══════════════════════════════════════════════════════════════════════════╝
可以且应该做的:
不可以做的:
传统交易者看到的是:10000价位有2,400手委托。进阶交易者看到的是:"我的订单排在第1,800位,预计等待时间15秒"。而拥有行为指纹分析的交易者看到的是:
"这2,400手中有800手是做市商(可能是Wintermute),挂单墙可靠。500手疑似幌骗,在我前面的真实排队是1,300而不是1,800。调整后的预计等待时间为10秒。做市商没有撤走报价——这意味着目前不预期有大幅波动。"
每一层新增的信息都是一种优势。与速度不同,订单簿解读的质量是散户交易者可以参与竞争的领域。
在Marketmaker.cc,我们正在构建这一系统——从排队位置到行为指纹分析——作为一个完整的产品。
上一篇文章:《挂单墙中的排队:订单簿密度中的订单位置分析》