记录一次动量跟随多头回测被数据拒绝(2026-08-12)

不调参,先攒满 ≥12 笔已平 A/B 确认期望符号——若正再加 regime 过滤,若负就重估而非优化。

今天一整天基本都在 factor_ic 上打转。早上先实拉了一轮 SHORT-only A/B 的跑批数据,中午因为一句“上涨市做多”起了争论,下午干脆用 _tmp_xs_pair_bt.py 同款框架把动量跟随多头回测跑了一遍。结果很干脆:这条路被数据拒绝了。

一、先拉现状:19:54 那轮实拉

晚上 7 点 54 分,我把当前 factor_ic 的实盘状态完整拉了一遍。进程态没毛病:signal 75444 已经跑了 53.1 小时,SHORT-only 模式(LONG_N=0),watchdog 单实例在岗。全量 factor_ic 一共 29 笔,+$11.01,其中 LONG 腿 9 笔 +$2.92,SHORT 腿 20 笔 +$8.09。

但真正要看的是 A/B 窗口,也就是 SHORT-only 这段。53 小时里总共 4 笔信号,全是 SHORT,已经平仓 3 笔,没有 1 笔 LONG 漏单。这 3 笔已平的净盈亏是 -$1.74,分别是 +$0.31、-$1.72、-$0.33。当前还挂着一笔 DOGE SHORT,仓位 $80。

A/B 进度是 3/12,离能下初步结论的闸还差 9 笔。

二、两个要直说的点

看这组数,我当时直接在日志里写了两条,不给它绕弯子。

第一,SHORT-only 首批 3 笔已平是小幅亏损。 -$1.74 这个数样本太小,基本在噪声范围内,但开局的负号肯定不乐观。需要继续攒笔数,不能因为 3 笔就下结论。

第二,这恰好印证了“edge 依赖 regime”。 历史 SHORT 腿累计 +$8.09,看着还行,但那段 A/B 窗口大概率处在震荡/中性 regime 里。21 页的 regime 计算当时显示的是震荡市,震荡市里 SHORT 腿没表现出正 edge,这就对上了回测里“SHORT 只在下跌/震荡 regime 有正贡献”的结论。

三、我提了“上涨市做多”,被拽了回来

看完数据,我心里冒出来一个念头:既然 21 页已经有现成的 regime 计算,那直接让策略在下跌/震荡市做空、上涨市做多,岂不是更对称更聪明?

助手没同意,而且把这里面的含糊地带掰得很清楚。factor_ic 是反转策略——做空最高动量、做多最低动量,赌的是极值回归,不是动量跟随。所以“上涨市做多”落到代码上只有两种解释,两种都没有证据:

  • 解释 (a):做多 factor_ic 自己的 LONG 腿(最低动量币)。这条腿在回测里是 -38.1% 的系统性输家腿,把它在上涨市加回来就是纯亏。
  • 解释 (b):做多最高动量币(动量跟随)。这是另一个独立策略,整个回测框架里从来没测过,零证据。可能有效,但那是另一套逻辑,不能顺手焊到 factor_ic 上。

所以结论是:“暂停”比“切换”更稳。 上涨市暂停交易,既避开 LONG 输家腿,又不引入未验证组件。

四、那就用同款框架写动量跟随多头回测

吵完之后,我决定不再空想,直接动笔。要求很明确:用 _tmp_xs_pair_bt.py 同款框架,写一个“动量跟随多头”横截面回测,限定上涨 regime。

框架和口径对齐花了不少时间。关键对齐点有几个:

  • momentum_24h 的定义是过去 24 根收益率的 close[t]/close[t-24]-1,和 21 页 regime 判定同源。
  • 上涨 regime 定义对齐 21 页:REGIME_THRESHOLD=2.0%,即 12 币 24h 收益均值 > +2%。
  • 回测参数完全对齐 factor_ic:HOLD=24h、COOLDOWN=120min、SL/TP=5%/15%、FEE=0.0001、OOS_TS=2026-07-31 16:00 UTC。
  • 币池 12 币,5000 根 1h 主网 K 线,约 208 天。

策略本身很简单:做多动量最高的币,上涨 regime 门控(12 币 24h 收益均值 > +2%)。IS/OOS 切分点沿用 _tmp_xs_pair_bt 的常量,也就是 2026-08-01,即 07-31 后为真 OOS。

五、实跑结果:负 edge,被数据拒绝

回测跑完,报告落盘。数字很直接:

段 笔数 总收益 胜率 最大回撤
仅上涨 regime 81 -50.50% 33.3% 54.9%
不限 regime 184 -49.56% 45.1% 58.7%

仅上涨 regime 内 81 笔,总收益 -50.50%,胜率只有 33.3%,最大回撤 54.9%。不限 regime 的对照段 184 笔,同样深亏 -49.56%。也就是说,动量跟随多头在上涨 regime 里也是负 edge,而且比随机还差。

这就彻底堵死了“上涨市做多”的路子:不是没测过,是测完负的。

六、下一步:继续攒 A/B,不调参

回测只是验证,不是交易决策。当天的纪律没变:现在不调参,先攒满 ≥12 笔已平 A/B 确认期望符号。 若最终为正,再加 regime 过滤;若为负,就重估策略,而不是继续优化参数。

具体遗留:

  • A/B 进度 3/12,还差 9 笔,继续让 signal 75444 跑着。
  • regime 过滤做成可切换 env 开关,默认关,等 A/B 满 12 笔再看。
  • 动量跟随多头回测报告已落盘,但当天晚些时候收到一份对另一份回测的核验,指出 5 处实质错误,其中 2 处会直接污染结论。具体错误细节还没完全整理完,明天得先把核验清单过一遍,确认手头报告有没有踩同样的坑。