源文件:research/quant_digests/2026-04-03_1827_hedgevision-half-life-pairs-shell.md
backend/api/services/backtest_engine.py + backend/api/services/cointegration_service.py + tests/test_backtest_engine_unit.py)+ Binance Futures 公共 15m/5m 最小便携性快检z-score entry,而是 half-life/Hurst admission + time-stop 这套“先筛会回来的 pair,再做 spread fade”的完整壳先回答 base alpha:这篇东西的 base alpha 很清楚,不是“多做几种统计检验就更科学”,而是 spread mean reversion。如果两条腿走散后不会回来,后面再漂亮的 score 都没用;如果会回来,真正决定 short-cycle 可交易性的就是:回归速度够不够快、Hurst 是否真的偏均值回复、以及 time stop / cost 会不会把纸上 alpha 吃掉。
这轮主看的是一个很新的开源 repo:
ayush108108/hedgevision(GitHub, 2026)ayush108108(GitHub owner)2026-03-31,最新 push 在 2026-04-03backend/api/services/backtest_engine.pybackend/api/services/cointegration_service.pybackend/api/services/backtest_service.pytests/test_backtest_engine_unit.py15m 扫描:BTC/ETH/SOL/XRP/ADA/DOGE/LTC/BCH/LINK 共 9 个主流 perp、36 个 pair、最近约 31d5m 聚焦:把 15m 扫描里最像“会回来的”3 组 pair 再拉到 5m 做短周期 proxyreports/artifacts/quant_digests/2026-04-03_hedgevision_15m_pairs_proxy_scan.csvreports/artifacts/quant_digests/2026-04-03_hedgevision_5m_focus_pairs_proxy_scan.csv为什么这条线现在值得写?因为我们最近 pairs 素材很多,但大部分材料更偏“论文思路”或“复杂选对器”;而这份 repo 的优势恰恰是:它把 entry / exit / stop / cost / half-life / Hurst / candidate scoring 都写成了能直接搬进 desk 的代码壳。
repo 的核心不是发明新 alpha,而是把一个可立即移植的 pairs 母板摆得很清楚:
alpha 本体:cointegrated spread / residual spread 均值回复admission:先看 correlation、EG/Johansen/ADF/PP/KPSS、OU half-life、Hurstentry/exit:再做 |z| 偏离入场、回归退出risk:加入 stop-loss、time stop、成本扣减翻成人话:
> 这份 repo 最适合 desk 抄的,不是“再写一份 pairs backtester”,而是把研究顺序改成:先筛“会回来而且回得够快”的 pair,再谈 z-score band。
这很重要,因为我们最近已经反复看到:
5m 上看着很热闹的 pair,很多最后只是拖到 time exit。所以这篇更值得当成一个 raw alpha + admission layer 素材卡,而不是又一篇泛泛的 pairs 摘要。
backtest_engine.py 给出的 baseline 交易壳非常明确BacktestConfig 里直接写了:
initial_capital = 10,000position_size = 1.0transaction_cost = 0.001(约 10bps)slippage = 0.0005(约 5bps)entry_threshold = 2.0exit_threshold = 0.5stop_loss_threshold = 3.0max_holding_period = None(可配置)PairBacktester 的交易逻辑也很朴素:
z >= +2:做空 spreadz <= -2:做多 spreadshort spread 在 z <= +0.5 止盈,在 z >= +3 止损long spread 在 z >= -0.5 止盈,在 z <= -3 止损max_holding_period,则触发 time_exit15bps 成本 proxy这说明它不是“只有信号没有壳”的 repo,而是完整到能直接迁移成 desk baseline。
cointegration_service.py 里最有 desk 价值的,其实是 pair admission 而不是 entry band这个文件做的事情非常全:
其中对 desk 最值钱的三件事是:
hl = ln(2) / lambda;如果 lambda <= 0,直接视为“不均值回复”。
文件里写得很直白:H < 0.5 更像 mean-reverting,H > 0.5 更像 trending。
它把 EG、Johansen、ADF、相关性、half-life/Hurst、signal quality 拼成一个总分;也就是说,repo 作者默认就不是“过个 cointegration test 就开做”,而是要先做候选排序。
这对我们 desk 的正确翻译是:
> pairs 的 alpha 本体还是 spread fade,但真正决定 5m/15m 能不能做的,是 admission layer。
15m/5m 快检:repo 这套壳迁到 short-cycle 后,最大的现实问题不是 entry,而是“回归速度不够快”先强调口径:下面只是 public close proxy,不是盘口级、不是可执行 mid/bid/ask,也没加 funding 和真实撮合逻辑,所以只能当最小便携性快检,不能当 production PnL。
15m 宇宙扫描:top pocket 还算像 raw alpha我把 9 个主流 Binance perp 两两配对,按 repo 风格做了一个粗壳:
288 barsentry = |z| >= 2exit = |z| <= 0.5stop = |z| >= 3.5time stop = 16 bars(约 4h)在这组很粗的 15m proxy 里,最像“能拿进下一轮正式实验”的 pocket 有三组:
corr = 0.921half-life ≈ 59.3 bars ≈ 14.8hHurst ≈ 0.43431d 触发 41 笔win rate ≈ 68.3%avg pnl ≈ 38.3 bps proxymedian hold = 12 bars = 3hcorr = 0.923half-life ≈ 96.0 bars ≈ 24.0hHurst ≈ 0.32844 笔win rate ≈ 65.9%avg pnl ≈ 34.2 bps proxycorr = 0.946half-life ≈ 48.9 bars ≈ 12.2hHurst ≈ 0.34137 笔win rate ≈ 67.6%avg pnl ≈ 33.0 bps proxy这组结果最值得记住的不是“哪组最好”,而是:
> 在 15m 上,repo 这套“先看回复性,再做 z-score fade”的逻辑,至少还像一条诚实的 raw alpha 候选。
5m,问题立刻暴露:time exit 占比很高我再把上面三组 pair 拉到 5m,用同一套思路做近 13.8d proxy:
entry = |z| >= 2exit = |z| <= 0.5stop = |z| >= 3.5time stop = 48 bars(约 4h)结果明显变“没那么顺”了:
32 笔win rate ≈ 56.3%avg pnl ≈ 11.39 bps proxymedian hold = 240 mintime exit share ≈ 59.4%44 笔win rate ≈ 52.3%avg pnl ≈ 11.05 bps proxymedian hold = 125 minstop-loss share ≈ 40.9%46 笔win rate ≈ 45.7%avg pnl ≈ 10.26 bps proxymedian hold = 142.5 minstop-loss + time-exit 占比过半这组数字说明了一个非常关键的 desk 结论:
> pairs raw alpha 不是不能往 5m 压,但 repo 里的 baseline 不能无脑下采样。真正需要先调的,不是 entry band,而是 admission / half-life / time-stop。
换句话说,repo 给我们的最大启发不是“2/0.5/3 这组阈值神奇有效”,而是:
15m 先做 primary signal 更诚实;5m 更适合做 finer execution / early exit / stop 管理;5m 只会变成拖时间的伪短周期 alpha。zscore(spread) 极端偏离 → 回归均值Hurst < 0.45~0.50、half-life 有限且不太慢、rolling beta 稳定时启用|z| >= 2.0 先做 baseline|z| <= 0.5 或 z -> 0|z| >= 3.0~3.5min(4h, 1.0~1.5 × expected half-life window)5m / 15m 的建议,不要平均用力如果按这轮快检结果,我会这样落地:
15m:优先做主信号层因为 raw alpha 的回归速度和噪声比,在这个频段更像“能被解释”的均值回复。
5m:优先做管理层用来做:
5m 硬伪装成主 alpha 频段如果大部分 trade 最后都靠 time_exit 结束,那这不是高频 edge,只是“更频繁地观察一个本来更适合 15m/1h 管理的 pair”。
因为它补的是一张可立即开工的 market-neutral 母板:
也就是说,这篇不只是“又多一张 pairs 卡”,而是给了我们一个可以反复复用的 raw alpha 壳。
目的:验证 pair admission 是否比“继续调 entry band”更重要。
20~40 个高流动 perp4h 计算:Top corr pairsTop admission-score pairs要看什么:
15m 当主信号、5m 当管理层目的:别把 raw alpha 本体和 execution 层混在一起。
15m:产生 entry / exit / stop 主信号5m:做提前减仓、加严止损、短时冲击 veto15m 管理15m signal + 5m management关键判断: 5m 是不是提升了 net edge,还是只提升了 turnover 和噪声。
目的:验证 repo 这套壳在 crypto 里到底更适合“跨资产 pair”,还是“同一资产跨 venue pair”。
要看: 哪类 pair 在 after-cost 口径下更诚实。
目的:避免把 gross spread alpha 误判成 production alpha。
至少分四档:
并额外叠加:
如果某组 pair 的 gross edge < 2x round-trip cost budget,直接降级,不再当主交易候选。
这份 2026 新 repo 真正适合我们 desk 先搬的,不是“再写一个 stat-arb app”,而是下面这句话:
> pairs 的 raw alpha 仍然是 spread mean reversion;但 short-cycle 能不能做,关键不在 z-score 本身,而在 half-life/Hurst admission + time-stop discipline。
这轮 15m/5m public proxy 也给了一个很实用的现实判断:
15m 上,这条线还像一条能认真继续测的 raw alpha;5m,大量 trade 开始依赖 time exit 或被 stop 吃掉;ayush108108 (2026), *hedgevision*reports/artifacts/quant_digests/2026-04-03_hedgevision_15m_pairs_proxy_scan.csvreports/artifacts/quant_digests/2026-04-03_hedgevision_5m_focus_pairs_proxy_scan.csvresearch/quant_digests/2026-04-03_1827_hedgevision-half-life-pairs-shell.md