halo 的技术博客

返回

大多数人算收益只看一个数:今天涨了多少。但如果你把这一天从中间切开——收盘到次日开盘(隔夜段)和开盘到收盘(日内段)——同一只股票会露出两副截然不同的面孔。更反直觉的是:这两段收益不仅统计性质不同,它们对同一个信号的反应方向完全相反。

结论先放这:用”上期隔夜收益”当信号,去预测本期,会得到一对镜像结果——隔夜段呈现动量(上期隔夜涨的,本期隔夜继续涨),日内段呈现反转(上期隔夜涨的,本期日内反而跌)。这就是 Lou、Polk、Skouras 在 2019 年 JFE 论文里记录的”拔河”(A Tug of War):隔夜的买盘和日内的买盘来自两拨完全不同的人,他们对同一批股票持相反态度。 在植入动量传导 β=0.055、反转传导 β=0.042 的 200 只股票 × 5 年合成面板上,Fama-MacBeth 逐日横截面回归给出:隔夜动量斜率 0.045(t=9.9)、日内反转斜率 −0.042(t=−10.7);两条多空腿分别做出 Sharpe 1.47 和 1.33,合并后 1.56。但这是一个每天换手的策略,成本在它的 Sharpe 里是生死攸关的一等公民。

注:站内此前那篇《隔夜效应与盘中效应》讲的是时间序列视角——整个市场的权益溢价几乎全来自隔夜段。本文换一个正交的横截面视角:不是问”哪一段贡献了市场的钱”,而是问”用一只股票的隔夜表现,能不能预测它自己下一期的隔夜和日内”。两者机制不同、结论不同,互为补充。

一、两副面孔从哪来:谁在隔夜买、谁在日内卖#

要理解方向为什么相反,得先分清隔夜和日内是两个不同的交易场

隔夜段的主角是散户和情绪。 隔夜收益体现在开盘集合竞价里,而散户的下单高度集中在盘前和开盘——他们白天要上班,晚上看新闻、刷社交媒体形成观点,第二天开盘挂单。散户是典型的趋势追随者和注意力驱动者:昨天涨得猛、上了热搜的股票,今天开盘继续被追捧。这就是隔夜段动量的来源——情绪有惯性,而情绪在开盘集中释放

日内段的主角是机构和做市商。 交易日内的连续竞价里,机构的算法单、做市商的库存管理、套利盘占主导。这些人是均值回归的天然承接方:开盘被散户情绪推高的价格,日内会被机构逢高减仓、做市商回补库存慢慢拉回来。所以昨天隔夜涨得多的股票,今天日内倾向于被”消化”掉一部分涨幅——这就是日内反转。

拔河的本质:散户在隔夜把价格往一个方向拉,机构在日内往回拽。两拨人对同一批股票的估值判断相反,而他们各自主导不同的交易时段。Lou et al. 的原始论文用美股几十年数据证明:这种隔夜-日内的收益符号分裂高度稳定,且能解释一部分传统动量因子的表现——传统”隔夜+日内合并”的动量,其实是隔夜强动量减去日内反转后的净残值

二、构造实验:把两个方向相反的 β 植入同一面板#

真实分钟数据拿不到没关系,机制可以精确合成。造一个 200 只股票 × 1260 天(≈5 年)的面板,每天每只股票生成两段收益。核心是让”上期隔夜收益”同时驱动两个方向相反的传导:

PHI = 0.055   # 隔夜 -> 隔夜:动量传导
PSI = 0.042   # 隔夜 -> 日内:反转传导
regime = 1.0 + rng.standard_normal(t) * 2.6   # 传导强度逐日波动(不可分散)

for d in range(t):
    r_prev = np.argsort(np.argsort(prev_ov)) / n - 0.5   # 上期隔夜排名
    cur_ov  =  PHI * regime[d] * prev_ov + eps_o + 0.4*mkt[d] + r_prev*spread_o[d]
    cur_idr = -PSI * regime[d] * prev_ov + eps_i + 0.6*mkt[d] - r_prev*spread_i[d]
    prev_ov = cur_ov
python

这里有两个刻意的设计,都是为了让结果可信而非漂亮

