- 新增 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 文档中心(策略研究章节)
20 KiB
20 KiB
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 五因子综合评分(趋势/动量/量能/波动率/风险 → 合成可排序分数)
- 选股 = 多维度合成评分排序(不是单因子)
- 评分用于排序选池,买卖点用可识别结构状态触发(两层分离)
二、反复犯的错(血泪教训,每次犯完老莫暴怒)
- 拍脑袋定固定值:60日、15%、前10日、RSI>70——反复出现
- 单日特征识别买卖点:当天RSI/资金流——当天可能洗盘
- 事后指标当信号:拉升当天资金流入
- 先射箭再画靶:先定规则再验证,而不是从数据归纳
- 拿半成品问问题:有bug先修bug,别拿一坨屎问老板怎么办
- 用固定出场规则(P1/P2/P3固定RSI阈值)——又是拍脑袋
- 评估指标本身拍脑袋:fwd_high60>=30% 是"60天内某刻摸到+30%"——路径无关
- 反复在"换因子/调出场/改评分"打转,无证据循环
三、数据资产(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 方法论新教训(写入铁律)
- pivot 宽表 shift()/pct_change() 是行位移——停牌股票会让前向收益错位,产生虚假信号。必须用真实交易日序列/真实价格买卖验证(v4 的 buy_sell_points 是真实价格,所以可靠)
- 幸存者样本特征不可外推:196个成功买卖点的平均特征(如"深回调-14.8%")做全市场规则 → 大面积误伤(-1.7%)
- 样本内对比 ≠ 事前筛选:8798买卖点内部"大涨vs平庸"差异显著(t=3.7-6.5),但同规则全市场筛选失效(方向甚至反转)
- 严格过滤是alpha来源:放宽条件增加信号量但稀释质量(v4a/v4c 证实)
- "分市场建模"的修正认知: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.3(RSI区分最弱) 持有天数 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晚执行,预计算路径法)
- 买入固定 v4;45组网格(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%)——需深挖如何降低止损率
- 待做:叙事龙头入场时机优化(降低止损率)