源文件:research/quant_digests/2026-04-23_0347_hurstgate-clustered-pairs-shell.md
这次看的不是论文,而是 2026 GitHub 仓库 Jing-Lavinia / Pairs-Trading。它的价值不在“又做了一次 pair spread fade”,而在于把一条 可实盘化的 pairs/stat-arb 策略壳 写得很完整:
如果只盯着 repo headline 的 1H 回测收益,会错过它对我们更值钱的那部分:它把“pair fade 怎么变成一个完整策略壳”说清楚了。
一句话:base alpha 就是 cointegrated spread 的均值回复。
也就是:
所以这篇东西不是纯 filter,不是纯 overlay。它本体就是 raw alpha;Hurst / clustering / concentration cap 只是让这条 raw alpha 更像可交易策略,而不是课堂练习。
1H 严格 OOS 结果是:Sharpe 3.77 / CAGR 92.15% / MaxDD -3.37% / 16 对 active pairs / taker+slippage 4.5 bps per leg。这些数字不能直接外推到 5m/15m,但至少说明作者不是只写了个玩具扫描器。15m/5m,pair 简化版):H < 0.60 后约 -1.17 bps/笔 net,说明在 15m 上,不是所有 pair 都值得做,更重要的是 pair selection。LINKUSDT/AVAXUSDT,加 gate 后约 +22.14 bps/笔 net、75% win rate、累计约 +1416.7 bps;这说明这条 alpha 在短周期上并没有死,只是需要选对 pair。BNBUSDT/AVAXUSDT 在 gate 后约 +12.86 bps/笔 net,SOLUSDT/AVAXUSDT 约 +9.26 bps/笔 net,XRPUSDT/AVAXUSDT 约 +8.63 bps/笔 net。当前 desk 已经积累了不少单资产 trend / reversal / carry 方向的素材,但 pairs / stat-arb 这条线更容易遇到两个实盘问题:
这份 repo 恰好把这两个问题都正面写进去了:
对 short-cycle desk 来说,这比“又一个 z-score=2 开仓、0 平仓”的 pair 教程更有用,因为它更接近 真实组合部署。
repo 先对 1H log returns 做:
StandardScalerPCA(5)DBSCAN(eps=15, min_samples=2)然后只在同一个 cluster label 里做后续 pair 检验。这个动作不是 alpha 本体,但很实用:
对我们来说,可以把它翻成更轻量的 short-cycle 版本:
15m 用最近 20~30d returns;5m 用最近 5~10d returns;repo 的第二层 admission 是:
p <= 0.05half-life 在 [4h, 48h]这背后的想法很朴素:
这个约束对 15m/5m 特别重要,因为短周期最怕的不是“没信号”,而是看起来像 alpha,实际上只是高噪音 + 高周转。
repo 用 Kalman filter 跟踪动态 gamma_t,而不是把 hedge ratio 固定死。这个点我们其实已经在别的 digest 里见过,但这份 repo 把它自然嵌进了完整 shell:
这对 crypto 尤其合理,因为相关币之间的 beta 漂移比股票 pair 更快。
repo 用 rolling Hurst exponent,当 H < 0.60 才允许开新仓。
这层东西不该伪装成主 alpha,本质上它是:
从我这次最小 probe 来看,这层 gate 的效果是:
5m 平均层面确实改善了结果,说明它在更吵的频段有一定过滤价值;repo 明确写了:任何单币最多参与 3 对 active pairs。
这看起来像小细节,实际上非常 desk-friendly:
这层在我们后续真做 multi-pair deployment 时,重要性可能不低于 entry threshold 本身。
为了不只停留在 repo README,我做了一个简化 probe:
BTC/ETH/SOL/BNB/XRP/DOGE/LINK/AVAX;15m(近 120d)+ 5m(近 45d);60% 做 pair discovery,后 40% 做 OOS 风格测试;|z| >= 2 入场,|z| <= 0.5 止盈,|z| >= 4 止损,1.5 × half-life time stop;这里我没有完全复刻 repo 的 PCA+DBSCAN、Kalman 动态 beta、full walk-forward weekly refresh;所以它是 portability probe,不是 repo 的一比一 reproduction。但已经足够回答一个关键问题:
> 这条 raw alpha 迁到 15m/5m 后,是完全死掉,还是还有可筛选的正 pocket?
结论是:还有 pocket,但不能无脑全做。
如果把这份东西翻成我们更可执行的 desk 版本,我会这样拆:
z > +entry:short spread;z < -entry:long spread;half-life 落在可交易区间的 pair;H < h_max 时允许新开仓;5m 默认先按 taker 成本测,如果 taker 不过,再评估 maker-first / passive exit 是否能翻正。5m/15m 也同样成立。AVAX/LINK/XRP/BNB/SOL 这类组合在 probe 里反复出现,可能是真 pocket,也可能只是最近窗口碰巧活跃;要防止过拟合到短样本。3m/1m,单靠 Hurst gate 大概率不够,得同步引入 maker/taker 分层、queue priority、最小价差覆盖 这些执行级约束。https://github.com/Jing-Lavinia/Pairs-Tradinghttps://github.com/Jing-Lavinia/Pairs-Tradinghttps://raw.githubusercontent.com/Jing-Lavinia/Pairs-Trading/main/README.mdreports/artifacts/quant_digests/2026-04-23_hurstgate_pairs_probe.pyreports/artifacts/quant_digests/hurstgate_pairs_probe_pair_summary_2026-04-23.csvreports/artifacts/quant_digests/hurstgate_pairs_probe_agg_2026-04-23.csvreports/artifacts/quant_digests/hurstgate_pairs_probe_trades_2026-04-23.csv下一步别再泛泛测“全市场 pairs 有没有 edge”,而是直接做这 5 个最小实验:
15m 上比较“全 pair 搜索” vs “同簇 pair 搜索”的净收益、成交数、pair 稳定度。no gate / Hurst gate / volatility gate / Hurst+vol,看谁真能改善净 bps/笔,而不是只减少交易。max active pairs per ticker 设为 1 / 2 / 3,测组合层面的 drawdown 与 cluster concentration。15m 正 pocket(优先 LINK/AVAX、BNB/AVAX、SOL/AVAX)拉进 maker/taker 双版本,先回答“edge 是策略本身,还是 taker 成本假设太重”。5m -> 3m,不要全 universe 下沉,先只拿近窗稳定的 2~4 对做 OOS 滚动,看正 pocket 能不能保留,而不是让噪音把整个结论冲掉。