源文件:research/quant_digests/2026-04-22_0204_rollols-costaware-pairfade-shell.md
这次看的是 2026 GitHub repo Rah9742 / Crypto-Stat-Arb。如果只看标题,它像一份普通的 crypto stat-arb 课程仓;但真正值得 desk 保留的,不是“pair trading 这四个字”,而是它把一条 更接近可实盘研究流程的完整 shell 写得很清楚:
formation / z-window / entry / exit / stop / max-hold 做 train / validation / test;这比我们前面见过的很多 pairs repo 更像一个真正能进入 desk intake 的“研究骨架”。
这篇东西的真正价值,不是再次证明“spread 会回归”,而是把 pair MR 从信号研究推进到 cost-aware deployment shell:
> rolling residual z-score fade 这条 raw alpha 本身不新,但“split-local 防泄露 + cost-aware 缩仓 + asset-level Roll slippage”这一整套,明显比只写 |z|>2 就进 的 pairs 模板更有迁移价值。
不是靠一句“我们做了 stat-arb”,而是直接把研究流程拆成可检查的代码和产物:
src/crypto_trader/signals/pairs.pybuild_pair_research_frame(...):rolling OLS hedge ratio → spread → rolling mean/std → z-scoregenerate_pair_signal_state(...):entry / exit / stop / max-hold 的状态机build_pair_target_notionals(...):把 expected move / cost 变成实际 target notionalssrc/crypto_trader/analysis/pairs_research.pybuild_split_local_signal_frame(...):在 warmup / train / validation / test 内分别生成信号,避免状态穿越data/processed/pairs/strategy/pairs_comparison_summary.csvdata/processed/costs/roll_slippage_summary.csvREADME.md也就是说,这个 repo 不是“有个 idea”,而是把 alpha → state → sizing → cost rerun 这条链条都摆出来了。
先把话说死一点:
> 当两腿 residual 相对其 rolling 中枢出现异常偏离时,做 spread mean reversion。
剩下这些东西都属于“把 raw alpha 变得更像可交易系统”的二层组件:
所以它符合这轮优先级:raw alpha 候选,而且是能直接落地成完整策略的 raw alpha 壳。
build_split_local_signal_frame(...) 的核心思想很朴素,但非常值得 desk 直接抄:
warmup / train / validation / test 四段分开跑状态机这件事听起来像卫生习惯,但很多 pair / trend 回测仓都没做干净。对 有状态策略(尤其是 MR 和 trailing stop)来说,这个细节很关键。
repo 的 sizing 不是简单 fixed gross,而是:
expected_move ≈ (|z|-exit_z) × spread_stdexpected_returnround_trip_cost_rate 比,得到 cost_efficiencyconviction = min(|z| / entry_threshold, 2) / 2scale ∈ [cost_aware_min_scale, 1]翻成人话就是:
> 偏离没多深、预期回归没多厚时,哪怕信号触发了,也别默认打满。
这和很多 pairs 研究的差别非常大。后者通常默认“信号是否交易”是二元的;这个 repo 则把它推进到“信号有了,但 size 可以按 edge/cost 比例缩放”。
README 明确提醒:
这个研究姿势是对的:
README 的最终 headline:
AVAXUSDT / ICPUSDT3816.84 USDT2573.95 USDT38.17%25.74%1242.89 USDT更细一点看 pairs_comparison_summary.csv 里的最佳 run(a00a6c7066b7):
AVAXUSDT / ICPUSDT12096 bars2016 bars2.50.2548 bars31.74%113.06%1.34-29.82%2356.5%137.99 USDT这组结果很有意思,因为它告诉我们两件事:
我们最近确实已经写过不少 pairs / stat-arb,但这篇仍然值得保留,因为它补的是一个不同层级:
它最有迁移价值的,不是“AVAX/ICP 这对能不能继续赚钱”,而是下面这套方法论:
这四块可以迁到:
15m/5m 后像什么为了不只复述 repo,我额外做了一个很轻的 public-data probe:
AVAXUSDT / ICPUSDT15m 与 5m120d15m:formation 8064 bars,z-window 1344,entry 2.5,exit 0.25,timeout 485m:formation 12096 bars,z-window 2016,entry 2.5,exit 0.25,timeout 48结果:
15m5+190.50 bps/笔80.0%48.0 bars100%5m43+10.57 bps/笔-3.61 bps/笔48.8%47.37 bars97.7%我对这组 first verdict 的读法是:
15m 看起来“厚”,但样本太稀,而且几乎全靠 timeout15m 的单笔 gross 很厚,但只有 5 笔,而且 全部靠 timeout 才出来。这更像:
5m 有交易频率,但厚度明显不够舒服5m 有 43 笔,看起来比 15m 更像研究对象;但:
10.57 bps/笔也就是说:
> 在 perp 5m 上,这条 residual fade 还没表现出“自然回中枢”的干净结构,更像是要么需要更强 admission,要么需要更厚 entry,要么干脆需要 maker-first / microstructure veto 才能成立。
repo 自己给的 Roll slippage(15m,spot)是:
AVAX:约 4.32 bpsICP:约 11.31 bps如果按双腿 round-trip 粗看,单次完整进出就是 低双位数到三十多 bps 量级的摩擦。这当然不能直接照搬到 Binance perp,但它至少提醒一件事:
5m probe 的 +10.57 bps/笔 gross,厚度明显不保险;15m 虽然 gross 很厚,但 trade count 太低、timeout 过高,不像稳健 pocket。所以当前 first verdict 不是“这条 alpha 死了”,而是:
> raw alpha 还在,但短周期迁移后更像“需要更强 admission + 更真实 execution”的 sparse RV shell,而不是可以直接 taker 化的分钟级主策略。
如果把这篇 repo 当作 desk 组件库,我最想保留的不是某个固定 pair,而是下面三层:
对我们当前素材池来说,这层壳不只服务 pairs,也很适合迁去:
/fapi/v1/klinesAVAXUSDT / ICPUSDT,后续可扩到 SOL/ADA、XRP/DOGE、LTC/LINK 一类替代 pair5m / 15m(如需更快可继续压到 1m / 3m,但要先补 execution realism)|z| >= 2.5 / 3.0 / 3.5;|z| <= 0.25|z| <= 0.5timeout 24 / 48 / 96 bars4 / 8 / 12 / 20+ bps per round-trip per pair)trade_countgross_bps / net_bpstimeout_ratecenter-reclaim ratemedian trade bpsper-pair contribution这份 repo 不是“最性感的新 alpha”,但它很适合进研究池,因为它补的是 如何把 raw alpha 壳做得更像能部署的研究单元。我当前更愿意把它定义成:
> 一条仍值得保留的 pairs raw alpha shell,但它真正的增量在 cost-aware deployment design,而不是在 pair entry idea 本身。
再直白一点:
2.5 -> 3.0 -> 3.5,看能不能明显降低 timeout-rate,别让交易几乎都靠 time-stop 出。hedge-ratio stability / spread volatility / liquidity。5m gross 本来就薄,必须直接问 execution 能不能救,而不是继续假设 taker 也行。AVAX/ICP 单一案例锁死。Rah9742) (2026), Crypto Trading Research Repo / Crypto-Stat-Arb. Repo URL: <https://github.com/Rah9742/Crypto-Stat-Arb>README.mdconfig/default.yamlsrc/crypto_trader/signals/pairs.pysrc/crypto_trader/analysis/pairs_research.pydata/processed/pairs/strategy/pairs_comparison_summary.csvdata/processed/costs/roll_slippage_summary.csvreports/artifacts/quant_digests/rollols_pairfade_probe_2026-04-22.pyreports/artifacts/quant_digests/rollols_pairfade_avax_icp_probe_2026-04-22.csvreports/artifacts/quant_digests/rollols_pairfade_avax_icp_trades_2026-04-22.csv