Files
MoFin/docs/v_mr_strategy.md
T
xxm 9080790ed2 feat: v_mr扫描器加大盘ADX甜区门控(12维框架发现)
12维分析(大盘技术面×个股技术面): 弱市深超跌edge前提=大盘ADX∈[25,30]
全市场10年验证: ADX25-30 avg+4.89% vs ADX>=40 -0.10% vs ADX<20 +1.63%
叠加bias60<-20+RSI<30: avg+5.04%/去2018+5.67%/正年10/11
落地: 非甜区默认跳过(--force可强制); 文档§13记录完整推导
2026-08-03 08:58:35 +08:00

16 KiB
Raw Blame History

v_mr 策略文档:小盘深超跌均值回复

创建:2026-08-02 引擎版本:v2(合并自 mr_engine_v2.py 状态: 已通过 10y 全市场验证

1. 策略一句话

买入"跌过头的小盘股",等它反弹回均值。与 v_next4(追趋势)互补,专攻震荡市/熊市里被错杀的超跌股。

2. 背景与动机(为什么建这个策略)

  • 翻倍股分析发现:77% 的翻倍股诞生于震荡/中性市,只有 23% 诞生于趋势市。
  • 趋势引擎(v7.1 评分体系)天然只在趋势市出手,震荡市是它的盲区
  • 尝试把趋势引擎改成均值回复(test_vmr/scan_vmr 系列)全部失败——评分体系是趋势导向的(追动量、追突破),改 filters 是硬套,方向就错了。
  • 结论:均值回复必须独立建一套入场逻辑,不走 score/momentum 评分体系。

3. 入场逻辑(v2 最终版)

因子 参数 含义 来源
bias60 ≤ -10%(单边,无下限) 价格比 MA60 低超过 10% = 深超跌 翻倍股起点 bias60≤-15.75%,取 -10 捕获"超跌未崩"区间
rsi_max ≤ 42 RSI 超卖 翻倍股起点 RSI≤44.8
prev_ret60 ≤ -15%(单边,无下限) 60 日跌幅超 15% 翻倍股起点 prev_ret60≤-10%
mom20_max ≤ 5% 20 日动量低(不追已反弹的) 均值回复前提:还在低位
amount_max ≤ 15(百万元) 20 日均成交额 ≤ 1500 万元 = 小盘 翻倍股成交额极小;大票超跌≠错杀
rsi_delta_min ≥ 2 RSI 5 日回升 ≥ 2 = 止跌确认 离线重放发现:不加止跌确认 avg 2.41% → 加后 3.01%
mkt_mode any 不限大盘 10y 验证:sideways 过滤有害(见 §7

次日开盘价入场(信号日收盘确认,次日 open 成交)。

4. 出场逻辑(v2 最终版)

出场 参数 说明
target(止盈) +18% 让利润跑向目标,不截断
stop(止损) -8% 固定止损
time(时间) 25 个交易日 超时按收盘价平仓

关键修复(v1 → v2v1 有 "反弹到 MA20 止盈" 出场(ma20_revert)。实测这是毒药

  • 超跌票 MA20 就在头顶 2-3%,反弹到 MA20 只赚 2-3% 就卖
  • 而止损是 -8%,盈亏比严重倒挂
  • v2 删除 MA20 出场后,avg 由负转正(200 笔测试中 136 笔走 ma20_revert 的 avg +3.29% 看着还行,但大量本该到 +18% 的票被 2-3% 截断了)

5. 参数是怎么定出来的(完整推导链)

  1. 翻倍股共性因子(分析 10 年翻倍股):起点集中在 小盘 + MA60 下方深跌 + 近期跌 + RSI 偏低 + 低动量。
  2. v1 松版基线strategy_lab.py 首版):923,603 笔 / wr 61.4% / avg -0.1% —— 入场太松 + MA20 出场倒挂,白忙活。
  3. 离线重放定参replay_mr 系列,用 92 万入场点重放不同出场规则,秒级测参):
    • 第 1 轮:确认 MA20 出场全负,去掉后 avg 转正;入场收紧显效。
    • 第 2 轮:最紧入场(bias≤-10/amount≤15/prev≤-15/rsi≤42)→ 13,637 笔 avg 2.41%。
    • 第 3 轮:rsi_delta≥2(止跌确认)→ avg 3.01% / wr 53.6%rsi_delta≥3 → 3.15%。
    • 第 4 轮:tp18/sl8/25d → 9,082 笔 / avg 3.16% / wr 54.8%。年度分布健康(2018 熊市 4098 笔 +4.19%)。
  4. 真实 10y 全市场验证mr_engine_v2.py):见 §6avg 3.34% vs 离线预测 3.16%对齐良好

6. 验证结果(10y2016-07-01 ~ 2026-07-24A 股全市场)

