源文件:research/quant_digests/2026-04-12_1301_4h-admission-15m-spreadfade-pairs-alpha.md
README.md + Cointegration_backtest.py + Cointegration_test_scanner.py + Cointegration_top_sharpe_20.py + PDF full text)+ Binance USDⓈ-M 15m public-data portability probe这次看的是 Tom Chatelon (2025), _Cointegration Trading Strategy Applied to the Crypto Market_,形式上是一个 GitHub repo + 自带 PDF 报告,不是正式期刊论文。
它最容易被误读成:
> “又一个 crypto pairs 回测,挑 20 对,跑个 Sharpe 很高的组合。”
但按当前 desk 的 intake 口径,更值钱的读法其实是:
> base alpha 不是“某几个 pair 天生会回归”,而是“先用 4h 慢频 admission 把当前最像 cointegrated 的 pair 选出来,再做 spread fade”。
这点很关键,因为我们最近已经积累过不少 pairs / stat-arb digest,但很多都还停在“固定 pair + 固定 z-score”。这份材料真正能补的,是 admission 和 execution 的拆分。
4h pair admission 决定今天做哪对,spread fade execution 决定怎么做。4h / 730d 上跑全市场 pair scan,再用 rolling beta、ADF/half-life 过滤、固定 z-score 开平、16bps 成本、risk parity 和 20% vol targeting 做组合回测;我再把它下钻成 15m 轻量 portability probe,看这条壳直接压到 short-cycle 后还能不能活。1.536 ~ 2.462,组合在 5x leverage / 20% target vol 口径下给出 Sharpe 4.26、CAGR 30.05%、总收益 69.14%、最大回撤 -3.06%。15m 数据,把 repo 里最靠前的 5 对(FLOW/HIVE、ADA/XMR、ADA/ETC、ONE/ZIL、NEAR/NEO)做一个 120d / rolling 30d / 同样 entry=2 / exit=0.5 / stop=4 / fee=16bps 的轻量直译 probe,结果只有 ADA/ETC 1 对为正(+2.33%),其余 4 对都明显为负。9 笔交易、胜率 20%、单笔平均约 -521 bps、总收益 -43.99%、Sharpe -7.53、最大回撤 -46.84%。这轮不是为了再写一篇“pairs 也能做”的泛综述,而是为了补一个当前素材池里还不够清楚的点:
pairs / basket stat-arb / basis / funding / cross-sectional RV 主线里:raw alpha:spread MRadmission:哪个 pair 当前值得做execution:15m/5m 怎么进、怎么出、怎么 clip、怎么降换手换句话说,这份材料对 desk 的价值不是“提供一组神奇 alt pair 名单”,而是 把 pairs alpha 从“固定对象”改成“动态录取”。
ADF p-value 不过线、half-life 太长、|z| 未到阈值时不交易entry=2 / exit=0.5 / stop=4、max_hold=200 bars、风险平价权重、20% vol target、最大杠杆 5x、成本按每笔 16bpsCointegration_test_scanner.py 先在 Binance USDT perpetual 上批量拉历史数据,对大量 pair 跑 cointegration scan;PDF 里写的是:
klines4h730d702415407这说明 repo 的重心不是固定做一对,而是 每天/每轮先筛谁有资格交易。
从 Cointegration_backtest.py 和 Cointegration_top_sharpe_20.py 看,作者把关键规则写得非常明确:
90d 窗口X - beta * Y|z| > 2 开仓、|z| < 0.5 平仓|z| > 4200 bars16bpsp-value < 0.05、half-life <= 30 天这意味着它不是一篇只有观点没有框架的“想法文”,而是一套已经把 entry / exit / risk / cost / portfolio construction 写进代码的完整 raw-alpha shell。
Cointegration_top_sharpe_20.py 做了三件事:
20% annual vol、杠杆上限 5x。这对我们很有参考价值,但也带来一个很容易踩的坑:
> 源策略的 edge 很可能是“慢频筛 pair + 分散化 + 组合平滑”共同产物,而不是某个 pair 在更短周期上天然稳健。
15m portability probe:为什么说“15m 直译版明显不过线”我没有逐表复刻 repo 的完整动态 ADF / half-life 录取流程,而是先做一个更便宜的 short-cycle first verdict:
FLOWUSDT-HIVEUSDTADAUSDT-XMRUSDTADAUSDT-ETCUSDTONEUSDT-ZILUSDTNEARUSDT-NEOUSDT15m klines120d30dentry=2、exit=0.5、stop=4、max_hold=20016bps本地 artifact:
/root/clawd/jerry/momentum/reports/artifacts/literature/tom_ctn_pairs_15m_portability_probe_2026-04-12.csv5 对里只有 1 对保住正收益:
ADAUSDT-ETCUSDT:约 +2.33%,Sharpe 约 0.92,3 笔交易其余 4 对都明显恶化:
ONEUSDT-ZILUSDT:约 -9.35%ADAUSDT-XMRUSDT:约 -43.99%FLOWUSDT-HIVEUSDT:约 -86.91%NEARUSDT-NEOUSDT:约 -88.67%从交易形态上看,坏得也很一致:
200 bars,说明不是“回不快”,而是根本没按原想法回去;FLOW/HIVE 这种 pair 甚至出现 28 笔但单笔平均约 -625 bps,说明短周期里并不是“多交易就更容易收敛”,反而更像被噪音和结构漂移反复打脸。这个失败结果不是说:
更像是在告诉我们:
> source 里的 edge 主要属于“4h selection + portfolio smoothing”,不是“把 top pair 名单直接压到 15m 还照样赚”。
所以对 short-cycle desk,更合理的继承方式不是“照抄 top 20”,而是:
15m 只服务于已经被 4h admission 录取的 pair,而不是自己重新发明一套 pairs 世界观。这篇东西值得继续,但下一步不能再是“把 15m 阈值多调几轮”。更合理的是:
cointegration scan + rolling p-value + half-life + top-N ranking4h / 1h:负责录取 pair15m / 5m:只负责 execution纯 bar-close zscore、partial clip rebalance、hysteresis band 三种壳4h admission 录取的 pair,只在录取窗口内开放 15m 交易如果这 4 步之后,15m 层仍然只是在消耗 edge,那这条材料就该被定位成: 4h/1h pair-admission engine,而不是独立的 short-cycle 直接信号。
15m probe 是 轻量直译,没有完整复刻 repo 的 p-value / half-life 动态 gate,所以它更像 portability first verdict,不是作者结果的逐表复现。15m,天然就更容易被 microstructure 噪音、token idiosyncratic drift 和手续费吃掉。Cointegration_backtest.pyCointegration_test_scanner.pyCointegration_top_sharpe_20.py/root/clawd/jerry/momentum/reports/artifacts/literature/tom_ctn_pairs_15m_portability_probe_2026-04-12.csv别把这份 repo 的 top-20 alt pair 名单直接压进 15m;对 short-cycle desk,真正该继承的是“先慢频录取 pair,再快频执行 spread fade”这条分层思路。