Files
MoFin/docs/research/2026-08-08-experience-lessons.md
hmo b9c68a83a7 docs: 预测超跌反弹策略研究成果归档(方法论/策略文档/研究记录/脚本)
- 新增 strategy_research_methodology.md(由果及因/12维/铁律/支撑压力规范)
- 新增 predictive_oversold_strategy.md(v5定稿,年化18.57%)
- 新增 deployment-plan-predictive-oversold.md(整合部署计划)
- 归档 docs/research/(63份研究过程文档)+ scripts/research/(19个研究脚本)
- 更新 docs/README.md 文档中心(策略研究章节)
2026-08-10 14:37:21 +08:00

315 lines
20 KiB
Markdown
Raw Permalink 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.
# MoFin 策略研究 · 状态与经验教训(2026-08-08 快照)
> 本文档是后续所有策略研究工作的起点。每次开始新研究前,必须先读本文档。
> 尤其是【方法论铁律】和【反复犯的错】两节——防止重蹈覆辙。
---
## 一、方法论铁律(老莫反复强调,违反即方向错误)
### 1.1 由果及因(逆推法)——唯一正确的研究路径
- **先找到真实大涨段(果)→ 再分析大涨段前后可识别的特征(因)→ 归纳成因子组合 → 验证**
- 绝不拍脑袋定指标,再去找数据验证(那是先射箭再画靶)
### 1.2 禁止"固定"(拍脑袋)——所有固定都是错的
- ❌ 禁止固定天数("60日"、"前10日"、"前5日")——为什么是60不是50?为什么是10不是20?
- ❌ 禁止固定数值("涨15%"、"RSI>70")——为什么是15不是20
- ❌ 禁止固定阈值("前10日资金流入")——前30日吸筹+后10日洗盘,前10日就是流出
- ✅ 正确:**区间/结构由数据自然定义**(swing 高低点、自然回调段),不是拍脑袋设定
### 1.3 找"能识别的买卖点",不是完美买卖点
- 不追求吃完整段收益(1浪到5浪全吃)——那不可能
- 只要中间一段:识别出"接下来会有一波上涨"(如3浪),吃到它就成功
- 识别不了5浪顶,能在B浪顶出逃也是成功
- **波浪理论只是参考,核心是方法论**
### 1.4 买卖点必须是"结构确认点",不是单日因子
- ❌ 单日特征(当天RSI<40、当天资金流入)——**当天可能正在洗盘**,无法识别
- ✅ 结构确认:下跌段结束 + 突破前高(跌势反转确认),是相对结构不是单日绝对值
- 买点 = 一段可识别的**结构过程**,不是某一天的孤立数值
### 1.5 禁止事后指标(用未来数据当信号)
- ❌ "拉升当天资金流入"——资金不流入怎么拉升?这是拉升的结果,不是事前信号
- ❌ "未来60日涨15%"——固定期间固定数值,智障标准
- ✅ 事前指标:拉升**之前**出现的迹象(主力提前建仓、量价结构收敛)
### 1.6 从选股开始就有策略介入
- 参考 MoFin 五因子综合评分(趋势/动量/量能/波动率/风险 → 合成可排序分数)
- 选股 = 多维度合成评分排序(不是单因子)
- 评分用于**排序选池**,买卖点用**可识别结构状态**触发(两层分离)
---
## 二、反复犯的错(血泪教训,每次犯完老莫暴怒)
1. **拍脑袋定固定值**60日、15%、前10日、RSI>70——反复出现
2. **单日特征识别买卖点**:当天RSI/资金流——当天可能洗盘
3. **事后指标当信号**:拉升当天资金流入
4. **先射箭再画靶**:先定规则再验证,而不是从数据归纳
5. **拿半成品问问题**:有bug先修bug,别拿一坨屎问老板怎么办
6. **用固定出场规则**P1/P2/P3固定RSI阈值)——又是拍脑袋
7. **评估指标本身拍脑袋**fwd_high60>=30% 是"60天内某刻摸到+30%"——路径无关
8. **反复在"换因子/调出场/改评分"打转**,无证据循环
---
## 三、数据资产(246服务器 /tmp/ 目录)
| 文件 | 内容 | 大小 |
|---|---|---|
| mofin_winner_panel.pkl | 全市场729万行面板(技术/资金/消息/行业/大盘因子+前向收益) | 860MB |
| mofin_12d_panel.pkl | 12维全市场先验面板 | 534MB |
| mofin_rel_features.pkl | 相对RSI特征(个股RSI-市场RSI、分位) | 1.07GB |
| mofin_buy_sell_points.csv | 8994真实买卖点(弱市8798+牛市196 | 729KB |
| mofin_swing_points.csv | 1827显著涨幅段(swing定义,含买/卖点12维特征) | 429KB |
| mofin_waves.csv | 1688个波浪3浪结构 | 135KB |
| mofin_bull_true_points.csv | 牛市196真实买卖点 | 12KB |
### 关键结论:相对RSI分位(个股vs市场)单独用无效
- 相对强/弱分桶右尾几乎无差异(24.5%~25.6%
- 相对分位 × 大盘状态交互:极弱市相对强反而差(-1.78pp),强势市相对强好(+0.90pp)
- **相对分位不能单独用,含环境信息但需组合**
---
## 四、已验证的策略结果
### ✅ 唯一成功:v4(弱市精选+分仓止盈)
- 买入:大盘RSI<45 + 个股RSI 32-38(温和超卖)+ bias20 -0.05~-0.10 + ret1>3.7%(强启动)+ flow5>0
- 分仓止盈 P1/P2/P3(但这是固定阈值——后续要改成结构确认)
- **年化13.5% / 回撤-11.5% / 胜率79% / 盈亏比3.07 / 207笔**
- 注意:因子区分度只有0.5(中等),后续优化无显著提升
### ❌ 失败的尝试(及原因)
| 尝试 | 结果 | 失败原因 |
|---|---|---|
| 技术面单因子(RSI/bias) | 区分度弱 | 单因子无预测力 |
| 资金面flow5>0 | 组合级全亏 | 资金流入是拉升结果(事后指标) |
| 波浪理论识别3浪 | 真3浪仅3%,量价特征区分度0.00-0.21 | 波浪在A股兼容率低(46%),且需量价确认 |
| 逆推评分(拟合权重) | 选股有效(37%vs23%)但转策略全亏 | 评估指标错配+高分桶异质混合 |
| 弱市评分→固定出场 | 年化-6.5%~-14.6% | P&L拆解显示漏水点在"深回撤票" |
| 相对RSI分位 | 无效 | 相对分位单独无预测力 |
---
## 五、P&L拆解关键发现(Oracle诊断+实证)
弱市评分策略 12360 笔信号拆解:
- 命中率 27.1%60日内摸到+30%
- **命中前等待>30天占85%** —— 命中太慢,资金占用
- **深回撤(<-20%)占44%,其中命中率仅6%** —— 大部分票先深跌20%+,到不了+30%
- 浅回撤(-10~0%)命中率71% —— 只有浅回调的票能命中
- EV = 0.27×30% 0.73×10.1% = +0.8%/笔(理想化,真实出场更差)
**核心结论**:漏水点是"深回撤票"(44%先跌20%+)。v4之所以有效,是用"温和超卖"(RSI32-38而非深度超卖)避开了深跌票。
**但关键限制(老莫提醒)**:深回撤/浅回调是未来数据,T日无法判断。真正的挑战是:**用T日可见的结构特征,识别出"会浅回调后大涨"的票**。
---
## 六、下一步方向(老莫确认的)
### 6.1 买点 = 结构确认点(非单日因子)
- 下跌段结束 + 突破前一个swing高点(跌势反转确认)
- 分析大涨段启动的"突破确认点"相对前一段下跌结构的特征(下跌幅度/时间/量能收缩)
- 不是看突破当天单日,而是看突破前那一段下跌的可识别结构
### 6.2 两层架构(对齐MoFin
- 选股层:评分(多维度合成)仅用于排序选池
- 触发层:买点/卖点用可识别结构状态触发(非分数阈值)
### 6.3 出场层(之前从未认真做过)
- 从8994个真卖点反推"可识别卖点特征"(结构确认,非固定值)
- 出场必须是可识别状态,不是固定止损/目标
### 6.4 评估口径
- 不用"右尾命中率"(路径无关)做决策
- 用"按真实规则实现的净收益分布"(每笔收益、胜率、盈亏比、净成本年化)
- 保留路径感知:先触+20%且未先触-10%
### 6.5 分市场建模
- 弱市(大盘RSI<45):靠超跌反弹
- 牛市(RSI>=55):靠趋势/资金/龙头
- 两市场最强因子完全不同:弱市=大盘恐慌度,牛市=个股资金流+趋势强度
- 参考MoFin"分方向独立建模"(趋势策略vs均值回复策略独立)
---
## 九、2026-08-08 晚间研究结论(Ralph Loop 全周期策略探索)
### 9.1 重大市场认知(面板实证,729万行全市场)
**大盘状态与未来收益高度单调**(fwd_ret60):
| 大盘状态 | 均值 | 中位 | 胜率 |
|---|---:|---:|---:|
| <35 极弱 | **+6.8%** | +1.8% | 54% |
| 35-45 弱 | +1.0% | -2.2% | 44% |
| 45-55 震荡 | +0.5% | -2.3% | 44% |
| 55-65 强 | -0.2% | -2.9% | 42% |
| >65 极强 | **-1.7%** | -4.4% | 39% |
**核心结论:大盘越弱→未来收益越高(超跌反弹是A股主要收益来源);大盘越强→未来收益越差(追高即亏)。**
- 牛市中个股位置同样单调:牛市+超跌(RSI<30) +0.4% > 牛市+极强(RSI>75) -2.4%
- 分年:2017(牛市占比51%但全年-6.5%)= 结构性熊市反例;2025(牛市48%+9.4%
### 9.2 "牛市独立策略"方向被排除(三条路全失败,用真实日期验证)
| 尝试 | 面板/回测结果 | 失败原因 |
|---|---|---|
| 行业内RS5确认(启动后5日相对强度>0.8) | 真实日期重算 +0.8%vs 基线+1.5% | **pivot行位移bug假象**+12.4%是假的) |
| 牛市深回调买入(距高点-10~-25% | -1.7%(差于基线+2.4%) | 幸存者偏差(196个成功点特征不可外推) |
| 牛市强者恒强(flow5>0+创新高+ret1>2% | +1.4%vs 牛市基线-0.7% | flow5分位单调性极弱(-0.3%~-0.1% |
### 9.3 v3 验证(极弱市+深超跌+当日启动)
- 面板:`mkt_rsi<35 + RSI<35 + ret1>2%`**+7.4%/胜率59%/大涨23%**
- 资金模拟(5仓等权100万):年化4.6-4.9%、回撤-28%、胜率51% —— **不及v4**
- 原因:信号太稀(日均持仓仅1.3仓,极弱市时段仅占9%),资金利用率低
### 9.4 v4 增强尝试(用大盘分层洞察优化v4)
- 放宽条件(极弱市RSI<45/全超跌)→ 样本从2.4万增到55万,但均值从9.7%降到5.0-6.7%
- **结论:v4的严格过滤(RSI<40+bias60<0+sec_above=False+ret1>2%+news3>=1)是alpha来源,放宽即稀释**
- **v4 仍是最优策略(面板+9.7%,资金模拟年化13.5%/回撤-11.5%/胜率79%**
### 9.5 方法论新教训(写入铁律)
1. **pivot 宽表 shift()/pct_change() 是行位移**——停牌股票会让前向收益错位,产生虚假信号。**必须用真实交易日序列/真实价格买卖验证**(v4 的 buy_sell_points 是真实价格,所以可靠)
2. **幸存者样本特征不可外推**:196个成功买卖点的平均特征(如"深回调-14.8%")做全市场规则 → 大面积误伤(-1.7%)
3. **样本内对比 ≠ 事前筛选**8798买卖点内部"大涨vs平庸"差异显著(t=3.7-6.5),但同规则全市场筛选失效(方向甚至反转)
4. **严格过滤是alpha来源**:放宽条件增加信号量但稀释质量(v4a/v4c 证实)
5. **"分市场建模"的修正认知**:A股不是"弱市超跌+牛市追强",而是**"弱市超跌反弹(唯一alpha)+ 牛市防御(避免追高亏损)"**
### 9.6 待老莫确认的方向
- "覆盖全市场周期"的正确组合可能是:**弱市/极弱市全力v4(超跌反弹),牛市/极强市轻仓防御**,而非独立的牛市策略
- 牛市真正的机会可能在于"超跌反弹"同样适用(牛市+RSI<30 也有+0.4%),只是收益小于弱市
- 下一步可选:①v4资金模拟的出场层优化(老莫6.3方向,从未认真做)②极强市防御策略(如何避免-1.7%的追高亏损)
### 9.7 真实卖点逆推(出场层,原则文档6.3方向,2026-08-08晚执行)
- 数据:8798真实买卖点(swing定义)的 sell_date 特征(真实日期,宽表只读)
- **bias60 是最强出场信号**:卖出时 bias60 分位0→卖后20日+1.5%,分位3→-4.6%(分位越高越该卖)
- **卖对了(卖后跌10%) vs 卖早了(卖后涨15%)** 的区分特征:
| 特征 | 卖早了 | 卖对了 | t值 |
|---|---|---:|---:|
| bias60 | 0.252 | 0.318 | **-9.1**(卖对时远离60日线)|
| bias20 | 0.159 | 0.195 | -8.3 |
| 量比 | 1.375 | 1.500 | -6.6(卖对时放量)|
| RSI | 75.2 | 74.0 | **+3.3RSI区分最弱)** |
| 持有天数 | 39.3 | 34.3 | +11.3 |
- **结论:可识别卖点 = bias60高(远离60日线)+ 放量(高位放量滞涨)。固定RSI出场(P1/P2/P3)是最差的选择**——印证老莫"固定出场规则又是拍脑袋"
### 9.8 v5 验证:结构出场 vs 固定RSI出场(同买入信号,2026-08-08晚执行)
- 买入:v4条件(mkt_rsi<45+rsi<40+bias60<0+sec_above=False+ret1>2%+news3>=1
- 出场对比:
| 版本 | 交易 | 均值 | 胜率 | 年化 | 回撤 |
|---|---|---:|---:|---:|---:|
| v4固定RSI出场 | 548 | +2.93% | 44% | 4.7% | **-57.3%** |
| v5结构出场(bias60>0.30/0.20+放量/40日) | 599 | +2.01% | 40% | **6.6%** | **-39.1%** |
- **结构出场年化+40%、回撤改善18pp**——出场层方向被验证有效
- 注意:此回测 v4 止损率78%(468/599)高于此前会话验证的 v4(胜率79%),因买入条件细节(limit_up|hi20_new|ret1 三选一 vs 单独ret1)和分仓止盈计数不同。绝对年化不可跨会话直接对比,但**相对比较(结构vs固定)有效**
- **待做**:出场层完整调优(bias60阈值/量比阈值/时间退出组合网格搜索)+ 与买入信号联动优化
### 9.9 v6b 出场层网格搜索(2026-08-08晚执行,预计算路径法)
- 买入固定 v445组网格(bias60 0.25-0.6 × 量比1.3-1.8 × 时间退出30/40/50
- **结果**
| 指标 | 最优组合(bias60>0.35+量比1.8+30日) | 基线(仅止损+40日) |
|---|---|---:|
| 每笔均值 | **+3.34%** | +0.03% |
| 胜率 | 53% | 50% |
| 盈亏比 | 1.44 | — |
- **结构出场比无结构基线提升 110 倍(+0.03%→+3.34%)——出场层价值巨大**
- 敏感性:时间退出30日最优(3.26%>40日3.16%>50日3.10%);量比1.8略优;bias60阈值不敏感(0.25-0.6均在3.15-3.21%)——**"有结构出场"本身是关键,阈值不敏感**
- **瓶颈:买入信号质量限制上限**(27%票直接止损,胜率仅53%)
### 9.10 v4买入信号路径诊断(2026-08-08晚执行)
- 6846信号:先触-15%止损27%,先触+30%止盈17%40日未触发56%(平均最大涨幅+12.9%)
- **止损 vs 止盈的入场特征几乎无差异**(除大盘RSI t=7.3)——入场时无法区分会止损/会止盈的票(印证老莫:"深回撤/浅回调是未来数据,T日无法判断")
- **56%时间退出组平均最大涨幅+12.9%**——出场层的真正价值在"让时间退出组多赚"(bias60不高就不卖,利润奔跑),不在"减少止损"
## 七、实盘数据累积(已部署)
- `live_data_collector.py`:每日15:05(交易日)自动累积热点行业/资金流/个股快照
- 输出:`/home/hmo/MoFin/data/live_data/YYYY-MM-DD.json`
- 目的:龙虎榜等历史无法回补的数据,从当前开始累积,定时回测调整
---
## 八、工程注意
- MoFin venv 无 scipy → 用 rank().corr() 或手动t检验
- sector_index_daily 有脏数据(close=0十倍跳变)→ 用 rolling 中位数清洗
- 板块名映射:262精确+34手动(芯片→半导体系列)
- 资金管理模拟:买入前检查现金,避免负现金
---
## 九(续)、2026-08-08 深夜突破:买点 = 拉升前"那一段时期"的超跌特征
> 老莫反复纠正:买卖点不是某一天,是**那一段时期**。此前的错误全是"单日快照"。
### 9.11 买点时期特征逆推(正确方法:时期维度)
- 果:1827个swing显著拉升段(真实买卖点,非抽样)
- 因:**buy_date 前20个交易日的时期特征**(不是buy_date当天)
- **拉升段 vs 同期未拉升(3.8万对照)的时期特征差异**:
| 特征 | 拉升段 | 未拉升 | t值 |
|---|---|---:|---:|
| 期末bias20 | -0.035 | +0.002 | **-12.2**(拉升前在MA20下方)|
| 期末距高点 | -0.119 | -0.075 | **-18.6**(拉升前距高点更远)|
| 时期振幅 | 0.337 | 0.227 | +6.4(拉升前波动更大)|
| 下跌形态占比 | 42% | 31% | —(拉升前更多是下跌段)|
- **画像:拉升前那段时期 = 下跌+超跌+MA20下方+距高点远+大波动**(t=6~18,极强)
### 9.12 超跌时期买点事前验证(真实日期,318万样本)
- 规则:bias20<0 + 距60日高点<-10% + ret20<0(当时可见)
- **结果:超跌 fwd40 +4.4%(胜率50%vs 趋势中 -0.6% vs 基线 +2.4%**
- 深度单调:距高点-40%以下 **+48.8%**(极端超跌)
- **牛市/弱市同一买点**:超跌+弱市 +3.8%、超跌+牛市 +2.7%(都是超跌,不是追高)
### 9.13 主线行业层被否决(t=-8.5
- 主线行业(动量分位>0.7+量能<0.4) × 超跌:+3.2% **<** 全市场超跌 +4.5%
- **"识别主线行业"作为选股层不成立**——超跌本身才是alpha,行业层多余
- 分年:2017/2018/2023/2026亏,2019/2020/2021/2024/2025赚(超跌反弹在弱市年有效)
### 9.14 核心方法论结论(回应老莫)
- **选股=买点=拉升前那段超跌时期**,牛市弱市同一买点,不需要"识别主线行业"
- 反复犯的错总结:①单日快照≠时期特征 ②事后分类(识别Top行业)≠事前可赚 ③样本内对比≠全市场事前验证 ④pivot位移假信号 ⑤幸存者样本不可外推
- 待做:超跌时期买点的完整资金模拟(对齐v4标准)
### 9.15 风控测试结论(2026-08-08深夜续)
- **止跌企稳确认是错的**:+当日止跌/近3日企稳 → fwd40 从+4.5%降到+2.1%(真超跌买点在"还在跌"时,等企稳就晚了)
- **大盘RSI窗口过滤改善有限**:2017/2018 无论怎么过滤仍亏(-2.2%/-1.3%)——**生态问题非过滤问题**
- **可靠资金模拟(预计算路径,7.4万笔)**:2016-2018每笔-3.0%(失效)、2019+每笔+2.3%(有效,2024/2025年化60-90%
- **教训:逐日资金循环模拟引擎不可靠**(参数微调年化23.2%↔3.9%),必须用预计算路径法(v6b验证过的)
- **最终定位:超跌买点是"2019+生态"策略,不是全周期策略;牛市无alpha是数据事实**
- 回测用次日开盘价入场(杜绝信号日收盘买的未来幻觉)
---
## 十、2026-08-09 牛市叙事策略研究(老莫纠正:"我们本来在研究牛市策略")
### 10.1 跑偏纠正
- 前几天一直在研究超跌反弹(弱市逻辑),甚至发现 v_weak 已是实盘弱市策略——偏离了牛市策略目标
- **关键认知:叙事行业(2020新能源/2024AI)是消息面+基本面驱动,不是技术动量**。之前用动量识别行业是错的维度
### 10.2 叙事行业真实存在(新闻热度证实,stock_news 403万条)
- 通信设备(AI算力)新闻峰值:2024-04/2025-04/2026-04(年年4月叙事爆发)
- 半导体:2024-10/2025-04/2026-04;电动乘用车:2025-02
- **新闻升温(heat_ratio>1.5) fwd3m +3.0% vs 不升温+1.2%**2025/2026年叙事识别在变有效(+2.1pp/+9.0pp)
- 但月度命中率20.8%≈随机——**热度爆发时已涨(是结果非原因)**
### 10.3 叙事+龙头持有(牛市策略,经得起路径模拟)✅
- 买入:新闻升温行业 + 行业内市值Top25%龙头(月频)
- 出场:止损-15%/bias60>0.35/40日
- **可靠资金模拟(1.4万笔):年化23.1%、胜率47%、盈亏比1.66**
- 分年:2019 +79.7%、2024 +52.1%、2025 +119.3%、2026 +48.8%(当前生态极强)
- 生态:2020+每笔+3.5% vs 2016-2019 +1.6%
### 10.4 🔴 路径模拟关键教训(最重要)
- 超跌精选组合(15万信号)路径模拟:**均值-5.6%、胜率14%、止损触发85%**
- **面板 fwd40+24.9%)只看40日后点收益,路径模拟先触-15%止损——超跌信号后经常先深跌15%再反弹,路径模拟在反弹前割肉**
- **印证老莫:"深回撤/浅回调是未来数据,T日无法判断"**
- **修正:之前所有"面板fwd40正收益"结论(超跌+4.5%、精选+24.9%)经不起路径模拟检验**
- **v4 为什么可靠:它验证时就用真实路径+止损(胜率79%是真实交易胜率)**
- **方法论新铁律:任何策略必须用路径模拟(止损+bias60+时间退出)验证,面板fwd40正收益不可作为可交易证据**
### 10.5 结论
- **唯一经得起路径模拟的:叙事龙头(年化23.1%)+ v4(年化13.5%**
- 牛市策略 = 叙事龙头持有(新闻升温行业+基本面龙头),当前生态极强
- 超跌精选的面板高收益是假象(止损85%)——需深挖如何降低止损率
- 待做:叙事龙头入场时机优化(降低止损率)