Skip to content

反转因子:日内反转、隔夜反转、周度反转与动量因子的结合

反转因子,说白了就是「买跌卖涨」。听起来简单,但里面的门道可不少。我刚开始做因子挖掘时,觉得反转不就是均值回归嘛,结果回测一跑,亏得我怀疑人生。后来才明白,反转因子在不同时间尺度上,逻辑完全不同。

今天咱们就把反转因子拆开揉碎了讲。从日内到隔夜,再到周度,最后聊聊怎么跟动量因子结合。嗯,这部分内容,我个人觉得是量化入门必须啃下的硬骨头。

一、反转因子的底层逻辑

为什么会有反转效应?说白了,市场不是完全有效的。投资者的过度反应、流动性冲击、情绪驱动,都会导致价格短期偏离合理价值。然后,市场会自己纠偏——这就是反转的根源。

我习惯把反转因子分成三类:

  • 日内反转:分钟级别,高频交易者的战场
  • 隔夜反转:日间级别,捕捉开盘价与收盘价的偏差
  • 周度反转:周线级别,中期趋势的均值回归

你想想看,这三种反转的驱动因素完全不同。日内反转更多是微观结构噪声,隔夜反转跟信息释放有关,周度反转则涉及投资者情绪周期。

核心观点:反转因子不是简单的「过去涨了就卖」,而是要区分时间尺度,找到对应的驱动逻辑。

二、日内反转因子

日内反转,我最早是在做期货高频策略时接触的。当时发现一个现象:如果某只股票在开盘后15分钟内急速拉升,后面大概率会回落。这就是典型的日内反转。

计算方式其实很直接:

# 日内反转因子:用过去N分钟收益率取负值
def intraday_reversal_factor(price_series, lookback=30):
    """
    price_series: 分钟级价格序列
    lookback: 回溯分钟数
    """
    ret = (price_series[-1] / price_series[-lookback] - 1)
    # 反转因子 = -收益率
    return -ret

嗯,这里要注意一个坑。我曾经用1分钟数据做日内反转,结果发现交易成本直接把收益吃光了。后来我改成5分钟、10分钟窗口,效果反而更好。为什么?因为太短的时间窗口,噪声太大,反转信号不稳定。

实战建议:日内反转因子建议用5-15分钟窗口。太短了噪声大,太长了又变成隔夜逻辑。

三、隔夜反转因子

隔夜反转,是我个人觉得最有意思的一个因子。A 股市场有个特点:收盘后到第二天开盘,中间有十几个小时的间隔。这段时间里,各种消息、情绪会累积,导致第二天开盘价出现偏差。

隔夜反转因子的核心逻辑是:如果今天收盘价相对于昨天收盘价涨了很多,那么明天开盘大概率会回调。反之亦然。

# 隔夜反转因子
def overnight_reversal_factor(close_today, close_yesterday, open_today):
    """
    close_today: 今日收盘价
    close_yesterday: 昨日收盘价
    open_today: 今日开盘价
    """
    # 隔夜收益率
    overnight_ret = open_today / close_yesterday - 1
    # 反转因子 = -隔夜收益率
    return -overnight_ret

我记得有一次做回测,发现隔夜反转因子在熊市里表现特别好。仔细一想,熊市里恐慌情绪容易在收盘后发酵,第二天开盘往往过度反应,然后盘中修复。这就是隔夜反转的用武之地。

避坑指南:我曾经用隔夜反转因子做全市场选股,结果发现小市值股票的隔夜反转效果远好于大市值。原因是大市值股票流动性好,开盘价更有效。所以,用隔夜反转时,建议叠加市值过滤。

四、周度反转因子

周度反转,说白了就是看过去一周的涨跌幅。如果某只股票连续涨了一周,下周大概率会跌。这个逻辑在 A 股市场尤其明显,因为散户的追涨杀跌行为在周度级别上特别突出。

计算方式:

