← 返回 Quant Digests · 站点首页

别把这份 2021 intraday momentum repo 只读成“相对强弱选币脚本”:对 short-cycle crypto desk,更该先回答的是「hourly winner-rotation × 4-asset cohort selection」这条 raw alpha 到底是轮动素材还是手续费陷阱

更新时间:2026-04-23 12:18 UTC 研究时间:2026-04-23 12:15 UTC 类型:2021 GitHub repo source audit(`Crypto_MOMO.R` + repo metadata)+ Binance USDⓈ-M public-data portability probe(8 liquid majors,`15m/5m`) 主题标签:raw-alpha/cross-sectional/relative-strength/momentum/winner-rotation/cohort-selection/hourly-rebalance/15m/5m/repo/public-data/cost/risk 证据类型:repo code + public-data portability probe

源文件:research/quant_digests/2026-04-23_1215_hourly-winner-rotation-cohort-alpha.md

1. 这次看了什么

主线材料:

repo 元数据补充:

先把 base alpha 说清楚: > 这不是“单币 time-series momentum”那种只看自己涨跌延续的故事,而是一个更具体的 cross-sectional raw alpha:每小时在一个小 cohort 里选过去 60 根 bar 最强的那只,赌它下一小时继续当 winner。

翻成人话:

---

2. repo 到底在做什么

Crypto_MOMO.R 的核心逻辑很直接:

  1. 读入 15m close 数据;
  2. 计算每个币过去 60 根 bar 的离散收益(也就是过去 15h 的动量);
  3. 每隔 1h 重平衡一次;
  4. 在一个 4 币组合里,选过去 60-bar 动量最高的那只;
  5. 持有下一小时;
  6. 穷举所有 4 币组合,事后挑出表现最好的组合。

这套东西的优点是:

但它也有两个明显问题:

---

3. 一句话结论 + 为什么值得进研究池

---

4. 本轮最小 portability probe(忠于 repo 语义)

4.1 数据与口径

我用了项目里现成缓存做一版“尽量忠于原 repo”的快检:

信号定义:

对应到不同周期:

产物:

4.2 关键结果(先给 4 个数)

#### 15m 原版口径

  1. 最佳 4 币组合(gross)ETH/SOL/XRP/BNBUSDT 近似对应的 cohort,mean gross = +3.05 bps/trade
  2. 这个最佳组合胜率51.38%,说明不是完全没边,但 edge 很薄。
  3. 同组合在 8 bps round-trip 下mean net = -4.95 bps/trade
  4. 70 个 4 币组合里,positive net 比例 = 0%,中位数组合 mean net = -7.08 bps/trade

#### 5m 快一档口径

  1. 最佳 4 币组合(gross)BNB/ETH/SOL/LINK,但 mean gross = -0.25 bps/trade
  2. 也就是说连毛边都没看见,更别说过费。
  3. 70 个组合全部 net 为负
  4. 中位数组合 mean net = -10.68 bps/trade,明显比 15m 更差。

翻成人话:

---

5. 这条 raw alpha 对当前 desk 的真实意义

5.1 它不是“现成策略”,但也不是废料

这条线最大的价值不是“repo 已经给了答案”,而是:

5.2 它服务的是哪类 raw alpha

它服务的是:

而不是:

所以它适合放进 raw alpha 素材池,但当前证据更像“等待改造的底胚”。

---

6. 为什么 repo 原版容易失真

repo 原版最需要小心的地方有 4 个:

  1. 事后挑组合
  2. 先穷举所有 4 币组合,再挑历史表现最好的组合,这很像把“选币 alpha”和“择样本 alpha”混在一起了。

  1. 只有 long one winner,没有 cash / no-trade 状态
  2. 每小时都必须选一只,这会把很多“没 edge 的小时”也硬做掉。

  1. 没做 leader-vs-runner-up 强度约束
  2. 如果第一名只比第二名强一点点,这种相对强弱排序很可能只是噪声。

  1. 成本没被正视
  2. 这种 hourly rotation 的换手天然高,若没有 maker 优先、top-2 spread threshold、冷却期,极易被成本吃死。

---

7. 如果要把它改造成 desk 可用版本,优先改哪几刀

7.1 不要再“每小时硬选一个”

先加一个 leader strength gate

只有 leader 明显领先时才轮动。

7.2 不要让 cohort 固定后验最优

改成两层:

7.3 让 15m 做父信号,5m 做子执行

当前 probe 已经暗示:

更合理的 desk 化方式是:

7.4 加 dispersion / trend-quality gate

只在以下条件开闸:

也就是说,它更适合和现有 trend primitive 拼成一个组合,而不是单独裸跑。

---

8. 可直接落地的完整策略壳(改造版,不是 repo 裸版)

8.1 Entry(入场)

每小时检查一次 liquid cohort:

  1. 计算过去 60-bar return;
  2. 找 rank1 / rank2;
  3. rank1-rank2 差值超过阈值,且 leader 自身 trend-quality 达标,则只做多 rank1;
  4. 若达不到阈值,则空仓。

8.2 Exit(出场)

8.3 Sizing(仓位)

8.4 Risk(风控)

8.5 Cost(成本)

至少要分三档看:

若只有 4 bps 才勉强为正,这条线就只能留在“maker-first / selective-entry”层,不应裸做。

---

9. 下一步怎么测(必做)

  1. 先做 no-trade 版本:只在 rank1-rank2 差值进入前 20% 强档时开仓,看 trade count 会掉多少、net bps/trade 能否抬上来。
  2. 做 cohort ex-ante 化:不要历史最优 4 币组合,改成“最近 7d 成交额前 N + funding 正常 + 最小价位步长合适”的真实可交易 cohort。
  3. 15m parent / 5m child 双层实验:父层决定 leader,子层只在 5m pullback 或 micro breakout 再入。
  4. 和简单基线对照:对比“固定 BTC/ETH/SOL/BNB cohort”与“动态最优 cohort”,看 selection bias 占了多少。
  5. 加入 shared gates:把 dispersionfunding vetovolume expansiontrend smoothness 分别做 A/B,看哪个能真正把 gross 边抬成 net 边。
  6. 检查 top-2 spread 的解释力:如果 leader 和 runner-up 差距不大时全为噪声,那这个策略本质就不是 rotation,而是“只做 leader 明显领先的稀疏 continuation”。

---

10. 结论(给当前 desk 的一句人话)

这份 repo 值得保留,不是因为它已经证明“hourly 追强”能赚钱,而是因为它把一个很干净的 raw alpha primitive 摆在桌上:

> cohort 内 winner-rotation 可能确实有一点点 continuation,但裸跑厚度太薄;如果不加 no-trade、leader-strength、cost-aware execution,它更像手续费陷阱。

所以当前最合理的定位不是“直接上线策略”,而是:

---

11. 来源

  1. jgQuantScripts (2021). _Crypto-Momentum-Backtesting_. GitHub repository.
  1. 本地 portability probe 产物