源文件:research/quant_digests/2026-04-15_1524_clusterfirst-pairadmission-spreadfade-shell.md
README.md + strategies/AutoPairsTrading/__init__.py)+ Binance USDⓈ-M 1h public-data portability probejinczing2022-12-22Sharpe 0.47 / annualized return 8%,clustering-based 版本 Sharpe 1.89 / annualized return 50.44%reports/artifacts/quant_digests/2026-04-15_clusterfirst_pairs_probe_summary.jsonreports/artifacts/quant_digests/2026-04-15_clusterfirst_pairs_probe_hourly.csv> base alpha = 被筛选出来的 cointegrated pair 的 spread mean reversion。
翻成人话:
这轮真正值得写的新增量,在于 repo 没把“pair 从哪来”留空,而是给了一套 先聚类、再筛 cointegration、再滚动重选 的 admission 机制。也就是说: > alpha 本体 = spread fade;增量部件 = cluster-first pair admission。
所以它不是 filter,不是 overlay,而是一条 可以直接写成 entry / exit / sizing / 风控的 raw alpha 壳。
如果只是“再来一篇 spread z-score fade”,这轮不值得写。
这轮值得进池,原因在 3 点:
之前很多 pairs 主题默认 pair universe 已经给定;这份 repo 给的是:
30d 重新选对。不依赖私有订单流、不依赖昂贵数据商,复现门槛低,适合 desk 快速做最小实验。
pair selection 可以留在 1h 甚至更慢;真正的入场、减仓、stale-leg veto、冲击过滤,可以下沉到 15m / 5m。
所以这轮真正可吸收的,不一定是 repo 原版 shell 整体照搬, 而是: > 把 cluster-first admission 当成 pairs/stat-arb book 的前置选对层。
strategies/AutoPairsTrading/__init__.py 的第一层不是直接枚举全市场 pair,而是先做 feature clustering:
Binance Perpetual Futures1huniverse_symbols 文件24h price change;1d 一路拉到约 171d(24*i, i=1..171 step 10)PCA 降维;AgglomerativeClustering(complete linkage,默认 6 簇)翻成人话: > 它不是“谁跟谁看着像就配对”,而是先按多窗口收益轮廓把币分到行为相近的簇里,再在小池子里做 pair selection。
这对 desk 的价值很直接:
簇内每一对候选,repo 做的是:
ADF p-value 给 pair 排序;3 对。也就是说,repo 的 pair selection 不是“相关性大就上”,而是更接近: > 行为先相似,再看 spread 站不站得住 mean-reverting 统计检验。
源码里:
period = 30reevaluate_pairs()这点很关键,因为 crypto pair 关系很容易漂移:
因此这份 repo 真正提供的是: > 动态 pair universe,而不是固定 pair 名单。
交易层不花哨,但完整:
KalmanFilterbeta/interceptbb_window = 24*7(约 7 天小时级)> mean + 2σ:做空 spread< mean - 2σ:做多 spread这意味着它不是只给 pair selection, 而是给了一条完整 raw alpha 壳:
repo 默认:
balance / 6 分配;所以它不是 production-ready, 但也不是一句“pairs trading 很酷”的空壳。
1h 最小 portability probe:选对逻辑能复现,但当前 direct shell first verdict 偏负/fapi/v1/klines1h2025-12-16 16:00 UTC 到 2026-04-15 15:00 UTC,共 2880 根小时 barAAVE / COMP / CRV / SNX / SUSHI / UNI / YFI60d 训练;30d 测试;30d 重做一次 clustering + pair ranking;2 对不重叠 pair;7d z-score;±2σ,exit=0-cross;4 bps。注意:
> 这套 cluster-first admission × spread fade,在今天 active Binance perp universe 上还能不能顺手跑起来?
-10.37%-11.00%-1.52-1.63-15.38%35 次腿变动事件两段测试窗里,选出来的 pair 分别是:
2026-02-14 → 2026-03-16:CRV-SNX、AAVE-SUSHI2026-03-16 → 2026-04-15:AAVE-COMP、CRV-YFI一句话结论: > pair discovery 这件事是能复现的,但 direct shell 迁到当前 liquid-major-ish DeFi perp 子集上,first verdict 偏负。
如果这轮 probe 连 pair 都选不出来,那就没什么好说的。 但现在不是这样:
所以真正可复用的部分更像: > cluster-first pair admission,是一块可插拔组件;原版 spread fade 壳,不应直接抬进 production 候选池。
repo 里原始 universe 有不少今天已经不在 Binance USDⓈ-M 活跃交易的符号:
BALDODOLRCMKRREN这意味着:
更诚实的 desk 读法应该是:
1m / 3m / 5m / 15m 的正确定位最合理的拆法是:
1h / 4h / daily 更新 cluster + pair list15m 做 spread z-score / residual excursion5m / 1m 做 stale-leg、盘口深度、滑点和 maker/taker 选择也就是说,它对 short-cycle desk 的意义不是“高频选 pair”,而是: > 给你一个更系统化的 pair admission 前置层。
为什么仍算 raw alpha?
为什么 current priority 不该太高?
更合理的结论是: > 主题合格,部件有价值,但现阶段更像“pairs book 的 reusable admission module”,不是现成 alpha winner。
当前活跃子集缩水后,pair 结构已经变了。
我这里为了快速判断 portability,做了简化版 walk-forward,而不是完整还原 Jesse 环境与在线 Kalman 状态机。
若真上 desk,至少要补:
实际上,这轮恰恰说明:
> 这是一个合格的新 raw alpha 主题,但当前真正值得 desk 吸收的,不是“照抄 2022 clustering-based pairs shell”,而是“cluster-first pair admission”这块模块化组件。
更具体地说:
按优先级,我建议直接做这 5 步:
先固定这套 clustering admission,只替换交易壳:
看问题到底出在 pair list,还是出在交易壳。
15m execution 版,而不是继续全靠 1h 触发1h 负责选 pair,15m 负责:
直接比较:
看 clustering 到底提供了多少真实增量。
下一版不要只盯 AAVE/COMP/CRV/SNX/SUSHI/UNI/YFI,应扩到:
看 cluster-first admission 在更大 universe 下是否反而更有价值。
对 pair 两腿补 3 个 veto:
5m 冲击超过阈值。这一步最可能把“统计上像 pair、交易上却很脏”的假机会筛掉。