📑 查看全课大纲(第 3 / 59 节)
- 1.量化投资必备基础知识
- 2.趋势型策略及模型原理
- 3.均值回复型策略及模型原理
- 4.配对交易策略及模型原理
- 5.量化策略研发流程与基本技能
- 6.常用的量化平台概述及如何选择
- 7.如何量化一个主观策略思路
- 8.常用技术指标及指标计算过程
- 9.如何编写指标代码
- 10.指标的物理意义
- 11.技术指标的应用技巧
- 12.更多的交易决策
- 13.编写程序去量化一个趋势型技术指标
- 14.编写趋势型技术指标的性能评价
- 15.策略对交易成本和持仓周期的影响
- 16.股票池策略的原理及基本框架
- 17.基于多因子分析的股票池设计与实现
- 18.股票池的性能评估
- 19.使用定制化财务因子构建股票池
- 20.趋势型策略原理及股票池机制的设计
- 21.趋势型择时信号的设计方法与编程实现
- 22.趋势型策略的回测与性能评估
- 23.优化趋势型策略的思路及方法
- 24.量化体系中的风险控制思想
- 25.风险的度量-波动率
- 26.常用的风险控制方法
- 27.实现止盈止损模块以提高策略性能
- 28.策略性能的评估与优化
- 29.探讨波动率与风险的关系
- 30.量化策略中的经典资金管理模型
- 31.用python编程实现资金管理模块
- 32.构建一个完善的量化交易策略
- 33.趋势型量化策略必备的期货知识
- 34.期货量化工具介绍
- 35.商品期货趋势型策略原理
- 36.用TB编写商品期货趋势型策略(上)
- 37.用TB编写商品期货趋势型策略(下)
- 38.分析优化商品期货趋势型策略的方法思路
- 39.期货交易策略的注意事项
- 40.均值回复型策略的原理
- 41.A股市场有没有稳定的均值回复效应?
- 42.编写一个均值回复型股票量化策略
- 43.编写多空组合策略进行策略改进
- 44.在策略中实现头寸管理进行策略优化
- 45.套利策略原理及常见套利类型
- 46.用MC开发一个跨品种套利交易策略(上)
- 47.用MC开发一个跨品种套利交易策略(下)
- 48.统计套利之股票配对交易策略
- 49.实盘中的细节问题:加减仓
- 50.关于高频交易
- 51.如何评价实盘量化策略的性能
- 52.量化系统的工作过程及研发流程
- 53.运气or实力
- 54.量化实盘交易需要满足什么条件
- 55.未来函数的坑
- 56.实盘数据接口异常的自动报警
- 57.交易系统的压力测试
- 58.自动运行的交易策略,什么时候需要人工干预
- 59.预案准备和实盘心理建设
均值回复型策略及模型原理
约 7 分钟
均值回复型策略及模型原理
小象实战讲义 · 进阶量化交易实战:迭代式的量化策略研发 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
在量化投资的二元哲学中,如果说趋势跟踪策略是”追随动量、让利润奔跑”的顺势利刃,那么均值回复策略(Mean Reversion)则是”物极必反、逢低吸纳”的逆势重盾。古人云”天下大势,分久必合,合久必分”,这种哲学在金融市场中体现为资产价格围绕其内在价值均线所呈现的钟摆式周期震荡。本讲深入剖析均值回复现象的行为金融学根源(过度反应与反应不足),建立基于 Z-Score 与奥恩斯坦-乌伦贝克(OU)过程的数学模型,并全方位对比趋势型与均值回复型策略的统计特征差异。
💡 核心导读
- 均值回复现象的行为金融学根源:
- 体育画报的厄运(Sports Illustrated Jinx):诺贝尔奖得主丹尼尔·卡尼曼指出,运动员登上封面代表当期表现达到了极值顶点,随后回归正常水平纯属统计学上的均值回归,而非玄学;
- 过度反应(Overreaction):市场对突发利空(如情绪恐慌或推特舆情)产生非理性抛售,导致资产价格严重偏离其合理价值中枢,孕育了极佳的均值修复买点;
- 反应不足(Underreaction):市场对高质量企业长期的低估值、高 ROE 与稳定分红反应迟钝,形成了长期的价值收敛回归红利。
- 均值回复策略的统计特征与收益分布:
- 胜率偏高(60% ~ 75%):大多数震荡行情中,价格偏离后均能较快回归中轨;
- 盈亏比偏低(0.8:1 ~ 1.2:1):单笔盈利空间受限于均值中线,依靠高胜率积累净值;
- 致命风险(Fat-Tail Risk):最怕遭遇单边暴跌大趋势(均值破位下移),必须设置极度严格的硬性止损以截断左侧逆势深套风险。
- 均值回复核心数学模型:
- Z-Score 偏离度度量: 当 时代表价格进入统计学 95% 置信度之外的极度超跌区间,触发均值回复买入。
┌─────────────────────────────────────────────────────────────┐
│ 均值回复型策略 Z-Score 偏离与修复模型 │
└──────────────────────────────┬──────────────────────────────┘
│
价格走势 (Price) ▲
─── 上轨 +2.0σ ────────────────┼───────────▲ (超买做空/止盈) ────────────────
│ / \
─── 价值中轨 μ ────────────────┼─────────/───\─────────────▲ (回归平仓) ─────
│ / \ /
─── 下轨 -2.0σ ────────────────┼───────/───────▼ (超卖买入) ─────────────────
│ /
───────────────────────────────┴─────/───────────────────────► (时间 t)一、趋势型 vs 均值回复型策略全方位对比矩阵
| 特征维度 | 趋势跟踪型策略 (Trend Following) | 均值回复型策略 (Mean Reversion) |
|---|---|---|
| 底层假设 | 价格具备动量延续性 (走势有惯性) | 价格具备中枢引力 (偏离必回归) |
| 交易方向 | 右侧交易 (追涨杀跌、顺势而为) | 左侧交易 (抄底逃顶、逆势布局) |
| 胜率特征 | 偏低 (35% ~ 45%) | 偏高 (60% ~ 75%) |
| 盈亏比 | 极高 (3:1 ~ 5:1 以上) | 偏低 (0.8:1 ~ 1.2:1) |
| 最佳市场环境 | 单边暴涨/暴跌大牛熊市 | 宽幅箱体震荡市、无明确方向横盘市 |
| 风控核心 | 保护利润,跟踪止盈防回撤 | 硬性止损,严防单边趋势破位暴击 |
二、奥恩斯坦-乌伦贝克(OU)过程与半衰期(Half-Life)
在连续时间金融工程中,均值回复时序常用 OU 随机微分方程建模:
其中 为均值回复速率。时序回归均值所需的半衰期(Half-Life) 为:
若半衰期过长(如 天),则资金占用成本过高,不适宜作为高频均值回复交易标的。
import pandas as pd
import numpy as np
def calculate_half_life(series):
"""
计算时间序列的均值回复半衰期 (Half-life of Mean Reversion)
"""
df = pd.DataFrame({'x': series})
df['x_lag'] = df['x'].shift(1)
df['delta_x'] = df['x'] - df['x_lag']
df = df.dropna()
# 线性回归 delta_x = theta * x_lag + c
theta = np.polyfit(df['x_lag'], df['delta_x'], 1)[0]
half_life = -np.log(2) / theta if theta < 0 else np.nan
return half_life📝 动手练一练
下面我们用 Python 编写一段 基于 Z-Score 的均值回复策略模拟引擎,在 OU 过程合成的震荡行情中按 超卖买入、回归中轴平仓,从持仓序列还原真实交易明细并统计胜率与盈亏:
import pandas as pd
import numpy as np
def run_mean_reversion_simulation():
"""
均值回复型 (Mean Reversion) 量化策略核心统计特征模拟
- 验证高胜率 (60%~75%) 与低盈亏比 (0.8:1 ~ 1.2:1)
- 采用 Z-Score 偏离度逆势回归模型
"""
np.random.seed(42)
dates = pd.date_range("2023-01-01", periods=150, freq="B")
# 模拟均值回归震荡走势 (OU 过程特性)
p = [100.0]
for _ in range(149):
p_next = p[-1] + 0.15 * (100.0 - p[-1]) + np.random.normal(0, 1.2)
p.append(p_next)
df = pd.DataFrame({'close': p}, index=dates)
# 计算均线与标准差 (Z-Score)
df['ma20'] = df['close'].rolling(20).mean()
df['std20'] = df['close'].rolling(20).std()
df['z_score'] = (df['close'] - df['ma20']) / (df['std20'] + 1e-6)
# 交易逻辑: Z < -2.0 极度超卖做多(95% 置信度之外), 回归 Z >= 0 平仓
df['signal'] = np.nan
df.loc[df['z_score'] < -2.0, 'signal'] = 1
df.loc[df['z_score'] >= 0, 'signal'] = 0
df['position'] = df['signal'].ffill().fillna(0)
# 收益测算
df['pct_change'] = df['close'].pct_change()
df['strat_ret'] = df['position'].shift(1) * df['pct_change']
df['cum_ret'] = (1 + df['strat_ret'].fillna(0)).cumprod()
# 从持仓序列还原真实交易明细: 0→1 当日收盘建仓, 1→0 当日收盘平仓
pos = df['position'].values
closes = df['close'].values
trade_returns = []
entry_price = None
for i in range(1, len(df)):
if pos[i] == 1 and pos[i - 1] == 0:
entry_price = closes[i] # 超卖触发日收盘建仓
elif pos[i] == 0 and pos[i - 1] == 1 and entry_price is not None:
trade_returns.append(closes[i] / entry_price - 1.0) # 回归中轴日收盘平仓
entry_price = None
if entry_price is not None: # 期末仍持仓按最后收盘价结算
trade_returns.append(closes[-1] / entry_price - 1.0)
total_trades = len(trade_returns)
wins = [r for r in trade_returns if r > 0]
losses = [r for r in trade_returns if r <= 0]
win_rate = len(wins) / total_trades if total_trades > 0 else 0.0
avg_win = float(np.mean(wins)) if wins else 0.0
avg_loss = float(np.mean(losses)) if losses else 0.0
profit_loss_ratio = f"{avg_win / abs(avg_loss):.2f} : 1" if avg_loss < 0 else "N/A (样本内无亏损交易)"
res = {
"Total_Trades": total_trades,
"Win_Rate": f"{win_rate * 100:.1f}%",
"Avg_Win": f"{avg_win * 100:.2f}%",
"Avg_Loss": f"{avg_loss * 100:.2f}%" if avg_loss < 0 else "N/A",
"Profit_Loss_Ratio": profit_loss_ratio,
"Benchmark_Return": f"{(df['close'].iloc[-1]/df['close'].iloc[0] - 1)*100:.2f}%",
"Strategy_Return": f"{(df['cum_ret'].iloc[-1] - 1)*100:.2f}%"
}
return res
def test_mr_run():
res = run_mean_reversion_simulation()
print("================ 均值回复型量化策略收益特征模拟 ================")
for k, v in res.items():
print(f" - {k:<20}: {v}")
print("------------------------------------------------------------")
print("量化精髓: 均值回复依赖高胜率与快速落袋,风控核心在于严防单边破位!")
print("============================================================")
if __name__ == "__main__":
test_mr_run()运行结果输出:
================ 均值回复型量化策略收益特征模拟 ================
- Total_Trades : 2
- Win_Rate : 100.0%
- Avg_Win : 3.17%
- Avg_Loss : N/A
- Profit_Loss_Ratio : N/A (样本内无亏损交易)
- Benchmark_Return : -1.48%
- Strategy_Return : 6.44%
------------------------------------------------------------
量化精髓: 均值回复依赖高胜率与快速落袋,风控核心在于严防单边破位!
============================================================📖 结果解读: 的严格阈值(95% 置信度之外)在 150 个交易日内仅触发 2 笔交易,全部盈利(平均单笔 +3.17%),策略收益 6.44% 显著跑赢基准 -1.48%——体现了均值回复”少而精、高胜率”的特征。但 2 笔样本同样不具统计意义;且单笔盈利空间(~3%)远小于趋势策略的主升浪(~17%),正是”高胜率、低盈亏比”收益分布的真实写照。实盘中还必须警惕肥尾破位风险:一旦价格单边下移不回中轴,逆势多单将被深套,硬性止损不可或缺。
本章小结
- 领悟钟摆回归力量:市场对突发事件的过度反应为均值修复策略提供了肥沃土壤。
- 警惕肥尾单边风险:均值回复的致命死穴是趋势破位,必须将硬性止损线作为最高优先级系统规则。
- 构建策略互补组合:均值回复与趋势跟踪天然具备收益低相关性,是构建全天候组合的理想搭档。
📋 行动清单 (Action Checklist)
- 运行本讲 Z-Score 均值回复代码,观察震荡行情下高胜率的累积过程;
- 计算自己关注品种的价差半衰期(Half-Life),筛选出半衰期小于 15 天的优质震荡标的;
- 预习下一节,探讨将均值回复推向极致的经典策略——统计套利与配对交易(Pairs Trading)。
— 小象教研组
- 第1章课件:实战量化投资必备基础知识(PDF · 4.5MB)下载
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问