Files
MoFin/docs/v_mr_strategy.md
T
xxm 293eef0d11 docs: 消息面分析最终结论——数据补全但无选股价值(§23)
- 4001只赢家波段股×相关时段, 401万条新闻全量补全
- 全量分析: 利好52.8%/利空49.5%/中性56.4%——无显著关联
- 之前248只子集的+126.5%是小样本噪音, 全量后消失
- 反向因果: 新闻是涨的结果不是驱动, 不能作选股因子
- 12维消息面定位: 数据可用但不可选股, 仅作辅助参考
2026-08-04 12:59:03 +08:00

629 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 参数是怎么定出来的(完整推导链)
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.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. 运行方式
```python
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% |
### 六步方法论推导链
1. **赢家**:弱市日60日≥+26.4%(p90) = 35,490信号/100月覆盖(每年都有,非2018独有)
2. **共同因子**:12维框架发现大盘ADX是分层器(ADX25-30 avg+4.89% vs 其他区间≈0);个股技术单独无区分(漏维度)
3. **全市场筛**:甜区+深超跌+RSI<30 → 7,254信号 avg+5.19%
4. **负面因子**:筛选集内亏损vs盈利对比 → 过深bias60(<-35)/RSI偏高(>25)/5日浅跌(r5f>-3) 是亏损共性
5. **正负合并**:三负全剔 → 2,651信号 avg+9.84%/wr66.1%
6. **调参**:出场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-0818个月阴跌),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→394avg+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-03RR维度验证)
> 老莫要求:①支撑太远不买(已落地§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 单边上界
**窗口化拉取算法**(用于定向补某时间段新闻):
1. offset = 窗口终点 + 1秒(排他上界,包含终点时刻)
2. 往回翻页(size=100 减少请求)
3. 当本页最后一条 publishTime < 窗口起点 → 停止
4. 过滤只保留 [起点, 终点] 区间内的新闻
5. 实测: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% | 基线 |
**关键发现**
1. **新闻情绪与波段收益几乎无关联**——利好52.8% vs 利空49.5% vs 中性56.4%,差异不显著
2. **之前"有新闻波段+126.5%"是小样本噪音**248只子集),全量后消失
3. **反向因果**:大涨的票更可能有新闻(新闻是结果不是驱动)
### §23.3 12维消息面最终定位
-**数据已补全**(消息面维度不再缺)
-**不能作为选股筛选因子**(无统计显著关联)
- ⚠️ **可作辅助参考/排除**:波段起点有重大负面公告(监管处罚/业绩暴雷)的谨慎——但数据验证排除信号也弱
### §23.4 方法论教训
- **小样本假象**248只子集的"新闻+大涨"关联在全量后消失——必须先全量再下结论
- **反向因果陷阱**:消息是涨的结果不是原因,不能用"涨得多的有新闻"反推"有新闻的会涨"
- **数据补全 ≠ 策略价值**:补了400万条新闻,证明消息面在波段选股上无稳定规律——这是有价值的研究结论(证明此路不通)