Jikipedia
第 10 篇

均值回归进阶策略

抓反弹的核心难题是「偏离多少才算超跌、什么时候进场」。这篇把答案做成统计:用「价格偏离 N 日均线的幅度 ÷ 历史波动标准差」得一个无量纲的偏离倍数 ρ(≈z 分数),只统计 ρ 极负(深跌)后的输赢分布,选出胜率最高的偏离区间作入场信号,配合止盈止损与持有期限。回测显示它在震荡市稳定、股灾后能抓住反弹,牛市则不产生信号。本篇是量化课堂第 10 篇(postId=1899,作者肖睿,难度进阶上,level-0)。素材见 raw/collections/jq-quant-classroom/10-10-均值回归进阶策略md.md。

量化均值回归偏离倍数标准差统计入场止损

这是什么

本篇是《均值回归入门》(聚宽 post 1608)的进阶版,并用了《指标效果的统计分析》(post 2086)的方法。核心不是「买跌得最多的」,而是先统计、后进场:用标准差把「偏离均线多少」归一化成偏离倍数,再对历史所有偏离倍数做「赢/输/平」统计,把胜率最高的区间当成买入信号。文章从波动相对性、标准差、偏离倍数、输赢统计一路讲到策略与个股回测。

核心要点

动机:入门版的三个病

  • 入门版思路:价格以均线为中心波动,偏离后会回归;捕捉偏离就能获利。
  • 但它有两个问题:无法准确判断何时买入;缺乏「买在半山腰」之后的处置机制(止损)。
  • 本篇解法:统计历史「偏离 → 反弹」的分布,用胜率最高的偏离度当入场信号。

波动的相对性:同样 2% 偏离,含义不同

  • 只看「价格离均线百分之几」不够——要先问「这股票平时波动多大」。
  • 例子:A 股日振幅 3%、B 股日振幅 0.5%;两者都偏离均线 2% 时,B 的偏离更显著(2% 对 B 是「异常」,对 A 是「日常」)。
  • 图例:平稳期价格高出均线 4.1%、低出 5.9% 被视作显著偏离;同一只股票波动剧烈期偏离 5.3%/5.1% 却不显著。

标准差 σ 与「偏离倍数」

  • σ = 一组数据离其均值的平均距离的度量:σ = √(Σ(xᵢ−μ)²/n)。
  • 两个演示数据:A=(1,0,0,0,0,−1,0,0,0,0),均值 0、σ≈0.45,新值 1 是约 2.23σ 的大波动;B=(1,−1,…) 交替,均值 0、σ=1,新值 1 只有 1σ,不稀奇。
  • 定义N 日偏离倍数 ρ =(今日价 P − N 日均线 MA_N)÷ σ_N(σ 取过去 N 日收盘价标准差)。
  • |ρ| 大 = 今日波动比历史更突出;|ρ| 小 = 普通波动。ρ 就是「以标准差为单位量偏离」的 z 分数(作者自命名)。

输赢统计:找胜率最高的偏离区间

  • 只记录 ρ < −1 的深跌情形(ρ≥−1 偏离不大,不构成回归信号)。
  • 判定规则:设观察天数 T、止盈 σ 倍数 u、止损 σ 倍数 d。未来 T 天内先涨 σ·u → 记「赢」;先跌 σ·d → 记「输」;T 天没碰到两边 → 记「平」。
  • 取 2006–2016 某股数据统计:肉眼估深跌约 2.33.0 倍 σ 一带胜率高(原文写成“ρ 在 2.3 到 3.0”,但它只记录 ρ<−1,应为负侧 −3.0−2.3 的笔误,与下文一致)。
  • 再用《指标效果的统计分析》的取最优区间算法:固定区间宽度 w、最小数据比 θ,找「赢 / 输」比最高的 w 宽区间(绿区面积÷红区面积),并要求区间内数据量 ≥ 总数据量 θ 倍。
  • 本例参数 w=5、θ=0.05 → 最优区间 ρ ∈ [−3.1, −2.6](raw 正文一处误写为 [−2.6,3.1],与「只记 ρ<−1」和后面的 −3.1~−2.6 自相矛盾,判为笔误):赢 (5,7,4,3,8)=27 次,输 (1,4,2,3,2)=12 次,平 2 次。预期赢输 27:12。

