- 新闻43.5%在先 vs 54.3%在后, 平均滞后1.5天 - 关键发现: 无先导波段+59.5%最高, 先导越多收益略降, 纯滞后+64.6%最高 - 结论: 新闻滞后报道, 先导=拥挤交易信号, 无先导的票反而涨得猛 - 消息面三重铁证: 有/无新闻无差异 + 利好利空无差异 + 先导降低收益 - v_weak优势来源: 选没新闻盯上的超跌票, 避开新闻拥挤度
36 KiB
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 → v2):v1 有 "反弹到 MA20 止盈" 出场(ma20_revert)。实测这是毒药:
- 超跌票 MA20 就在头顶 2-3%,反弹到 MA20 只赚 2-3% 就卖
- 而止损是 -8%,盈亏比严重倒挂
- v2 删除 MA20 出场后,avg 由负转正(200 笔测试中 136 笔走 ma20_revert 的 avg +3.29% 看着还行,但大量本该到 +18% 的票被 2-3% 截断了)
5. 参数是怎么定出来的(完整推导链)
- 翻倍股共性因子(分析 10 年翻倍股):起点集中在 小盘 + MA60 下方深跌 + 近期跌 + RSI 偏低 + 低动量。
- v1 松版基线(strategy_lab.py 首版):923,603 笔 / wr 61.4% / avg -0.1% —— 入场太松 + MA20 出场倒挂,白忙活。
- 离线重放定参(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%)。
- 真实 10y 全市场验证(mr_engine_v2.py):见 §6,avg 3.34% vs 离线预测 3.16%,对齐良好。
6. 验证结果(10y:2016-07-01 ~ 2026-07-24,A 股全市场)
| 指标 | 数值 |
|---|---|
| 交易笔数 | 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. 踩过的坑(重要教训)
- MA20 反弹止盈是毒药 —— 均值回复的票反弹空间只有 2-3% 到 MA20,必须让利润跑向 +18%。
- bias_min/ret_min 硬截断会漏掉最深超跌 —— v1 用
bias∈[-14,-2]双端限制,最超跌的票(bias<-14)反而被挡在外面。v2 改单边(只设上界不设下界)。 - sideways 过滤(ADX<25 才出手)有害 —— 10y 全市场验证:过滤后收益 206.6% → 147.9%。趋势市里买超跌反弹力度更大,强制过滤掉的是赚钱交易。
- MA20 方向过滤无一致规律 —— 2018 熊市大盘 MA20 下抄底反而赚钱(wr 63%),2026 年上下都亏。不能用于过滤。
- 2026 年亏损是市场环境问题,不是策略缺陷 —— 2026-05 起全面恶劣(wr 9-24%),v_mr 在这种环境天然吃亏,此时应切 v_next4(2026 +18.9%)。这正是组合互补的意义。
- 大盘上下文数据曾缺失 —— 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.py→run_mr_backtest()(v2 版本,含 skip_stats 统计) - 注册:
strategy_lab.py→register_mr_strategy()(B 类策略,不进 v7.1 评分体系) - 独立副本(历史):
mr_engine_v2.py(v2 修复版,已合并,保留作参考) - 数据:
data/mofin.db→strategy_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外)——不足以上线为独立实盘策略,价值在"认知 + 门控改进"
14. ✅ v_weak_final:六步方法论完整产出的弱市策略(2026-08-03 定稿)
按老莫六步方法论 + 12维框架(大盘/行业/个股 × 消息/基本/技术/资金)完整执行 1-6 步,产出可推荐弱市策略。
策略定义
| 层 | 条件 |
|---|---|
| 大盘 | 弱市(sh000001 < MA20)+ 大盘ADX ∈ [25,30](甜区) |
| 个股正面 | bias60 ∈ [-35, -20](深超跌但不过深)+ RSI ≤ 25(极度超卖) |
| 个股负面剔除 | 5日跌幅 > -3%(剔除阴跌,只留急跌/恐慌盘) |
| 出场 | tp=30% / sl=12% / max_hold=40日 |
验证结果(10y 全市场 A股)
| 指标 | 数值 |
|---|---|
| 交易笔数 | 2,649 |
| 单笔均收益 | +10.66% |
| 胜率 | 68.4% |
| 正贡献年份 | 9/11(2017/18/19/20/21/22/24/25/26正,2023略负) |
| 去2018 | avg +5.60%(967笔/37月) |
| 组合5槽(扣费) | +115% / 年化8.8% / 回撤32% |
六步方法论推导链
- 赢家:弱市日60日≥+26.4%(p90) = 35,490信号/100月覆盖(每年都有,非2018独有)
- 共同因子:12维框架发现大盘ADX是分层器(ADX25-30 avg+4.89% vs 其他区间≈0);个股技术单独无区分(漏维度)
- 全市场筛:甜区+深超跌+RSI<30 → 7,254信号 avg+5.19%
- 负面因子:筛选集内亏损vs盈利对比 → 过深bias60(<-35)/RSI偏高(>25)/5日浅跌(r5f>-3) 是亏损共性
- 正负合并:三负全剔 → 2,651信号 avg+9.84%/wr66.1%
- 调参:出场tp25→30/sl10→12/hold40 → avg+10.66%/wr68.4%
与 v_mr 对比(全面胜出)
| 指标 | v_mr | v_weak_final |
|---|---|---|
| avg | +3.34% | +10.66% |
| wr | 53.6% | 68.4% |
| 去2018 | +2.14%(掷硬币) | +5.60%(真实) |
| 组合年化 | 4.6% | 8.8% |
关键认知(可复用)
- 弱市选股 edge 真实存在,前提=大盘ADX∈[25,30](趋势刚转弱的盘整期),这是 v_mr 缺失的大盘前置
- 负面剔除 > 正面排序:筛选集内"亏损票共性"(过深/RSI偏高/阴跌)比"挑最好"更有效
- 信号适中(年均265笔,每月约22笔,部分可人工)
15. 仓位研究:等权6槽自然序为最优(2026-08-03 全面测试)
对 v_weak 做科学仓位研究(非拍脑袋):强度评分单调性验证 + 6 种仓位方案 × 3-8 槽全扫描 + 排序选票对比 + MC 随机对照。
15.1 强度评分单调性(分级仓位的前提验证)
r5f/RSI/bias60 合成强度分,十等分:D1(+1.24%/41%) → D10(+18.17%/90.5%) 完美单调(差距15倍)。
15.2 分级仓位 × 槽位 全扫描结果
| 方案 | 最优槽 | 年化 | 总收益 | 回撤 | 收益/回撤 |
|---|---|---|---|---|---|
| 等权(基准) | 6 | 9.6% | 131% | 27.6% | 4.7 |
| 等权 | 5 | 8.8% | 115% | 32.1% | 3.6 |
| 连续Kelly | 5 | 7.5% | 92% | 29.2% | 3.2 |
| 两档0.5/1.5 | 5 | 5.0% | 56% | 26.7% | 2.1 |
| 三档0.3/1/2 | 5 | 4.9% | 54% | 27.9% | 1.9 |
结论:等权 > 任何分级加权。boost 加权虽降回撤(32%→24-27%),但收益损失更大(115%→53-56%)。强度分单调但组合层面分级无益。
15.3 排序选票对比(关键反直觉发现)
| 选票方式 | 总收益 | 年化 |
|---|---|---|
| 自然序(插入序) | 115% | 8.8% |
| score高分优先 | 17% | 1.7% |
| score低分优先 | 4% | 0.5% |
| MC随机(30次均值) | 87% | 7.0% |
自然序 >> 任何排序:v_weak 信号按日期自然排列时,同天先出现的恰是更强超跌(隐式质量排序)。高分优先排序反而破坏入场节奏。
15.4 最终仓位策略
- 等权 6 槽(100万/6≈16.7万每票),自然序入场(不做 score 排序、不做 boost 分级)
- 10年:总收益+131% / 年化9.6% / 回撤27.6% / 收益回撤比4.7
- 单笔:avg+10.66% / wr68.4% / 去2018+5.60% / 正年9/11
16. 回撤优化:每月≤8信号(2026-08-03,回撤27.6%→19.4%)
用户质疑回撤27.6%过大。系统诊断 + 全面测试后找到最优方案。
16.1 回撤根因诊断
- 最大回撤区间 2023-02 ~ 2024-08(18个月阴跌),312笔 wr仅36.2%
- 打击点:2024-01微盘流动性危机(22笔全灭 wr0%/avg-12%)、2023-03(13%)、2024-05(20%)
- 结构性缺陷:甜区(ADX25-30)持续出手,但2023-2024是阴跌市,RSI≤25深超跌无反弹,止损-12%反复被打
16.2 降回撤方案全测试(诚实记录)
| 方案 | 结果 |
|---|---|
| 大盘RSI回升过滤 | ❌ 信号2649→394,avg+10.66%→+3.01%(甜区大部分日不回升) |
| 大盘MA20斜率 | ❌ 回撤期纹丝不动 |
| 收紧止损12→8 | ❌ 无改善(回撤是环境非单笔) |
| 高槽位8-20 | ❌ 回撤仍27-32%,年化反降 |
| 同月信号≤8 | ✅ 回撤19.4%,年化9.6%→16.7% |
16.3 最终方案:v_weak_8
- 每月最多8个信号(自然序=最强超跌优先),等权6槽
- 回测:301笔 / 组合6槽 +308% / 年化15-16.7% / 回撤19.4% / 收益回撤比15.9
- 单笔 avg+4.83% / wr54.8% / 去2018 +6.00%(236笔/37月) / 正贡献10/11年
- 每月8笔完全人工可操作
16.4 认知
- 深超跌抄底的回撤来自集中出手而非单笔亏损——同月限8让资金不"一篮子抄底",收益/回撤4.7→15.9
- 择时过滤(大盘RSI/斜率)对阴跌市无效,2024-01微盘危机大盘指标是假回升
17. 入场修正:只买"下方有支撑"的票(2026-08-03,老莫洞察)
老莫指出:"支撑太远的票根本不该买"。验证并落地。
17.1 洞察验证(距20日低点分桶)
| 距20日低点 | n | avg | wr |
|---|---|---|---|
| <5%(近支撑) | 2258 | +10.93% | 70.0% |
| 5-10% | 351 | +9.73% | 59.5% |
| 10-15% | 36 | +4.38% | 55.6% |
| 15-25% | 4 | -2.04% | 50.0% |
结论:支撑越近越好。距前低<5%的票(跌到近期底部、下方有承接)反弹最有力(+10.93%/wr70%);>10%的还在下跌途中、无支撑(avg崩至+4%以下)。
17.2 修正后入场条件
原 v_weak 条件 + 距20日低点 <5%(剔除"还在下跌途中、下方无支撑"的票)
17.3 修正后表现
| 指标 | 原v_weak_8 | 修正版 |
|---|---|---|
| 单笔 avg | +4.83% | +5.13% |
| 胜率 | 54.8% | 57.5% |
| 去2018 | +6.00% | +6.34% |
| 正贡献年 | 10/11 | 10/11 |
| 组合6槽 | 310%/16.8%/19.4% | 310%/15.1%/19.4% |
17.4 止损结论(前文S1/S2测试的教训)
- 弱支撑S1距入场仅1.6%→wr崩至17.9%(太近,一买就被扫)
- 强支撑S2可能在-20~-40%→最大单亏-41.6%(太远=没止损,扛单扛到死)
- 深超跌票下方无可靠技术支撑,止损用固定-12%(回测最优),入场用"距前低<5%"筛选确保有承接
18. 止损+RR 正式定稿(2026-08-03,RR维度验证)
老莫要求:①支撑太远不买(已落地§17);②必须考虑RR(Risk/Reward盈亏比)。本节省完整验证。
18.1 止损×RR 全组合扫描(7止损 × 3RR = 21组合,每月≤8)
| 止损 | RR | avg | wr | 去2018 | max亏 |
|---|---|---|---|---|---|
| 固定-12% | 2.5 | +5.13% | 57.5% | +6.34% | -12.0% |
| 固定-12% | 2.0 | +5.11% | 58.9% | +6.23% | -12.0% |
| 固定-12% | 3.0 | +5.17% | 56.5% | +6.22% | -12.0% |
| ATR×3 | 3.0 | +4.61% | 57.2% | +5.51% | -22.4% |
| 前低-8% | 3.0 | +4.24% | 51.0% | +5.04% | -12.2% |
| 前低-6% | 3.0 | +3.73% | 48.3% | +4.40% | -10.3% |
18.2 为什么"跌破前低止损"不如固定-12%(诚实结论)
- v_weak 入场要求距前低<5%(§17),跌破前低止损距离仅4-8%
- 深超跌高波动票的正常波动就达4-6%,支撑止损太紧频繁被扫(wr 42-53% vs 固定58.9%)
- 支撑筛选已在入场侧完成(确保下方有承接),止损侧用固定-12%控制单笔风险
18.3 正式止损+止盈逻辑
- 止损:入场价 -12%(盘中触发即出)
- 止盈:入场价 +30%(= RR2.5 × 12%止损距离,满足盈亏比≥2:1要求)
- 超时:40个交易日按收盘平仓
- 同日冲突:止损优先
- RR 验证:止盈/止损 = 30/12 = 2.5 ≥ 2 ✅
18.4 入场筛选(完整)
弱市(MA20下) + ADX∈[25,30] + bias60∈[-35,-20] + RSI≤25 + 5日急跌≤-3% + 距20日低点<5%(下方有支撑) + 每月≤8 + 等权6槽
19. 三次评估流程优化:入场重评确认(缩量+收阳)(2026-08-03)
按老莫"三次评估流程"(选股→入场重评→出场重评)重构回测,找到入场重评的确认条件。
19.1 三次评估回测探索
- 3stage初版(等回调买入): wr 48.2%——等回调=等继续跌,错过反弹不回调的票
- 3stage实盘对齐(深套/弱势豁免+swing MA10出场): wr 54.9%——MA10波段对深超跌高波动太敏感(97%被swing平掉)
- 结论: v_weak深超跌反弹票不适合实盘swing/MA10出场体系,需简单出场(tp/sl/time)
19.2 入场重评确认最优解(信号日12维确认)
| 确认条件 | n | avg | wr | 去2018 |
|---|---|---|---|---|
| 基线(信号日直接买) | 292 | +5.13% | 57.5% | +6.34% |
| 当日收阳 | 204 | +4.43% | 54.4% | +6.40% |
| 缩量<1.0 | 221 | +2.82% | 53.8% | +3.56% |
| 缩量+收阳 | 136 | +7.00% | 61.8% | +8.46% |
| RSI3日回升 | 115 | +3.35% | 48.7% | +4.82% |
| 大盘RSI<45 | 172 | +2.86% | 47.7% | +4.57% |
最优: 缩量(<1.0)+收阳 双确认——缩量=抛压衰竭, 收阳=资金进场, 过滤弱信号。
19.3 v_weak 最终形态(三次评估)
- Stage1选股: 甜区(弱市+ADX25-30) + bias60∈[-35,-20] + RSI≤25 + 5日急跌≤-3% + 距前低<5% + 每月≤8
- Stage2入场重评: 当日收阳 + 缩量(<1.0) 确认才买入
- Stage3出场: 固定 tp30%/sl12%/hold40(简单出场,不适合swing/MA10)
- 结果: 136笔/avg+7.00%/wr61.8%/去2018+8.46%/正年8/11/6槽ret163%/dd18.7%
20. C 机器学习探索:时序外验证(2026-08-03)
老莫要求 C(机器学习)在三次评估框架内试,不偏离实盘路径。用纯Python逻辑回归(无sklearn,防环境依赖)。
20.1 设计
- 样本: 2260 个 v_weak 候选(甜区+深超跌+RSI+急跌+距前低<5%),12维特征
- 标签: 未来40日是否达+30%止盈(正例率34%)
- 时序外: 前70%(2016-2023)训练, 后30%(2024-2026)测试——防过拟合
20.2 结果
| 概率阈值 | 精确率 | 召回率 | 预测买入 |
|---|---|---|---|
| 0.45 | 0.511 | 0.446 | 186笔 |
| 0.40 | 0.483 | 0.596 | 263笔 |
| 基线正例率 | 0.34 | — | — |
时序外有效: 逻辑回归把止盈精确率从基线34%提到51%(+17pp),非过拟合。
20.3 特征权重(新洞察)
| 特征 | 权重 | 含义 |
|---|---|---|
| mkt_adx | +0.695 | 大盘ADX越高越倾向止盈(甜区内接近30上沿反弹更确定) |
| r10f | -0.278 | 10日跌越深越好(恐慌释放充分) |
| r20f | +0.195 | 20日动量微正(企稳) |
| dist_lo20 | +0.187 | 距前低略远(站稳) |
| rsi_delta | -0.150 | RSI回升反而不利(已反弹的追高风险) |
20.4 结论
- ML 时序外有效(51% vs 34%),但不优于"缩量+收阳"硬规则(wr 61.8%)
- 硬规则可解释、无模型维护成本,v_weak 保持硬规则
- ML 发现的新因子(mkt_adx接近上沿、r10f深跌、rsi_delta为负)作为未来增强方向记录
21. 仓位优化:每月≤30 + 等权8槽(2026-08-03)
老莫指出136笔/10年少、回撤18.7%高、问仓位控制影响。系统扫描 每月上限×槽位 矩阵。
21.1 仓位矩阵(每月上限 × 槽位)
| 月上限 | n | 槽 | 年化 | 总收益 | 回撤 | 收益/回撤 |
|---|---|---|---|---|---|---|
| 8 | 136 | 6 | 12.0% | 163% | 18.7% | 8.7 |
| 8 | 136 | 8 | 12.2% | 166% | 19.3% | 8.6 |
| 30 | 234 | 8 | 12.8% | 178% | 16.4% | 10.9 |
| 30 | 234 | 10 | 12.5% | 172% | 17.5% | 9.9 |
| 5 | 100 | 4 | 10.9% | 142% | 20.4% | 6.9 |
仓位结论:8槽最优。4→8槽: 年化+2pp, 回撤-4pp, 收益/回撤6.5→10.9。等权分散是核心。
21.2 最终 v_weak 配置
- 每月≤30 + 等权8槽 + 缩量收阳确认 + tp30/sl12/40
- 234笔/10年(年均23笔) / avg+7.17% / wr62.4% / 去2018+8.02% / 正年8/11
- 组合8槽: +178% / 年化12.8% / 回撤16.4% / 收益回撤10.9
21.3 对比(解决三个质疑)
| 指标 | 原(月8/6槽) | 最优(月30/8槽) |
|---|---|---|
| 笔数 | 136 | 234(+72%) |
| 年化 | 12.0% | 12.8% |
| 回撤 | 18.7% | 16.4% |
| 收益/回撤 | 8.7 | 10.9 |
§22 消息面补数据研究:同花顺 API 定向拉取能力(2026-08-04)
老莫提醒:现代 web 应用是"拉到最后触发拉取下一批"(无限滚动),不是"下一页"翻页。且做过的事要记录(§ + 代码块规范)。本节固化消息面补数据的研究结论。
§22.1 同花顺 timeline API 定向拉取能力(实测验证)
接口:https://news.10jqka.com.cn/timeline_web/web/v1/news/list
分页参数:
marketId: 17=上交所(6开头), 33=深交所(0/3开头)code: 6位股票代码size: 每页条数(默认20,实测可用100,减少请求数)offset: 秒级时间游标(publishTime/1000),语义=严格排他上界(返回该时间戳之前的新闻)
实测确认(600519 茅台):
- offset=2024-06-01 00:00 → 返回 2024-05-31 21:49:29 及更早新闻(offset 之前的)
- offset=某条新闻的确切秒 → 该新闻自身不被返回(严格排他)
- 翻页连续无重叠无缺口(page1末 05-30 08:02:19 → page2首 05-30 06:41:30)
- 历史深度可回溯到 2011 年(offset=2015 时返回 2011/2013/2014 新闻)
startTime/endTime/start/end/beginTime等参数全部无效——API 只支持 offset 单边上界
窗口化拉取算法(用于定向补某时间段新闻):
- offset = 窗口终点 + 1秒(排他上界,包含终点时刻)
- 往回翻页(size=100 减少请求)
- 当本页最后一条 publishTime < 窗口起点 → 停止
- 过滤只保留 [起点, 终点] 区间内的新闻
- 实测:6 周窗口 19 页(size=20)→ size=100 只需 ~4 页,0 条越界
§22.2 消息面补数据方案:定向拉取(非全量)
原则:不全量补全市场新闻,而是先定赢家波段,只补相关股票在相关时段的消息。
首批研究对象:涨幅≥80% 的极端波段,每年取涨幅前 20 → 220 个波段,210 只股票,年份分布均衡(2016-2026)。
定向窗口:波段起点前 7 天 ~ 起点后 40 天(约 47 天),覆盖入场前后的消息面。
执行结果:news_backfill_window.py 已完成首批拉取:
- 210 只 × 波段窗口
- 共入库 9471 条新闻(stock_news 表,source=同花顺iNews)
- 单票窗口拉取约 3-8 页(size=20),全程约 20-30 分钟
§22.3 12 维消息面可补的结论
| 维度 | 数据源 | 历史覆盖 | 状态 |
|---|---|---|---|
| 个股消息面 | 同花顺 ths_news.py | 2011+(实测) | ✅ 可补 |
| 个股消息面(近期) | 东财 search-api | 近6个月 | ⚠️ 仅近期 |
| 大盘消息面 | macro_context_collector.py | 仅实时 | ❌ 硬缺口 |
| 行业消息面 | signal_news | 仅实时 | ❌ 硬缺口 |
消费端:strategy_lab.py 的 prepare_news_context() + news_mult=2.0 已启用,补数据直接进回测增益。
§22.4 已固化的采集脚本
/home/hmo/MoFin/deploy/profile-scripts/ths_news.py # 同花顺翻页采集(全量backfill+daily)
/home/hmo/MoFin/deploy/profile-scripts/news_collector.py # 东财翻页采集(近6个月)
/tmp/news_backfill_window.py # 定向窗口拉取(赢家波段相关时段)
§23 消息面分析最终结论:数据补全但无选股价值(2026-08-04)
老莫指导补全消息面数据(4001只赢家波段股×相关时段,401万条新闻)。全量分析后结论:消息面不可用作选股因子。
§23.1 全量消息面数据
- 4001 只赢家波段股 × 波段起点前后窗口(起点-7天~+40天)
- 401 万条新闻入库(stock_news 表)
- 覆盖:同花顺iNews(主)+ 东财(近6月补充)
§23.2 消息面 vs 波段收益(全量,诚实结论)
| 情绪 | n | avg_gain | 判断 |
|---|---|---|---|
| 利好(positive) | 198 | +52.8% | 无显著优势 |
| 中性(neutral) | 941 | +56.4% | 反而最高 |
| 利空(negative) | 153 | +49.5% | 仅略低 |
| 无新闻 | ~4100 | ~51.5% | 基线 |
关键发现:
- 新闻情绪与波段收益几乎无关联——利好52.8% vs 利空49.5% vs 中性56.4%,差异不显著
- 之前"有新闻波段+126.5%"是小样本噪音(248只子集),全量后消失
- 反向因果:大涨的票更可能有新闻(新闻是结果不是驱动)
§23.3 12维消息面最终定位
- ✅ 数据已补全(消息面维度不再缺)
- ❌ 不能作为选股筛选因子(无统计显著关联)
- ⚠️ 可作辅助参考/排除:波段起点有重大负面公告(监管处罚/业绩暴雷)的谨慎——但数据验证排除信号也弱
§23.4 方法论教训
- 小样本假象:248只子集的"新闻+大涨"关联在全量后消失——必须先全量再下结论
- 反向因果陷阱:消息是涨的结果不是原因,不能用"涨得多的有新闻"反推"有新闻的会涨"
- 数据补全 ≠ 策略价值:补了400万条新闻,证明消息面在波段选股上无稳定规律——这是有价值的研究结论(证明此路不通)
§24 新闻与上涨的时间关系:先导反而降低收益(2026-08-04)
老莫问:新闻发布时间和上涨开始时间有什么关系?分析发现:新闻更多是滞后报道,先导新闻反而降低收益。
§24.1 新闻发布时间与波段起点的时间差分布
| 时间关系 | 占比 | 含义 |
|---|---|---|
| 新闻在先>7天 | 33.3% | 新闻发布7天以上后股票才涨(先导) |
| 新闻在先1-7天 | 10.2% | 先导 |
| 新闻当天 | 2.2% | 引爆 |
| 新闻在后1-7天 | 12.5% | 滞后报道 |
| 新闻在后>7天 | 41.8% | 滞后报道 |
平均时间差 -1.5天(新闻略滞后);先导43.5% vs 滞后54.3%。
§24.2 先导新闻数与收益的关系(关键发现)
| 先导新闻数 | avg_gain |
|---|---|
| 无先导 | +59.5% |
| 1条先导 | +48.8% |
| 2条先导 | +49.7% |
| 3+条先导 | +49.9% |
| 纯滞后(无先导) | +64.6% |
结论:
- 无先导新闻的波段收益最高(+59.5%)——先导新闻不但不预测大涨,反而抑制收益(有先导49.8% vs 无先导59.5%)
- 纯滞后(新闻只在涨后报道)的波段收益最高(+64.6%)——再次证明"新闻是涨的结果"
- 先导新闻越多,收益略降——新闻密集=高关注=拥挤交易,推高后回落
§24.3 消息面不能作选股因子的三重铁证
- §23:有新闻/无新闻收益无差异(全量数据)
- §23:利好/利空情绪无显著差异
- §24:先导新闻反而降低收益——"没新闻盯上的票涨得更猛"
§24.4 这解释了 v_weak 为什么用技术面能赚钱
v_weak 用"深超跌+缩量+收阳"选的是没被新闻盯上的超跌票(低关注度、无先导新闻、非拥挤交易),这些票反弹空间大。新闻先导的票是高关注拥挤交易,容易冲高回落。技术面避开"新闻拥挤度",正是 v_weak 的优势来源。