第4章:均值回归策略基础

震荡市中的均值回归逻辑

做量化这些年,我见过太多人在趋势策略上栽跟头。其实在震荡市里,有一套逻辑特别管用——均值回归。

什么叫均值回归?说白了就是:价格涨多了会跌,跌多了会涨。就像一根被拉长的橡皮筋,松手后总会弹回去。这个道理听起来简单,但真要用好它,你得理解背后的数学逻辑。

我刚开始做策略研究时,总想着抓大趋势。结果呢?在震荡行情里反复被打脸。后来我慢慢悟出一个道理:市场80%的时间都在震荡,只有20%的时间在走趋势。你想想看,如果我们能把这80%的时间利用好,收益会怎样?

均值回归的核心假设是:价格围绕某个「均衡值」上下波动。这个均衡值可以是移动平均线,也可以是某个统计均值。当价格偏离均衡值太远时,回归的力量就会显现。

核心逻辑:

  • 价格偏离均值越远,回归概率越大
  • 偏离程度用标准差来衡量
  • 回归需要时间,不是瞬间完成

这里有个坑,我踩过。均值回归策略最怕什么?怕趋势行情。一旦市场走出单边趋势,你的回归策略就会不断抄底、不断被套。所以,识别市场状态是第一步

布林带策略的原理与参数设置

布林带是我个人最常用的均值回归工具之一。它由三条线组成:中轨(通常是20日均线)、上轨和下轨(中轨加减2倍标准差)。

原理其实很直观:

  • 上轨 = 中轨 + k × 标准差
  • 下轨 = 中轨 - k × 标准差
  • 中轨 = N日移动平均线

当价格触及上轨时,说明偏离均值较远,可以考虑做空;触及下轨时,可以考虑做多。当然,这不是绝对的,需要结合其他指标确认。

参数怎么设?我分享下我的经验:

参数 默认值 我的建议 适用场景
N(周期) 20 15-30 日线用20,小时线用30
k(倍数) 2 1.5-2.5 波动大用2.5,波动小用1.5
计算方式 简单移动平均 指数加权移动平均 对近期数据更敏感

我曾经在回测中发现,默认的20日均线+2倍标准差在A股市场效果一般。后来我改成15日均线+1.8倍标准差,收益曲线明显平滑了。为什么?因为A股震荡频率高,需要更灵敏的布林带。

实战技巧:

布林带收窄时,往往预示着即将变盘。这时候不要急着入场,等方向明确再说。我习惯用「布林带宽度」指标来辅助判断:宽度 = (上轨 - 下轨) / 中轨。当宽度处于历史低位时,警惕变盘。

代码实现其实很简单:

import numpy as np
import pandas as pd

def bollinger_bands(data, window=20, num_std=2):
    """
    计算布林带
    data: 价格序列
    window: 移动平均周期
    num_std: 标准差倍数
    """
    middle = data.rolling(window=window).mean()
    std = data.rolling(window=window).std()
    
    upper = middle + num_std * std
    lower = middle - num_std * std
    
    return upper, middle, lower

# 使用示例
close_prices = pd.Series([...])  # 你的收盘价数据
upper, middle, lower = bollinger_bands(close_prices, window=20, num_std=2)

注意:

布林带不是万能的。在强趋势行情中,价格会沿着上轨或下轨运行,这时候做反向操作会死得很惨。我建议配合趋势指标(如ADX)一起使用,当ADX大于25时,放弃布林带策略。

RSI指标在震荡市中的应用

RSI(相对强弱指标)是我另一个常用的震荡指标。它的取值范围是0到100,通常认为:

  • RSI > 70:超买,可能回调
  • RSI < 30:超卖,可能反弹
  • RSI在30-70之间:正常震荡

但说实话,直接用70和30作为阈值,效果一般。为什么?因为不同品种、不同时间周期的RSI波动特征不一样。

我个人的做法是:动态调整阈值。比如,先计算过去100天的RSI均值,然后以均值±20作为新的阈值。这样能自适应市场的变化。

举个例子:

def adaptive_rsi_strategy(data, period=14, lookback=100):
    """
    自适应RSI策略
    data: 价格序列
    period: RSI计算周期
    lookback: 回溯周期
    """
    # 计算RSI
    delta = data.diff()
    gain = delta.where(delta > 0, 0)
    loss = -delta.where(delta < 0, 0)
    
    avg_gain = gain.rolling(window=period).mean()
    avg_loss = loss.rolling(window=period).mean()
    
    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    
    # 动态阈值
    rsi_mean = rsi.rolling(window=lookback).mean()
    upper_threshold = rsi_mean + 20
    lower_threshold = rsi_mean - 20
    
    return rsi, upper_threshold, lower_threshold

这里有个小技巧:RSI的背离信号比单纯超买超卖更可靠。什么叫背离?就是价格创新高,但RSI没创新高,这叫顶背离,是卖出信号。反过来,价格创新低,RSI没创新低,叫底背离,是买入信号。

RSI在震荡市的核心用法:

  1. 超买超卖:RSI > 70做空,RSI < 30做多(需配合趋势判断)
  2. 背离信号:价格与RSI走势不一致时,反转概率高
  3. RSI形态:比如双顶、双底,比单一阈值更可靠
  4. 多周期共振:日线RSI和小时线RSI同时超买,做空胜率更高

我记得有一次做股指期货的日内策略,发现单纯用RSI超买超卖,胜率只有55%左右。后来加入背离信号,胜率提升到了62%。虽然只提高了7个百分点,但加上杠杆后,收益差距就大了。

最后说一句:任何指标都有失效的时候。布林带和RSI在震荡市好用,但一旦市场进入趋势行情,它们就会变成反向指标。所以,策略的核心不是指标本身,而是你对市场状态的判断。

嗯,这一章的内容就到这里。均值回归的逻辑、布林带的参数设置、RSI的实战应用,这三块是震荡市策略的基石。把这些吃透了,后面的内容会轻松很多。

均值回归策略知识体系 均值回归策略 震荡市均值回归逻辑 价格围绕均衡值波动 布林带策略 中轨±k×标准差 RSI指标应用 超买超卖+背离 偏离度衡量 回归概率 参数设置 带宽判断 动态阈值 背离信号 核心:识别震荡市 + 动态参数 + 多指标共振

专注资料整理