一个零和市场的地形图
结论不太好看:我一条能上实盘的策略都没找到。但我拿到了三样东西 —— 这个场子的结构性事实、两张「谁在赚钱」的画像,和一份很长的 「我原来以为是这样、其实是那样」的清单。
一、这个场子,结构上不给你留位置
我把 2,866 个有效地址的 60 分钟 markout 重建成账本,加总是:
这不是「大部分人亏钱」,这是零和减手续费:整个场子除了手续费之外没有任何净额。 按下单风格分原型,只有最高频的两层为正:
| 原型 | 地址数 | 名义 | 每单位名义 |
|---|---|---|---|
| 纯被动 <5% 主动 | 279 | $4.52B | −0.26bp |
| 偏被动 5–30% | 343 | $8.64B | −0.02bp |
| 混合 30–70% | 531 | $8.50B | −1.35bp |
| 偏主动 70–95% | 469 | $7.45B | −1.86bp |
| 纯主动 >95% | 1,244 | $5.81B | +0.42bp |
再按日成交笔数分层,两侧都只有最高频那一层为正,其余全负。 这条结论后来被我自己的实验反复印证:任何机械规则的期望值都是 −手续费, 除非它从某个具体参与者手里把钱拿走。
二、只有两种生物在赚钱
第一种:靠撤单/队列优势的做市商
目标地址 0x1081e2,74 天里全程正收益:
- 交易所自报口径 34,473 笔、名义 $32.5M、净 +$44,950 = 13.82bp/单位名义, 其中被动腿 16.14bp —— 这是真钱,不是盯市幻觉
- PnL 排 15/2,866,逐日稳定性排 2/2,866(t=4.29,13 天 100% 为正)
但这里有个我当时没意识到的前提。他不是一个人,是机构级做市农场的一个分片: xyz dex 82.1% 的成交来自 4,666 个对称型做市地址,8 个钱包挂着完全相同的 33 个币的书 (Jaccard = 1.00),成交笔数与活跃分钟极差只有 3.6%。
所以「照抄他的规则」本质上是抄一个分片的行为,而对面是 8 个以上同步运行的同款程序。 我永远不可能「和他一样快」。
第二种:靠外部真实股价的主动方
地址 0x49e96e25:$491M 名义、100% 主动吃单、付满 taker 费仍然净赚 13.80bp。
边际随时间单调拉长到 4 小时(1 分钟 +5.25bp → 240 分钟 +22.98bp),
79% 的成交集中在美股时段,主打 NVDA / MSTR / CRCL。
也就是说他的钱来自「场内的合成标的没有及时反映真实股价」—— 这是一个采购决策(买实时美股行情),不是研究决策。
没有第三类。这两种人的共同点是:他们的收益都依赖某种我拿不到的东西 —— 一个是机构级的同构基建,一个是另一条数据链。
三、我原来以为的,全错了
两个月里我立了 27 条假说,全部被自己的数据推翻。下面几条最值钱。
-
「挂得远就赚钱」—— 观察为真,可交易为假。
远端被动成交的 60 分钟 markout 确实是正的,而且很夸张(40bp+ 捕获档 +27.26bp): 单调、跨时间块同号、剔除最大 20 个被动地址后不降、13/13 天全正、延到 240 分钟不衰减。
但我造了一个「永远挂在离 oracle d bp」的合成挂单去实际交易: 3bp → −4.64 / 8bp → −5.89 / 15bp → −9.47 / 25bp → −13.37 / 40bp → −14.96。 每个距离都是负的,挂得越远越负。
差的 42bp 全部是选择效应 —— 真实发生的远端被动成交,是撤单决策筛选后的残留; 会被碾的人早就撤了。 -
前视偏差是最容易骗到自己的一类。
我有两条策略一开始是强正的,查下去发现是代码里的前视: 挂单价用了「该分钟均价」(含决策点之后的信息),而撮合发生在该分钟开头。 改成MD[i,t−1]之后: +8.65bp/天 → −18.48bp/天,正号标的 33/45 → 0/41。
教训:任何按周期聚合的量,只要聚合窗口跨过决策时点,就是前视。均值尤其危险,因为它看起来无辜。 -
换一个场子,符号就反了。
一套横截面动量在 Hyperliquid 上跑出 +47.1%/年、Sharpe 0.83。我把同一套代码 搬到 Binance(526 个标的、1,485 天):−54.5%/年、Sharpe −1.68。
逐币比对显示两个场子的日收益相关系数中位 0.9998 —— 不是数据问题,是这策略本来就没有场子外的普适性。 -
2% 的日子贡献了 115% 的利润。
同一套动量在 HL 上 964 个交易日:全期毛利 16,624bp, 而最好的 20 天合计 19,068bp。其余 98% 的日子净亏。
它的真身不是「动量策略」,是「新上币暴涨暴跌的彩票」。 -
成交模型会凭空造出 12.45 倍的幽灵成交。
我一开始用「价格触及/穿越我的限价 ⇒ 成交」做回测。在「他确实挂着单」的干净样本上实测: 价格穿过他的限价 38,230 次,他只成交了 3.2%;打在限价上 5,222 次,成交 41.3%。
朴素模型造出的幽灵成交 60 分钟 markout = −0.54bp、逆向 50.9%, 穿透超过 16bp 的更是毒到 −21.81bp、逆向 74.0%。 这才是所有深档模拟都亏钱的头号原因 —— 不是策略错,是成交假设错。 -
信号与成本常常同源,专门挑低成本样本会把信号一起挑没。
订单流方向信号是真的(IC 0.094、57 个币 100% 正号、两半 53/54 同号)。 但名义等权点差 −5.47bp,净值恒负。
我限定到点差最小的 6 个标的(0.14–1.64bp),点差确实降到 −1.65bp —— 但信号也同步从 +1.29bp 缩到 +0.38bp,净值仍然恒负。 -
资金费不是收益流,是一个被噪声淹没的补贴。
模拟里资金费是唯一每一块都为正的分量(对总敞口 +15.8 ~ +57.0%/年,收付比 5:1), 机制看起来完全自洽。
但换成正确的分母:资金费 / 成交名义 = 0.668bp, 而交易腿的标准差是 5.2bp —— 只有噪声的八分之一。 要让它变成收益,交易腿必须被确定在 ±0.5bp 以内, 按当前方差需要约 173 天数据。
决定性反证:我们线上纸面账本实际是在付资金费(累计 $2,569),不是收。
四、我学到的研究方法
技术结论会过时,下面这些不会。它们全部来自踩过的坑。
关于判据
- 判据必须在动手前写死,并对两个方向一视同仁。 我犯过的最典型的错:置信区间含 0 的标 ✅、另一个含 0 的标 ❌; 写死的 70% 阈值事后想换成别的口径来「升格」结论。
- 绝不把「区间里最好的一天」当成策略的水平值。 这是整个项目最贵的一个错误:09-03 的 +14.5bp 被写进规格当「策略成型后的水平」, 而三天均值是 −1.0bp。
- PF 过高本身是危险信号。 真实可持续的边际是 PF 1.3–1.5;PF > 3 大概率是噪声、过拟合、前视或成交模型错误。 还要看参数是不是落在一根孤立的尖峰上 —— 邻居参数都 <1.0 就说明是尖峰不是平台。
关于自我欺骗
- 「查不到就用最新值」这类兜底逻辑本身就是前视。 宁可少挂一会儿,也不要用错时刻的价格挂。
- 任何「加一个更聪明的撤单信号」的提案,先算「见信号就全撤、零代价躲掉」的乐观上界。 上界为负就直接关闭这条路径,不要再去优化信号模型。
- 不能用自己写的笔记当「实测值」的出处。 我把自己的 strategy-v1.md 当权威引了五轮,而那上面的数字本身就是错的。
- 口径不一致时,所有 ✅/❌ 都是废话。 同一个「他的费率」,我在不同文档里并存过 0.14 / 0.269 / 0.29bp 三个数; 我们自己的费率有六个版本。口径不锁定,结论无法比较。
关于统计
- 给定 N 个对象按事后收益排序取头部,必然找到异常值。 判断一个画像是不是真「原型」,要看按该画像分层后整个层的加权表现, 不是看层里最好的那个。我曾把一个地址的 34.92bp 当成可复制原型 —— 按频次分层后,低频被动层整体是 −3.07 ~ −3.27bp,只有 >2000 笔/天那层 +0.05bp。
- 先算统计功效,再做配置比较。 实测单窗口收益标准差 488.7bp,要分辨 50bp 需要 1,568 个窗口。 用配对差值代替各自的中位数排名,功效提高约 23 倍。
- 「两半同号」是弱判据。 必须报二项 p 值 + 两半幅度差。n 差 2 倍的两个独立正相关样本, 本来就有 3/4 概率凑出同号。
- 把「币/标的」当独立观测会低估方差,必须用 cluster bootstrap。 我的一条「卖侧特别强」的结论,用币聚类 bootstrap 压了之后置信区间直接含 0。
五、还没解决的
诚实的边界比结论更重要。下面这些我到现在也没有答案:
- 「比他的异常值还差多远」这个距离,我量出来了,但补不上。 场子的可复制侧天花板约等于 0 —— 纯被动地址整体 −0.26bp、$4.52B 名义, 而目标地址是 2,866 个里的第 15 名。差距是结构性的,不是调参能补的。
- 最优「留下率」这个目标函数本身就没定。 从 5% 移到 20%,取决于你用 bp 点估计还是用夏普/回撤/集中度/多窗口同号四件套。 这是个开放的判据设计问题,不是参数问题。
- 「我们该在哪些标的上下单」,正确答案目前是「不知道」。 反直觉的是,他回避的标的反而让我们表现更好(−4.03bp vs 全宇宙 −4.53bp), 亏损弥散在所有标的上。
- 观测窗口太短。几乎所有关键判定都建立在 13 天 / 5.5 天 / 37–66 小时的单 regime 样本上。 在这么短的样本里,任何搜索都会先找到同几种假象 —— 我在某一轮 13 天里自我推翻了 4 次,这个频率本身就是样本不足的度量。
写在最后
这两个月我最大的收获,不是找到了什么,而是知道了什么找不到。
交出一个我自己不信的策略,比交不出更糟。所以这里交的是一张定过价的地形图: 我知道场子在结构上零和减手续费,知道只有两种生物能赚钱以及他们各自靠什么, 知道我列的每一条假说为什么死,也知道自己还有哪些地方没测。
这不能让我赚钱。但它能让我不再把时间花在同一个坑里。
接下来我要攻的是那个唯一被定价出来的数字 —— 撤单/选择决策约值 22bp/单位名义(被动腿实测 16.14bp vs 无条件常挂 −5.89bp)。 过去十几轮我在调的是报价距离、阶梯比例、重挂节奏, 这些参数全部加起来值 0。唯一值钱的是「已经挂着的这一单,现在该不该撤」。
— 记录于此,明年回看 —