源文件:research/quant_digests/2026-04-14_2033_btceth-volgated-spreadfade-shell.md
README.md + context_files/PAIRS_STRATEGY_PLAN.md + context_files/VOLATILITY_FILTER_PLAN.md + notebooks/07_pairs_strategy_vol_filter.py + report/tables/pairs_cointegration.csv + report/tables/pairs_performance.csv + report/tables/vol_filter_performance.csv)+ Binance USDⓈ-M 5m/15m public-data portability probeBTC-ETH 协整 spread 的均值回复:z > +threshold 时 short spread(short BTC / long ETH),z < -threshold 时 long spread;vol gate 只决定“何时允许开仓”,不是 alpha 本体。这次主看一个很新的 coursework repo:
SidneyyN(GitHub user)COMP0051-Algorithmic-Trading-CWrepo 明面上有两条线:breakout 和 pairs。但更值得 desk 先收进素材池的,不是 breakout,而是它对第二条线的处理: > 先用 EDA 承认“BTC lead-lag to ETH/DOGE 太薄,过不了成本”,然后把策略切到更可交易的 BTC-ETH cointegrated spread fade。
这点很值钱,因为它不是盲目坚持 headline idea,而是把能活的 raw alpha 壳留下来。
这篇东西的 base alpha 不是“vol filter”,也不是“课设参数搜索”。
它真正的 base alpha 是: > BTC-ETH 的 log-price spread 在协整关系没坏掉时,会围绕局部均值来回摆;当 rolling z-score 偏离太远时,做 spread 回归。
翻成人话:
pairs / stat-arb / relative-value / mean reversion raw alpha;vol gate 只是 admission layer;min hold / cooldown / max hold / cost 是执行和风险壳;notebooks/07_pairs_strategy_vol_filter.py 已经把一条完整策略壳写明:
log(BTC) - 0.678 * log(ETH)100 bars|z| > 30min_hold=24 bars、cooldown=20 bars、max_hold=384 barsbeta 做双腿 gross $100kbps × gross notional更关键的是,repo 不是瞎挑 pair。内置表里 BTC-ETH 的 Engle-Granger p=0.0065、spread ADF p=0.0015,半衰期约 392 根 15m(约 98h);另外两对 BTC-DOGE / ETH-DOGE 都不协整。也就是说: > 它至少先回答了“为什么这对值得做”,不是直接把所有 pair 都丢进 z-score。
因为这轮最值钱的不是“再复读一次 BTC-ETH pairs”,而是 repo 给了一个很 desk-friendly 的旁支: > middle-volatility gate 只管开仓放行,不改 exit。
repo 自带结果显示,这个 gate 虽然没把 full-sample 直接救成 production,但方向是对的:
5 bps)full-sample:71 笔,gross +$5,714.89,net -$1,385.115 bps)full-sample:58 笔,gross +$4,536.81,net -$1,263.19-$2,000.32,vol-gated 变成 +$162.46所以这份 repo 最该记住的一句话不是“pairs trading 有效”,而是: > 同一条 spread MR,本体没变,但 admission 放在“非极端 spread-vol regime”里,OOS 变得更像能活的 pocket。
它主要靠什么证明? > 靠同一 pair、同一 cost 假设下的 baseline vs vol-gated 对照回测,而不是只讲概念。
5m/15m 最小 portability probe我补了一个 Binance USDⓈ-M public-data 快检,脚本:
reports/artifacts/quant_digests/2026-04-14_comp0051_btceth_volgated_probe.py输出:
reports/artifacts/quant_digests/comp0051_btceth_volgated_probe_summary_2026-04-14.csvreports/artifacts/quant_digests/comp0051_btceth_volgated_probe_pivot_2026-04-14.csv实验口径:
15m(近 120d)+ 5m(近 45d)BTCUSDT / ETHUSDTbeta=0.678、100-bar zscore、|z|>3、min_hold/cooldown/max_holdspread_vol < 1.2 * rolling_median(spread_vol)1 / 2 / 5 bps 三档15m plain 在当前 Binance perp 上有 gross,但 5 bps 明显不过线:55 笔+$3,058.94-$2,441.0615m 加 vol gate 后,loss 明显收敛:73.6%55 -> 46+$3,800.75-$799.255m 也是同一个结论:gate 能救一截,但救不到 5 bps taker 生产线:54 笔,gross +$3,850.65,net -$1,499.3537 笔,gross +$3,249.96,net -$400.0415m vol-gated @ 1 bps:net +$2,880.75,Sharpe-like 1.3215m vol-gated @ 2 bps:net +$1,960.755m vol-gated @ 2 bps:net +$1,789.96,Sharpe-like 2.70所以这轮最诚实的结论是: > 这不是 broad taker-ready shell,但它也不是“没 edge”。它更像“spread MR 本体成立,edge 主要被 friction 吃掉;vol gate 能让 edge 更集中”。
cointegrated spread mean reversion。vol gate only on entry 可以服务很多 spread-fade family,不只这一个 pair。优先别再做“同口径 taker 版加参数小修小补”,而是直接测更值钱的三件事:
15m state,把执行切成 5m 挂单 close-out,看 2~5 bps 能否压到 <=2 bps;0.678,改成过去 14d/21d 动态估计,只在 ADF/coint 继续通过时开机;BTC-ETH 扩到 BTC-ETH / ETH-SOL / BTC-BNB 之类 liquid-major universe,检验它是单对特例,还是可扩展的 stat-arb sleeve。report/tables/pairs_cointegration.csvreport/tables/pairs_performance.csvreport/tables/vol_filter_performance.csvnotebooks/07_pairs_strategy_vol_filter.py