做市商画像:0x1081e2
一个地址,74 天,34,473 笔成交,每一笔净赚 13.82bp, 稳定性排全场 2/2866。我花了六周想抄他。
最后我关掉它,不是因为抄不到 —— 是因为我终于看清他是什么。
一、初遇:一个不像话的地址
我在扫 Hyperliquid 的 xyz dex(HIP-3 builder 部署的股票/商品/外汇永续)时注意到他。 第一份画像里的数字就很刺眼:
| 指标 | 值 |
|---|---|
| 观察期 | 74 天 |
| 净值 | 约 $60 万 |
| 并发持仓 | 69 个 |
| 阶梯挂单 | 684 张 |
| 挂单成交率 | 96%+ |
| 胜率 / PF / t 值 | 68.7% / 1.97 / 14.9 |
然后我用交易所自报的 closed_pnl 口径复核 ——
这是最硬的一把尺子,因为它不含盯市幻觉:
= 13.82bp / 单位名义,其中被动腿 16.14bp
PnL 排全场 15/2,866;逐日稳定性排 2/2,866(t = 4.29,13 天 100% 为正)
这是真钱,不是盯市幻觉。
同场对照:纯被动地址整体是 −0.26bp(279 个地址、$4.52B 名义)。 他是 2,866 个里的第 15 名 —— 一个异常值。
二、他的阶梯:看起来可以抄
我在 data/ 里攒了 189 万张他的订单和 1257 万笔带地址的全场成交,
开始反推他的报价规则。
- 5 档阶梯,档位比例约 1.00 / 1.40 / 1.74 / 2.07 / 2.41
- 改价频率约 30%/秒
- 撤单率 99.85%
- 订单寿命中位 5–6 秒
这些数字组合起来指向一个很自然的结论:他靠「快撤快挂」保持队首,所以我们必然排不到他后面。 我据此在 09-27 判定「不可部署」。
四十分钟后,我自己的另一份文档推翻了这个前提。
三、三个被推翻的前提
前提 1:「他在队首」
队首不存在。 Hyperliquid 的 ALO 改价机制是「发新单 + 撤旧单」—— 100% 的改价都换了新的 oid、新的价格。
也就是说他每次「改价」自己就走到新价位的队尾。 99.3% 的 replace 是机械的。「我们排不到」这个死结的前提塌了 —— 但这是我四十分钟后才发现的,而我没有回头标注「前提已撤销」。
前提 2:「连他自己的充填率都不够」
我算过他 0–5bp 档的充填率只有 53.5%,低于我认为的收支平衡门槛, 于是写下「连他都不够,我们更不够」。
三重错。
- 53.5% 是 cloid 级的充填概率上界,不是成交率 —— 我自己在文档里写过它不是成交率,然后当成交率用了
- 成本口径错:未成交的挂单不付费。
正确写法是
net = fill_rate × (excess − fee)—— 充填率在括号外,不改变符号 - 「收支平衡门槛 67.4% / 91.6%」是把固定费率按成交名义硬除出来的假门槛
正确口径下:breakeven 条件是 excess > fee,
与充填率无关;充填率只影响「做多大」,不影响「赚不赚」。
| 币 | 超额 | 基础档费 | 每笔成交净 |
|---|---|---|---|
| xyz:BB | +2.926bp | 1.971 | +0.955bp ✅ |
| xyz:PURRDAT | +2.151bp | 1.971 | +0.180bp ✅ |
这是全项目第一次算出来的正超额。但「充填率不够」那句必须删。
前提 3:「他的成交单寿命 5–6 秒」
这是用全部订单算的。用地面真值直接测成交的那些单:
| 从挂单到成交 | 占比 |
|---|---|
| ≤ 2 秒 | 17.2% |
| ≤ 5 秒 | 32.4% |
| ≤ 10 秒 | 46.3% |
| ≤ 30 秒 | 72.9% |
| 中位 | 11.90 秒 |
不是 2 秒,是中位 11.9 秒。「5–6 秒、99.8% 撤单」说的是全部订单; 而真正成交的那些,是他刻意留下来的长寿命单。这是一个存活选择。
四、复现失败:我用错了锚
最实际的一个教训在这里。
我从「他挂单距离中位约 12–17bp」推出应该把报价挂在 oracle ± 6~30bp。
结果是浅档 26% 直接穿价被拒,其余离盘口太远、只能被扫穿成交 ——
捕获只有 1.8bp。
后来我用毫秒级盘口定位他成交时的真实挂单位置(3,147 笔 maker 成交):
我之前混淆了「离 oracle 远」和「离 BBO 远」—— xyz 的点差极宽,oracle 与 mid 本来就有大幅偏离。
「离 oracle 12bp」完全可以同时是「就在最优价上」。
这一条解释了为什么我照着「他的距离」报价却一单都吃不到: 我抄的是距离这个数字,他做的是站在盘口上这个动作。
五、转折:他不是一个人
真正的转折来自一次顺手做的相似度检查。
我把 xyz dex 上所有做市地址的币种书做了两两比对:
| 发现 | 数字 |
|---|---|
| xyz dex 成交中来自「对称型做市地址」的比例 | 82.1%(4,666 个地址) |
| 目标地址按成交量的排名 | 第 14 / 12,376 |
| 他的量占全 dex | 1.51% |
| 他所属的克隆组 | 8 个钱包,币种书 Jaccard = 1.00 |
| 克隆组内成交笔数差异 | 3.6% |
8 个钱包挂着完全相同的 33 个币的书。成交笔数和活跃分钟的极差只有 3.6%。
他是机构级做市农场的一个分片。而我之前六周在做的, 是「照抄一个分片的行为规则」—— 对面是 8 个以上同步运行的同款程序。
顺便说一个反向的收获:这也解释了为什么他的行为那么规整 —— 规整不是高手的特征,是程序的特征。我早期把「行为极度一致」当成 skill 的证据, 其实它更像 footprint。
我也做过一次「他是不是同一控制方」的检验。证据只到 「行为同型 + 币书 Jaccard = 1.00」,而克隆组的 33 个币 ≠ 他的 72 个币(规模差一倍多)。 同秒共现虽然达到无关做市商的 5.08 倍,但同一款第三方做市软件的不同客户也会共享触发逻辑。
所以我把结论降级为「行为同型」—— 不构成「同一人」的充分证据。
六、终局判词
2026-09-28,我正式关闭这条线。第一行就是六个字:不可部署。
理由:BB / PURRDAT 的市场剥离超额(+2.926 / +2.151bp)虽然是全项目首次为正, 但 ——
- 只有 2 个币
- 选币 4 中 2 失手(50%)
- PURRDAT 贴费(基础档净 +0.180bp,几乎为零)
- 队列位充填率未测,且原理上不可测
不符合「稳定复利、横截面分散」的目标。
七、我从这条线带走了什么
- 异常值的排名不等于可复制性。 给定 N 个对象按事后收益排序取头部,必然找到异常值。 要看按该画像分层后整个层的加权表现 —— 我早期把一个 34.92bp 的地址当原型, 按频次分层后低频被动层整体是 −3.07 ~ −3.27bp。
- 规整的行为是程序特征,不是技能特征。
- 「离 oracle 远」和「离 BBO 远」是两件事。 合成标的的点差极宽,这两个距离可以差很多。抄任何「距离」参数前, 先确认那个距离是相对谁量的。
- 存活选择会伪装成行为规律。 「订单寿命 5 秒」和「成交单寿命 11.9 秒」都是真的,但它们描述的是完全不同的人群。
- 前提被推翻之后要回头标注。 我在 09-27 04:30 写下「他占队首、我们排不到」, 40 分钟后自己的文档证明队首不存在 —— 但那份死结从来没被撤销过。
这条线我花了六周,最后交出来的是「不可部署」四个字。
但它不是白做的。它给了我两样东西: 一套看穿做市行为的方法(毫秒盘口定位、存活选择识别、克隆组检测), 和一个我现在会反复用的判断 ——
当一个人的行为好得不像是人做的,那它多半不是人做的。
— 记录于此,明年回看 —