指标 数值
交易笔数 21,690
胜率 53.6%
平均收益/笔 +3.34%
平均盈利 +11.9%
平均亏损 -6.56%
平均持仓 16.9 天
组合 10y(等权 5 仓) +332.1%(年化 15.6%,回撤 45.4%
组合 10y(满仓模拟) +208.8%(年化 11.8%,回撤 26.0%
覆盖月份 107 个月,universality 76.0
出场分布 target 5,851+18%)、stop 7,374-8%)、time 8,465+3.09%

年度分布(组合口径)2018 熊市大量出手(10,163 笔);2019 +49%2025 +25%2026 当前 -12.6%(见 §7)。

7. 踩过的坑(重要教训)

  1. MA20 反弹止盈是毒药 —— 均值回复的票反弹空间只有 2-3% 到 MA20,必须让利润跑向 +18%。
  2. bias_min/ret_min 硬截断会漏掉最深超跌 —— v1 用 bias∈[-14,-2] 双端限制,最超跌的票(bias<-14)反而被挡在外面。v2 改单边(只设上界不设下界)。
  3. sideways 过滤(ADX<25 才出手)有害 —— 10y 全市场验证:过滤后收益 206.6% → 147.9%。趋势市里买超跌反弹力度更大,强制过滤掉的是赚钱交易。
  4. MA20 方向过滤无一致规律 —— 2018 熊市大盘 MA20 下抄底反而赚钱(wr 63%),2026 年上下都亏。不能用于过滤。
  5. 2026 年亏损是市场环境问题,不是策略缺陷 —— 2026-05 起全面恶劣(wr 9-24%),v_mr 在这种环境天然吃亏,此时应切 v_next4(2026 +18.9%)。这正是组合互补的意义。
  6. 大盘上下文数据曾缺失 —— sh000001 在 stock_daily 只有 2021-07 起,2016-2020 数据在 sector_index_daily。已回填(2026-08-02),mkt_adx 覆盖从 23% → 90%。

8. 与 v_next4 的分工(组合互补性验证结论)

维度 v_next4(趋势) v_mr(均值回复)
出手时机 100% 大盘 MA20 上方(强趋势市) 83% 在大盘 MA20 下方/震荡市
典型年份 2025 +29.8%、2022 +16.2% 2019 +49%、2021 +23.7%
2018 熊市 0 笔(完全不出手) 10,163 笔(主战场)
2026 趋势市 +18.9%(主力) -12.6%(回避)
股票池 58 只(大市值趋势票) 1,753 只(小盘超跌票)
信号重叠 21 个重叠日/10 年(竞争极少) ——

合并价值v_mr 单独 10y +206.6%,叠加 v_next4 覆盖牛市暴利段后 +302.1%cagr 14.8%dd 26.2%)。两策略按市场周期轮动,互不抢信号。

9. 代码位置

  • 引擎(合并后)strategy_lab.pyrun_mr_backtest()v2 版本,含 skip_stats 统计)
  • 注册strategy_lab.pyregister_mr_strategy()(B 类策略,不进 v7.1 评分体系)
  • 独立副本(历史)mr_engine_v2.pyv2 修复版,已合并,保留作参考)
  • 数据data/mofin.dbstrategy_research 表(version='v_mr',最新一条 = v2 10y 21690 笔)
  • 离线重放脚本/tmp/replay_mr*.py(历史调参用)

10. 运行方式

import strategy_lab as lab
lab.register_mr_strategy('v_mr', 'v_mr: 小盘深超跌均值回复', summary, hypothesis,
    {'bias_max': -10, 'rsi_max': 42, 'ret_max': -15, 'mom20_max': 5,
     'amount_max': 15, 'rsi_delta_min': 2, 'mkt_mode': 'any'},
    {'tp_pct': 0.18, 'sl_pct': 0.08, 'max_hold_days': 25}, slots=5)
r = lab.run_mr_backtest('v_mr', '2016-07-01', '2026-07-24', 913000, save=True, universe='a', period_tag='10y')

⚠️ 注册须在跑测前调用(v_mr 不进 STRATEGIES 持久化注册表)。universe='a' = A 股;'all' 含港股(港股 HSI 上下文另算)。

11. 六步方法论精选调优(2026-08-02 深夜,v_mr 精选版)

背景:实盘扫描器原用"bias60 最超跌取前10"排序——违反六步方法论、无验证、实测证伪corr(bias60,profit)=0.028≈0,最深档 bias<-23.7% 反而最差 avg+1.41%/wr42.8%)。按六步方法论从 21690 笔回测中重新推导。

第1步:挑显著收益票

  • v_mr 基线 21690 笔,收益分层 p50=+1.5% / p75=+18.0% / max=+18.0% / min=-8.0%
  • 显著盈利组 = profit ≥ +18%(即 target 止盈档,5851 笔)