# 周度反转因子
def weekly_reversal_factor(close_series, lookback=5):
    """
    close_series: 日线收盘价序列
    lookback: 回溯天数(通常5个交易日)
    """
    ret = (close_series[-1] / close_series[-lookback-1] - 1)
    return -ret

你想想看,周度反转跟日内、隔夜反转最大的区别是什么?是信号强度。周度反转的信号更稳定,但收益也更薄。我做过统计,周度反转因子的年化收益大概在 5%-8% 之间,但夏普比率可以做到1.5以上。

关键点:周度反转适合做中低频策略,交易频率低,容量大。但要注意,周度反转在趋势行情中会失效——比如大牛市里,连续涨一周后可能继续涨。

五、反转因子与动量因子的结合

这里我要说一个我踩过的坑。刚开始做因子组合时,我把反转因子和动量因子直接等权合成,结果回测曲线惨不忍睹。为什么?因为反转和动量在逻辑上是矛盾的——一个买跌,一个买涨。

后来我学聪明了,用「时间分层」的方式结合:

  • 短期(日内/隔夜):用反转因子
  • 中期(周度/月度):用动量因子
  • 长期(季度以上):用反转因子

这个框架的逻辑是:短期市场过度反应,所以反转;中期趋势延续,所以动量;长期又回归均值,所以反转。说白了,就是不同时间尺度上,市场行为不同。

# 反转与动量结合因子
def combined_factor(price_series):
    # 短期反转(5分钟)
    short_reversal = -short_term_ret(price_series, 5)
    # 中期动量(20日)
    mid_momentum = mid_term_ret(price_series, 20)
    # 长期反转(60日)
    long_reversal = -long_term_ret(price_series, 60)

    # 加权合成
    return 0.3 * short_reversal + 0.4 * mid_momentum + 0.3 * long_reversal

实战技巧:我习惯用「条件触发」的方式结合。比如,当短期反转信号强度超过阈值时,才启用反转因子;否则用动量因子。这样能避免两个因子互相抵消。

六、知识体系总览

下面这张图,是我自己梳理的反转因子知识体系。你可以把它当作一个思维导图来看:

flowchart TD
    Root[反转因子知识体系] --> A[日内反转<br/>5-15分钟窗口<br/>高频交易]
    Root --> B[隔夜反转<br/>开盘价偏差<br/>信息释放]
    Root --> C[周度反转<br/>均值回归<br/>情绪周期]
    Root --> D[反转 + 动量因子结合<br/>时间分层 / 条件触发 / 加权合成]

三种反转尺度的对比

时间尺度 窗口 驱动因素 适配场景
日内反转 5-15 分钟 微观结构噪声 高频交易
隔夜反转 1 天 信息释放 中频套利
周度反转 5-10 天 情绪周期 中低频策略

七、实战中的注意事项

最后,分享几个我在实战中总结的经验:

  1. 流动性过滤:反转因子在低流动性股票上效果很差。我一般会剔除日均成交额低于5000万的股票。
  2. 行业中性化:不同行业的反转效应差异很大。比如,金融股的反转效应就比科技股弱。建议做行业中性化处理。
  3. 市场状态识别:在趋势行情中,反转因子会持续亏损。我习惯加一个市场状态判断——当市场处于单边趋势时,降低反转因子的权重。
  4. 交易成本:日内反转的交易频率高,成本敏感。建议用限价单,别用市价单。

重要提醒:反转因子不是万能的。我曾经在2015年股灾期间用反转因子做多,结果连续止损。后来复盘发现,极端行情下,反转因子会失效——因为市场已经失去了纠偏能力。

好了,反转因子这部分就讲到这里。内容不少,但核心就一句话:不同时间尺度,用不同的反转逻辑。别把日内反转的逻辑套到周度上,也别把周度反转的逻辑套到隔夜上。搞清楚这个,你的因子挖掘就成功了一半。