策略与回测

  • 参数:均线天数 N、观察天数 T、止盈 u、止损 d、区间宽度 w、最小数据比 θ。每交易日:① 全仓卖出应止盈/止损或持有超 T 天的股票;② 用统计更新每只股票的最佳偏离区间;③ 空仓时选任一偏离倍数落在最佳区间的股票全仓买入,记录 uσ 止盈线与 dσ 止损线;T 日内没碰到也卖出。
  • 代码只适合 1–2 只的小股票池(信号不密集);回测从 2011 开始(保证有历史数据)。
  • 002013(N=30,T=30,u=d=1,w=4,θ=0.05):震荡市稳定小回撤;牛市完全不产生信号、无反应;股灾后稳稳抓反弹、短期大额收益。
  • 002230(同参数):震荡市良好;股灾中抓反弹一度失利,后期弥补损失还获得更高收益。
  • 两股同池对比沪深 300:信号不多但可轮回抓反弹、叠加收益。

机制 / 论证

  • 为什么用标准差归一化:绝对偏离(2%、5%)无法跨股票跨时期比较。除以近期波动 σ 后,「2%」在低波动股身上是 4σ 的异常、在高波动股身上只是日常——ρ 度量的是「相对自身历史的异常程度」,这才是均值回归该反应的信号。
  • 为什么只统计 ρ<−1:均值回归买的是「超跌」,ρ≥−1 说明没跌出历史常态,谈不上回归空间;只统计深跌端可以避免把「正常波动」当信号。
  • 为什么选胜率最高的区间而不是越跌越买:作者明说「不能盲目认为偏离倍数越高越好」,因为没有理论保证跌得多就一定弹得多(可能一路阴跌)。用历史统计穷举所有偏离区间对应走势,让数据决定哪个区间胜率高——这是把「凭感觉抄底」换成「用历史频率定价」。
  • 为什么要有最小数据比 θ:胜率最高的区间可能只有一两次样本、纯属运气;θ 保证区间内有足够数据,统计才可信。
  • 这套方法解决的正是入门版的两个病:入场点由胜率区间给出(不再凭感觉);止盈止损与 T 天期限给「买在半山腰」留了处置机制。

可操作

  • 公式与参数(保留原文):
    • ρ =(P − MA_N)÷ σ_N;σ_N = 过去 N 日收盘价标准差。
    • 只统计 ρ<−1;赢输判定:T 天内先涨 σ·u=赢、先跌 σ·d=输、未触碰=平。
    • 最优区间:宽度 w、最小数据比 θ,找赢/输比最高的 w 宽区间。
    • 回测参数:002013/002230 用 N=30、T=30、u=d=1、w=4、θ=0.05(示例);文首示例 w=5、θ=0.05。
    • 操作:止盈/止损/超 T 天先卖 → 更新最佳区间 → 空仓时全仓买一只落在区间内的票。
  • 平台 API:均线与标准差用行情取数(attribute_history 等,见 聚宽行情与财务数据获取 API);统计输赢与区间可用 pandas;策略按日 run_daily 执行(见 run_daily 与任务节奏控制(定时任务));正文代码在附图,raw 未贴 [需要验证]。
  • 落地提醒:代码只支持小股票池;大股票池需每只分别止盈止损与调仓位(作者明说,等后续文章)。

术语

  • 均值回归:价格偏离均线太多就会弹回来。
  • σ(标准差):一组数据离均值的平均距离。
  • 偏离倍数 ρ:价格偏离均线的幅度 ÷ 历史波动标准差,作者对 z 分数的命名。
  • 赢/输/平:T 天内先触止盈=赢、先触止损=输、都没触=平。
  • 未来函数:用当日才能拿到的数据回测导致的虚高(本篇在数据时效上未多谈,取数仍以前一日为准)。

不确定 / 待验证

  • 回测只有曲线图与定性描述,无年化/回撤具体数字 [需要验证]。
  • raw 一处把最优区间写成「[−2.6,3.1]」,与「只记 ρ<−1」及后文「−3.1 到 −2.6 之间」矛盾,本页按 [−3.1,−2.6] 记录,判为原文笔误。
  • 用一只股票 2006–2016 的历史统计出的最佳区间,是否可移植到其他股票/其他时段(过拟合风险),正文未讨论 [需要验证]。
  • 牛市不产生信号 = 会错过整段上涨;这是该方法的代价而非缺陷,但正文没量化错过多少。
  • 「N 日偏离倍数」只取当日 ρ,未考虑连续多日深跌的累积;参数 N/T/u/d/w/θ 的选择敏感性与最优性未验证。
  • 未来文章预告会结合凯利公式做动态仓位(见 collection 主线与 part 26)。

相关

更新 2026-09-06

检索知识库

按标题、类型或正文检索