第一,regime 让传导强度逐日剧烈波动。 现实里隔夜动量不是天天灵——有的日子情绪延续、有的日子直接反噬。这个 regime 因子是因子层面的波动,长短组合无法通过增加股票数量分散掉,它直接决定了策略 Sharpe 的天花板。没有它,200 只股票的多空组合会把所有噪声分散干净,跑出 Sharpe 10+ 的假结果——那种数字一看就是 look-ahead 或过度理想化,不能信。

第二,spread_factor 是长短腿的共同因子。 高排名组和低排名组每天承受一个共同的随机冲击,这模拟了”动量因子本身有系统性风险”这一事实,让多空组合的回撤更真实。

Fama-MacBeth 逐日横截面回归(每天跑一次截面回归,再对斜率序列求均值和 t 值)结果:

  • 隔夜动量:斜率均值 0.045,t = 9.9 —— 上期隔夜涨的股票,本期隔夜显著继续涨
  • 日内反转:斜率均值 −0.042,t = −10.7 —— 同样是上期隔夜涨的股票,本期日内显著回落

左图上期隔夜对本期隔夜正斜率(动量),右图上期隔夜对本期日内负斜率(反转),同一信号两副面孔

散点图把”拔河”画得很直白:左右两张图用的是同一个横轴(上期隔夜收益),但左图的回归线朝上、右图的回归线朝下。这不是数据挖出来的巧合,是两段收益背后站着两拨方向相反的资金。

三、五分组检验:单调性是机制的指纹#

相关系数和回归斜率可能被少数极端股票绑架,五分组检验才能证明效应贯穿整个分布。按上期隔夜收益把股票分成 Q1(最低)到 Q5(最高)五组,分别看它们本期的隔夜和日内平均收益:

五分组:本期隔夜收益随分组严格递增(动量),本期日内收益随分组严格递减(反转)

分组本期隔夜均值本期日内均值
Q1(上期隔夜最低)−0.077%+0.081%
Q2−0.029%+0.035%
Q3−0.004%−0.005%
Q4+0.025%−0.020%
Q5(上期隔夜最高)+0.074%−0.061%

两列数字构成一把完美的”剪刀”:隔夜列从 Q1 到 Q5 严格递增,日内列从 Q1 到 Q5 严格递减。这种双向单调是”结构性机制”区别于”离群点巧合”的指纹——如果只是几只妖股撑起来的假象,中间三组不可能这么服帖地排成单调阶梯。

四、策略化:两条方向相反的多空腿#

既然隔夜是动量、日内是反转,那就分别做两条多空腿:

  • 隔夜动量腿:买上期隔夜排名前 20%、卖后 20%,持有本期隔夜段
  • 日内反转腿:买上期隔夜排名后 20%、卖前 20%(注意方向反过来),持有本期日内段
# 隔夜动量:direction=+1,持有隔夜段
r_mom = ls_returns(prev_ov, ov,  +1)
# 日内反转:direction=-1,持有日内段
r_rev = ls_returns(prev_ov, idr, -1)
r_combo = r_mom + r_rev            # 合并
python

每条腿每天双边换手,各扣单边 5bp 成本。结果(1260 个交易日):

策略年化收益Sharpe最大回撤
隔夜动量多空+12.9%1.47−8.8%
日内反转多空+10.4%1.33−9.0%
合并策略+23.3%1.56−16.2%

三条净值:隔夜动量与日内反转各自爬升,合并后 Sharpe 最高但回撤也叠加

三个读数各有信息量:

两条腿方向相反却都赚钱,这正是”拔河”结构最优雅的地方——你不需要赌哪一方赢,你在同一批股票上同时收割两拨人的行为偏差:隔夜跟着散户的情绪惯性走,日内站在机构的均值回归一边。

合并 Sharpe(1.56)高于任何单腿,但只高一点点,没有出现 1.47+1.33 那种线性叠加。原因是两条腿共享同一个信号(上期隔夜),它们的收益正相关,分散效果有限。真正正交的收益源才能大幅抬 Sharpe,同源信号的两条腿只能小幅改善。

