Files
MoFin/docs/research/2026-08-08-experience-lessons.md
T
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

20 KiB
Raw Blame History

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%)——需深挖如何降低止损率
  • 待做:叙事龙头入场时机优化(降低止损率)