源文件:research/quant_digests/2026-04-15_0718_oos-xsreversal-costdead-alpha.md
README.md + 02_signals.ipynb + 03_backtest.ipynb)1d 相对收益排序,买最近相对落后者、卖最近相对领先者,赌的是 next-day cross-sectional mean reversion;repo 最有价值的新信息不是“它最终没法直接赚钱”,而是它在 2025-2026 OOS 里仍然表现出显著 alpha,只是被换手与成本打死。主材料是 2026 GitHub repo:
先把 base alpha 说清楚:
> 这份 repo 对 desk 最值得保留的,不是“20-day momentum 曾经有效”这句老结论,而是:在更近的 2025-2026 样本里,横截面 1-day loser → next-day bounce / winner → next-day fade 这条 raw alpha 仍然有显著统计证据,只是原始实现的换手太高,净值被成本直接打穿。
所以这不是 filter、不是 overlay、也不是解释型摘要。alpha 本体非常清楚:cross-sectional loser-bounce / winner-fade mean reversion。
repo 用的是:
2020-01-01 ~ 2026-02-05(2,229 天)20d cross-sectional momentum1d cross-sectional reversallow-vol filtered reversal一句话版:
> 对一篮子 liquid cryptos,昨天相对跌得最狠的那一组,明天更容易相对反弹;昨天相对涨得最猛的那一组,明天更容易相对回吐。
repo 里的实现写得很直接:
-1 × 最近 1 天收益sum(|w|)=1 归一化shift(1),避免 lookahead翻成人话就是:这不是方向预测,而是 relative-value mean reversion。
repo 最大的优点是:它没有只给 full-sample 漂亮图,而是把样本切成:
2020-20222023-20242025-2026对 desk 最值钱的是 reversal 这组数:
-5.5%,t = -0.31(没意义)+17.1%,t = 1.37(还不够硬)+73.0% annual,t = 4.64(高度显著)4.41139%-1.7372.8% → net return -28.5%这组数的意思非常明确:
> alpha 不是不存在;问题是“按 repo 这版日频全量轮动去做”,你会先死于换手。
这和很多“gross 都站不住”的失败案例不一样。这里更接近:
repo 还专门试了一个 desk 很自然会想到的修补法:
结果并不好:
9.4 个左右98.7%1.33 升到 1.38503%,比 base reversal 更差这说明:
对 short-cycle desk 来说,这个结论很有用,因为它直接排除了一个最便宜、最直觉的修补方向。
repo 的另一条 headline 是 20-day momentum:
+36.2%,t=2.02+13.5%,t=1.08-12.5%,t=-0.81而作者给出的 regime break 证据也很清楚:
3.20%1.98%38%这更像在说:
对我们 desk,这比“动量失效”这句 headline 有用得多。
这轮值得 intake 它,不是因为它能直接上线,而是因为它补了我们当前素材池里一个很关键的空位:
不是借某个大模型分类器、不是借宏观状态标签,核心就是 loser vs winner 的横截面均值回复。
很多 XS reversal 题材要么是老论文,要么只给 full-sample;这份 repo 至少明确告诉你:到 2025-2026,这条关系还不是完全死掉。
repo 原版是日频轮动;我们 desk 更自然的动作,是把它改成:
这类 relative loser-bounce 的排序骨架,后续可以嫁接到:
repo 自己已经把答案写得很清楚:
所以 desk 化的正确读法不是“照抄这套 daily rebalance”,而是:
> 保留 raw alpha 本体,但彻底重写它的 rotation / admission / execution 形态。
如果只允许从 repo 往前再走半步,我更倾向于先测这三个修补方向:
只有当 rank edge / z-score 超过阈值时才换仓,而不是每天全量对称重排。
信号每 15m 更新,但组合只在每 1h 或 4h 的固定时点改一次,强行压换手。
不是全市场 loser/winner 全部参与,而是只做最极端尾部那一小撮,换取更高单笔 expectancy。
这三个方向都比“再多加一个 volatility filter”更贴 repo 给出的失败画像。
这条线迁到我们当前 15m/5m 框架时,建议不要机械把“1 天 lookback”翻成“1 根短 bar lookback”,而要保留它的经济时间含义。
第一版可以这么映射:
15m16 / 32 / 96 根 15m(对应 4h / 8h / 24h)12~20 个 liquid perpetuals 开始,不急着上满 25 个ret_L = close_t / close_{t-L} - 115m 都调;先试 1h 或 4h rebalance5m 做分批成交/限价挂单/queue 优化完全不加 filter,只改到 15m/1h 节奏。
只有 rank edge 超过阈值才换仓。
只做 top/bottom 10%~20% 的极端 rank,而不是全量配平。
lookback 仍然是 24h 量级,但 rebalance 只在 4h 一次。
别先被 Sharpe 带着跑,先看:
net bps per rebalanceturnover / grosscost as % of gross pnlholding horizonwinner leg 与 loser leg 的分腿贡献reversal expectancy 在不同 rank tail 的斜率dispersion 与 reversal alpha 的关系因为这轮最重要的问题不是“有没有预测关系”,而是:
> 怎样把“显著但 cost-dead”的 alpha,改写成“可能还活得过成本线”的 alpha。
15m 上复刻 24h 经济时间窗的 XS loser/winner reversal,先把 plain baseline 跑出来。rebalance every 1h / 4h,观察 turnover 与 expectancy 的弹性。top/bottom tail only,不要一上来加复杂 regime 分类器。2 / 4 / 6 / 8 bps roundtrip cost ladder;如果过不了 4~6 bps,这条线就先不要升格成 production 候选。15m/5m 一定更强。 高频化常常只会让换手更糟。Repo URL: <https://github.com/prams2104/crypto-momentum-backtest>
Readable URL: <https://raw.githubusercontent.com/prams2104/crypto-momentum-backtest/main/README.md>
Readable URL: <https://github.com/prams2104/crypto-momentum-backtest/blob/main/02_signals.ipynb>
Readable URL: <https://github.com/prams2104/crypto-momentum-backtest/blob/main/03_backtest.ipynb>
2026-02-04, description Cross-sectional momentum strategy on cryptocurrencies with regime analysis.research/quant_digests/2026-04-15_0718_oos-xsreversal-costdead-alpha.md