合并回撤(−16.2%)几乎是两条腿之和——这是同源信号的代价:好的时候一起好,坏的时候(regime 反噬那几天)两条腿一起亏。合并策略降低了收益波动比,但没降低尾部风险,这个区别在做杠杆决策时性命攸关。

五、生死线:β × 成本的 Sharpe 热力图#

这是一个每天全部换手的策略,两条腿加起来一天要做四次单边交易。成本不是一个可以事后再谈的细节,它直接决定策略能不能活。把动量传导强度 β 和单边成本各扫一遍:

Sharpe 热力图:β=0.08 时 10bp 成本仍为正,β≤0.04 时 5bp 以上迅速转负

读法很直接:

  • β=0.06~0.08(本文基准附近):零售成本(5bp)下勉强可做,机构成本(1~2bp)下舒服,10bp 以上迅速衰减。
  • β≤0.04(被套利磨损后的真实水平):只有极低成本才有正期望——学术论文里的漂亮效应,到零售账户就是负和游戏。
  • β=0.16(罕见的强传导):肥美,但这种强度的行为偏差会在几个季度内被套利资金吃平,不可持续。

这张图的通用教训值得抄下来:任何”每天换手”的横截面异象,学术检验(通常不含成本)与可交易性之间隔着 5~10bp 的鸿沟。 Lou et al. 论文里的隔夜-日内分裂在美股学术层面极其稳健,但它是不是”你的账户能赚到的钱”,取决于你的 β 落在这张表的哪一格。

六、四类真实陷阱#

陷阱一:隔夜收益的定义混入了停牌和除权。 “收盘到次日开盘”的收益,一旦中间夹着停牌日、除权除息日、或长假,这个”隔夜”就不是纯粹的过夜情绪了。除权必须用后复权价重算,否则一次 10 送 10 会伪造出 −50% 的假隔夜暴跌,直接毒化整个信号。停牌复牌首日的开盘价也常常是集合竞价的极端值,要么剔除要么缩尾。

陷阱二:开盘价的可成交性存疑。 策略假设你能按开盘价买入隔夜腿、按开盘价卖出。但集合竞价的开盘价是一个”点”,你的量能不能在那个价位成交是另一回事——尤其做空腿要借券、要在开盘瞬间挂单。日内反转腿更麻烦:它要求你开盘建仓、收盘平仓,一天一个完整来回,冲击成本会显著高于热力图里假设的线性成本。

陷阱三:A股日内无法做空,反转腿只剩半条命。 日内反转腿的一半是”卖出上期隔夜涨得多的股票”。A股个股不能日内做空,这条腿在A股只能做多头(买上期隔夜跌的),等于砍掉一半 alpha 并引入方向性暴露。想完整复现这个策略,要么用股指期货对冲、要么去 T+0 的市场(美股、港股部分标的)。这不是调参能解决的,是市场机制的硬约束。

陷阱四:隔夜动量和”注意力”高度共线,容易归因错误。 隔夜段的动量很大程度上是”昨日高关注度股票今日开盘被追捧”,而关注度又和成交量、涨跌幅、新闻数量强相关。如果你不控制这些,会把”注意力溢价”误当成”隔夜动量 alpha”。真正干净的检验要在剥离规模、换手、波动率等风格暴露之后,看隔夜动量是否还有独立贡献——本文的合成数据是干净的单因子世界,真实数据里这一步不能省。

结语#

隔夜与日内收益拆分是一个”把时间轴切开就能看见新世界”的经典案例:同一只股票,在不同的交易时段里被不同的人定价,于是呈现出方向相反的两副面孔。 隔夜的动量是散户情绪的惯性,日内的反转是机构资金的承接——两股力量拔河,而聪明的做法不是押注谁赢,是站在两边同时收租。

但别忘了热力图给的那条生死线:这类每天换手的横截面策略,真实 β 掉到 0.04 以下、成本升到 5bp 以上,纸面上的两副面孔就都变成了给券商打工的面孔。先估你所处市场、所处年代的真实传导强度,再对照你的成本查表——这才是把学术异象翻译成可交易策略的正确姿势。

隔夜与日内收益拆分:同一只股票的两副面孔
https://blog.halo26812.eu.org/blog/overnight-intraday-return-split
Author halo
Published at 2026年7月25日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