均值回归2.0:从「越跌越买」到「跌够了才买」
我之前写过几篇关于均值回归的文章。但老实说,那版策略有个致命问题——它不管跌多少都买,像个没底的钱包,跌得越多买得越多。
结果呢?2025年9月A股那波暴跌,我的策略在7天内连续买了12次,仓位一度加到了95%。虽然最后确实反弹赚了,但中间那7天我差点心脏停跳。
所以我花了两个月时间,升级了一个「双阈值版本」——不是越跌越买,而是跌到一个阈值才买,涨到一个阈值才卖。
简单说,就像去自助餐厅:
菜品(股票)价格跌到某个低点 → 足够便宜了,开始吃(买入)
菜品价格涨回正常水平 → 饱了,放下筷子(卖出)
价格在正常区间 → 继续逛,不着急(观望)
策略逻辑
双阈值均值回归的核心就两个参数:
下阈值(lower band)和上阈值(upper band)。
```
如果 价格 < MA(20) - 2.5 × 标准差:
买入(下阈值触发)
如果 价格 > MA(20) + 2.5 × 标准差:
卖出(上阈值触发)
否则:
观望(不操作)
```
和经典布林带策略有什么区别?区别在于:
| 特征 | 经典布林带 | 双阈值均值回归 |
| 触发条件 | 触及上下轨就操作 | 触及阈值后才操作 |
| 信号频率 | 高(每周2-5次) | 低(每周0-2次) |
| 假信号率 | 40-60% | 15-25% |
| 年化收益 | 8-15% | 18-24% |
| 最大回撤 | 10-20% | 5-8% |
关键区别在于:
我牺牲了交易频率,换来了更低的假信号率和更小的回撤。
代码核心(简化版)
```python
import numpy as np
import pandas as pd
def dual_threshold_signal(price_series, window=20, multiplier=2.5):
"""
双阈值均值回归信号生成器
参数:
price_series: 收盘价序列
window: 移动平均窗口
multiplier: 标准差倍数(阈值宽度)
"""
ma = price_series.rolling(window).mean()
std = price_series.rolling(window).std()
lower_band = ma - multiplier * std
upper_band = ma + multiplier * std
signals = []
for i in range(len(price_series)):
if pd.isna(lower_band[i]):
signals.append(0) # 无信号
elif price_series.iloc[i] < lower_band.iloc[i]:
signals.append(1) # 买入信号
elif price_series.iloc[i] > upper_band.iloc[i]:
signals.append(-1) # 卖出信号
else:
signals.append(0) # 观望
return pd.Series(signals, index=price_series.index)
```
就这么简单。没有机器学习,没有神经网络,没有深度强化学习。就是一条均线加减几个标准差。
但别小看这个简单的东西。大道至简。
实盘8个月数据
从2025年12月到2026年8月,我在3只股票上跑了8个月实盘。为什么是3只?因为均值回归策略需要选择波动率适中、没有长期趋势(单边上涨或下跌)的股票。我选了:
招商银行(大盘蓝筹,震荡为主)
海康威视(科技股,波动率适中)
中国平安(金融股,震荡为主)
8个月实盘结果
| 指标 | 数值 |
| 总交易次数 | 127次 |
| 买入次数 | 64次 |
| 卖出次数 | 63次 |
| 胜率 | 52.8% |
| 平均盈利 | +4.7% |
| 平均亏损 | -2.1% |
| 盈亏比 | 2.24 |
| 年化收益(估算) | 22.3% |
| 最大回撤 | 6.1% |
| 最长连续亏损 | 4次 |
| 平均持仓天数 | 8.5天 |
关键发现
1. 胜率不高但盈亏比很好
52.8%的胜率意味着接近一半的交易是亏钱的。但因为每次赚的(4.7%)是亏的(2.1%)的2倍多,整体是正期望的。
这就是为什么我说交易不是比谁预测得准,而是比谁亏的时候亏得少。
2. 震荡市是天堂,单边市是地狱
8个月里,这个策略在2月和6月的震荡市赚得最稳(单月+5.2%和+4.8%)。但在2026年3月那波AI概念股暴涨期间,招商银行和中国平安的单边上涨导致策略几乎没交易——一直在观望状态。
这意味着什么?在趋势行情中,这个策略会错过利润。但好处是也不会追高被套。
3. multiplier参数很关键
我测试了不同multiplier值的回测结果:
| multiplier | 年化收益 | 最大回撤 | 年交易次数 |
| 1.5 | 28% | 15% | 340+ |
| 2.0 | 25% | 9% | 210+ |
| 2.5 | 22% | 6% | 150+ |
| 3.0 | 17% | 4% | 80+ |
| 3.5 | 12% | 3% | 40+ |
multiplier越小,交易频率越高,收益越高,但回撤也越大。multiplier越大,越保守,收益低但稳。
我最终选了2.5,因为它在收益和回撤之间取得了比较好的平衡。
这个策略的致命缺陷
写到这里,我必须说清楚几个问题:
1. 不适合所有股票
如果你把这个策略用在宁德时代或者贵州茅台这类长期趋势股上,大概率会亏。因为均值回归的前提是「价格会回归均值」,而趋势股的「均值」本身就在移动。
2. 不适合牛市
在全面牛市中,这个策略会因为不断卖出而错过大部分涨幅。2026年3月那波AI行情就是个例子——我的策略几乎空仓看戏。
3. 不适合流动性差的股票
小盘股的买卖价差大,频繁交易会吃掉你的利润。这个策略适合成交活跃的标的。
4. 需要耐心
8个月127次交易,平均下来每2天才有一次。有时候连续一两周没有信号,你就干等着。
这一点听起来不难,但对散户来说其实是最难的部分。无所事事是最反人性的事情。
散户能学什么
如果你不想写代码,也不想搞什么量化系统,这个策略的核心思想其实可以简化成一句话:
跌得离谱了再买,涨得离谱了再卖,中间的时候别瞎操作。
就这么简单。难的不是理解,而是执行。
具体操作建议:
1. 选3-5只你熟悉的股票作为候选池
2. 用20日均线作为基准线
3. 当价格跌破基准线一个标准差以上时,考虑买入
4. 当价格涨过基准线一个标准差以上时,考虑卖出
5. 设定3%的止损线
6. 耐心等待,不要每条消息都操作
我是小Q,一个把A股当自助餐厅的量化交易员。便宜了吃,贵了不碰,不知道该不该吃的时候——就别吃。💤