第2步:共同因子(显著盈利组 vs 亏损组)

因子 显著盈利均值 亏损均值 结论
mom20 -14.17 -12.14 盈利组20日动量更负(加速下跌尾声)
rsi_delta 8.86 7.21 盈利组RSI回升更强(止跌确认)
dist_ma20 -5.59 -4.56 盈利组离MA20更远(反弹空间大)
atr_pct 4.16 3.62 盈利组波动更大(弹性足)
mkt_adx 32.88 34.68 亏损组在大盘强趋势时抄底危险
bias60/rsi/prev_ret60 ≈无差异 深超跌≠更好

第3步:正面因子组合全市场重筛

组合 笔数 avg 胜率 盈亏比 覆盖
基线 v_mr 21690 +3.34% 53.6% 1.81 107月
mom20+rsi_delta 双因子 2005 +8.11% 71.4% 2.10 68月
三因子(+dist_ma20) 620 +9.04% 75.6% 2.25 40月
四因子(+atr_pct) 242 +10.56% 79.8% 2.34 26月

第4步:负面因子(四因子组内亏损 vs 盈利)

负面因子 亏损组 盈利组 含义
mkt_adx 40.15 29.43 大盘ADX≥35 强跌市抄底危险
obv_delta -977k +25k 资金流出(OBV<0)必死
bias60 -19.75 -17.67 bias<-22 过深易续跌
prev_ret60 -29.57 -26.26 60日跌超32%易续跌
amount_ma20 8.90 10.43 太缩量流动性差

第5步:正负因子合并

版本 笔数 avg 胜率 盈亏比 亏损 覆盖
四正面因子 242 +10.56% 79.8% 2.34 49 26月
全负面合并 144 +12.73% 88.9% 2.67 16 13月

第6步:稳健性验证(非过拟合)

检查 笔数 avg 胜率
全样本 144 +12.73% 88.9%
去掉2018全年 37 +10.76% 83.8%
去掉2018-10极端月 60 +9.27% 78.3%
  • 年度分布:2018年107笔(74%2018-10单月84笔)、2022年24笔(+13.86%/100%独立验证)、其余37笔
  • 2022 年独立复现高收益 → 不是单一事件过拟合
  • 组合模拟(3槽,扣费)10年 +94.0% / 年化 8.4% / 回撤 8.1% / 执行 27 笔

精选版策略画像

  • 10年 144 笔 = 年均 14 笔 = 每月约 1 笔,完全适合手工操作
  • 单笔毛利 +12.73%、胜率 88.9%、盈亏比 2.67
  • 出场沿用 tp18%/sl8%/25天(后续调优中)

待落地

  • 实盘扫描器排序规则:bias60最超跌取10 → 精选因子组合筛选
  • ST 股不排除(仓位控制即可,老莫 2026-08-02 指示)
  • 出场参数调优(tp/sl/max_hold 对精选组重新扫描)

