源文件:research/quant_digests/2026-04-23_1215_hourly-winner-rotation-cohort-alpha.md
Crypto_MOMO.R + repo metadata)+ Binance USDⓈ-M public-data portability probe(8 liquid majors,15m/5m)主线材料:
jgQuantScriptsCrypto-Momentum-Backtestingrepo 元数据补充:
Momentum using intraday data2021-06-12RCrypto_MOMO.R 文件里,外加一个 CRYPTO_CLOSES_15min.rds 数据文件。先把 base alpha 说清楚: > 这不是“单币 time-series momentum”那种只看自己涨跌延续的故事,而是一个更具体的 cross-sectional raw alpha:每小时在一个小 cohort 里选过去 60 根 bar 最强的那只,赌它下一小时继续当 winner。
翻成人话:
---
Crypto_MOMO.R 的核心逻辑很直接:
15m close 数据;60 根 bar 的离散收益(也就是过去 15h 的动量);1h 重平衡一次;60-bar 动量最高的那只;这套东西的优点是:
15m,也能往 5m 做快一档版本。但它也有两个明显问题:
---
---
我用了项目里现成缓存做一版“尽量忠于原 repo”的快检:
15m 数据:BTC/ETH/BNB/SOL/XRP/ADA/DOGE/LINK5m 数据:BNB/ETH/SOL/XRP/ADA/DOGE/LINK/AVAX8 选 4 = 70 个 cohort信号定义:
60 根 bar 收益1h8 bps round-trip net对应到不同周期:
15m:60 根 = 15h lookback,持有 4 根 = 1h5m:60 根 = 5h lookback,持有 12 根 = 1h产物:
reports/artifacts/literature/intraday_rotation_repo_probe_15m_2026-04-23.csvreports/artifacts/literature/intraday_rotation_repo_probe_5m_2026-04-23.csvreports/artifacts/literature/intraday_rotation_repo_probe_summary_2026-04-23.json#### 15m 原版口径
ETH/SOL/XRP/BNBUSDT 近似对应的 cohort,mean gross = +3.05 bps/trade。51.38%,说明不是完全没边,但 edge 很薄。8 bps round-trip 下:mean net = -4.95 bps/trade。positive net 比例 = 0%,中位数组合 mean net = -7.08 bps/trade。#### 5m 快一档口径
BNB/ETH/SOL/LINK,但 mean gross = -0.25 bps/trade。mean net = -10.68 bps/trade,明显比 15m 更差。翻成人话:
15m majors 上 有一点点 gross continuation 味道;5m 压之后,边更薄,当前看更像纯 fee trap。---
这条线最大的价值不是“repo 已经给了答案”,而是:
它服务的是:
cross-sectional momentumrelative-strength rotationleader-laggard allocation而不是:
所以它适合放进 raw alpha 素材池,但当前证据更像“等待改造的底胚”。
---
repo 原版最需要小心的地方有 4 个:
先穷举所有 4 币组合,再挑历史表现最好的组合,这很像把“选币 alpha”和“择样本 alpha”混在一起了。
每小时都必须选一只,这会把很多“没 edge 的小时”也硬做掉。
如果第一名只比第二名强一点点,这种相对强弱排序很可能只是噪声。
这种 hourly rotation 的换手天然高,若没有 maker 优先、top-2 spread threshold、冷却期,极易被成本吃死。
---
先加一个 leader strength gate:
mom_rank1 - mom_rank2 >= thresholdrank1 zscore >= threshold只有 leader 明显领先时才轮动。
改成两层:
N 天流动性 / 成交额 / funding 稳定性先选可交易 cohort;15m 做父信号,5m 做子执行当前 probe 已经暗示:
15m 上还有一点 gross edge;5m 直接当父信号太薄。更合理的 desk 化方式是:
15m 决定谁是 leader;5m 只负责找 pullback / spread / taker-flow 比较好的入场点。只在以下条件开闸:
也就是说,它更适合和现有 trend primitive 拼成一个组合,而不是单独裸跑。
---
每小时检查一次 liquid cohort:
60-bar return;rank1-rank2 差值超过阈值,且 leader 自身 trend-quality 达标,则只做多 rank1;1h time stop;5m 子执行层出现 momentum failure / volume fade 就先撤。size ~ edge_score / realized_vol至少要分三档看:
4 bps8 bps12 bps若只有 4 bps 才勉强为正,这条线就只能留在“maker-first / selective-entry”层,不应裸做。
---
rank1-rank2 差值进入前 20% 强档时开仓,看 trade count 会掉多少、net bps/trade 能否抬上来。15m parent / 5m child 双层实验:父层决定 leader,子层只在 5m pullback 或 micro breakout 再入。dispersion、funding veto、volume expansion、trend smoothness 分别做 A/B,看哪个能真正把 gross 边抬成 net 边。---
这份 repo 值得保留,不是因为它已经证明“hourly 追强”能赚钱,而是因为它把一个很干净的 raw alpha primitive 摆在桌上:
> cohort 内 winner-rotation 可能确实有一点点 continuation,但裸跑厚度太薄;如果不加 no-trade、leader-strength、cost-aware execution,它更像手续费陷阱。
所以当前最合理的定位不是“直接上线策略”,而是:
15m parent + 5m child + strength gate 的 desk 化改造。---
reports/artifacts/literature/intraday_rotation_repo_probe_15m_2026-04-23.csvreports/artifacts/literature/intraday_rotation_repo_probe_5m_2026-04-23.csvreports/artifacts/literature/intraday_rotation_repo_probe_summary_2026-04-23.json