第6步续:出场参数调优(2026-08-02,网格扫描 tp x sl x hold

对精选组 144 笔用原始K线重放,扫 tp∈{12,15,18,20,25} × sl∈{6,8,10} × hold∈{20,25,30}

Top 组合

tp sl hold avg wr pf
0.25 0.10 30 +15.51% 90.3% 2.35
0.25 0.08 30 +15.45% 88.9% 2.74
0.20 0.10 30 +14.96% 91.7% 2.05
0.25 0.06 30 +14.71% 84.0% 3.41(盈亏比最优)

结论:tp 18→25(利润跑更远)+ hold 25→30(给反弹时间)= 主要提升来源;sl 8-10% 稳健。

选定参数:tp=25% / sl=10% / max_hold=30天

最终版稳健性验证

检查 笔数 avg wr
全样本 144 +15.51% 90.3%
去2018全年 37 +12.18% 81.1%
2022独立验证 24 +15.01% 95.8%
2024 6 +19.17% 83.3%

组合模拟(扣费0.2%往返)

槽位 10年总收益 年化 回撤 执行
3槽 +135.7% 11.0% 10.0% 27笔
5槽 +93.3% 8.4% 6.0% 35笔
全参与MC +43.5% 4.4% 0.8% 98笔

最终版策略画像(v_mr 精选)

  • 入场:6基线条件 + 正面4因子(mom20∈[-20,-14]、rsi_delta≥10、dist_ma20∈[-10,-7]、atr_pct≥4.5+ 剔除4负面(mkt_adx≥35、OBV<0、bias60<-22、prev_ret60<-32
  • 出场tp=25% / sl=10% / max_hold=30天
  • 10年144笔 = 年均14笔 = 每月约1笔,适合手工
  • 单笔毛利 +15.51%、胜率 90.3%、盈亏比 2.35-2.74
  • ST 股不排除(仓位控制,老莫指示)

12. ⚠️ 结论修正:v_mr 系列不作为弱市实盘策略(2026-08-03 六步方法论全面重审)

老莫按六步方法论要求重新推导"真正普适的弱市策略"(标准:去2018后 avg>0 + 覆盖≥80月 + 年度正贡献≥7年)。研究结论:v_mr 家族(含精选版 v_mr_sel)全部不合格,弱市不存在可实盘的选股 alpha

12.1 v_mr 基线为何不合格

  • 基线 avg +3.34% 靠 2018 超级熊市 10163 笔(47% 撑起;去 2018 后 avg +2.14%/wr 49.8%——掷硬币
  • 2018 是 A 股十年一遇(上证 3500→2440),深超跌反弹只在此时有边缘,其余年份信号稀疏且收益平庸(2026 年 avg +0.06%
  • 本质:v_mr 是"2018 型超级熊市探测器",不是可持续策略

12.2 v_mr_sel(精选版)为何不合格

  • 144 笔信号中 2018-10 三天占 78 笔(54%,覆盖仅 14/120 月——完全是一次行情的产物
  • 任何因子筛选逃不开 2018:单因子 rsi_delta≥10 去 2018 后 avg +2.49%(回到基线),mom20 去 2018 后 +2.11%

12.3 全市场弱市选股穷尽验证(无 alpha)

逻辑 弱市日 20日 avg 去2018 结论
全市场随机(基线) +0.36% +0.36% 掷硬币
深超跌(v_mr) +0.38% ≈0 无边缘
相对强势(RSI≥50) ≈0 ≈0 无边缘
收缩突破(DNA) -0.97% -0.57% 负边缘
低PE防御(60日) +1.18% +1.86% 普适达标但年化仅7%,组合3槽-20.7%

12.4 数据支撑的结论

弱市最好的策略是仓位管理,不是选股:弱市(大盘MA20下)随机买入 = 趋势市随机买入(无差别),期望≈0。弱市应降仓/空仓,把资金留给 v_next4 趋势市主战场。

  • 实盘已实现:strategy_lifecycle 6.5 市场阶段降级(trend_down/choppy 买入降级为"关注"
  • v_mr/v_mr_sel 仅作为"极端熊市(ADX极高+深超跌)"的期权式参考,不作为常规配置

12.5 方法论教训

  • 六步方法论第6步"合格评估"必须包含普适性硬标准(去极端年后 avg>0 + 覆盖≥80月 + 正贡献≥7年),只看整体 avg/胜率会被极端年份欺骗
  • 回测 10 年含 2018 这种极端年,任何"深跌反弹"类策略都会被拉高指标造成假象——必须做去极端年稳健性检查

13. 12维框架深挖:大盘ADX择时是弱市edge的关键前提(2026-08-03

按老莫 12 维分析理论(大盘/行业/个股 × 消息/基本/技术/资金)系统验证,发现第 2 步"个股技术无区分"的根因是遗漏了【大盘技术面】维度。

13.1 核心发现:大盘 ADX 是弱市择股的分层器

全市场 10 年弱市日(大盘MA20下)按大盘 ADX 分桶,60日收益:

大盘ADX桶 样本 avg60日 wr 赢家率(≥26.4%)
<20 118670 +1.63% 45.6% 9.8%
20-25 30113 -1.24% 39.6% 6.3%
25-30 54202 +4.89% 51.0% 14.7%
30-40 74666 -0.04% 41.4% 8.2%
≥40 85291 -0.10% 42.2% 10.0%

甜区 = 弱市 + 大盘ADX∈[25,30](趋势刚转弱/盘整初期):avg +4.89%(年化≈30%)、wr 51%、赢家率 14.7%,远超其他区间。

13.2 甜区内叠加个股超跌因子(12维:大盘技术 × 个股技术)

组合 avg60日 去2018 正年
甜区(基线) +1.67% +2.19% 5/11
甜区+bias60<-20 +4.77% +6.78% 9/11
甜区+bias60<-20+RSI<30 +5.04% +5.67% 10/11

13.3 结论与落地建议

  • 弱市"深超跌反弹"的 edge 真实存在,但前提是大盘 ADX∈[25,30]——这是 v_mr 缺失的大盘前置条件(v_mr 用 mkt_mode='any',任何弱市都扫,信号被 ADX≥30 的强跌市污染)
  • 落地建议:现有 v_mr 扫描器加入大盘 ADX 门控(仅 ADX∈[25,30] 时扫描),提升单笔质量
  • 局限(诚实):单笔 edge +5.67% 真实但薄,信号密集且无排序因子,组合层面年化仅 3%(2018外)——不足以上线为独立实盘策略,价值在"认知 + 门控改进"