- 新增 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 文档中心(策略研究章节)
18 KiB
MoFin 策略研究方法论总纲
唯一权威的方法论文档。所有策略研究必须遵循本文档的流程与铁律。 最后更新:2026-08-09(老莫要求从头整理,梳理清楚)
🔴 零、铁律(每一步必须自检,违反即重做)
2026-08-09 老莫怒斥后立规。以下规则无例外,任何一步研究推进前必须逐条自检。
铁律 0:禁止拍脑袋数值(最高优先级)
任何阈值、目标价、止损价、参数,禁止凭空设定或"乘以一个系数"。
- ❌ 禁止:
过去60日高点 × 0.9、固定 +15% 止盈、-10% 止损、RSI<45 拍脑袋 - ✅ 必须:每个数值注明来源(来自哪一步数据归纳/哪条规则/哪个结构点),写不出来源 = 该数值作废
- 自检:问自己"这个 0.9 / 15% / 45 是怎么来的?有数据证据吗?"——答不出 = 不能进代码
铁律 1:支撑/压力位必须用科学方法计算
支撑位、压力位、入场区间、出场区间,全部基于技术分析结构,禁止用固定窗口/固定百分比。
- 可用的科学方法(老莫指定):
- 筹码密集区上下沿(成交密集的价格区间 = 强支撑/强压力)
- 均线系统(MA20/MA60/MA120,股价与均线的相对位置、均线多空排列)
- 通道上下沿(趋势通道的边界)
- 前高/前低(结构点,突破/跌破才有意义,不是"最近20日最高/最低")
- 强弱判断:强支撑 = 多方法共振(筹码密集+均线+前低都在这附近);弱支撑 = 单一方法孤立点
- 自检:每个支撑/压力位,能否说出"这是筹码密集区上沿 / MA60 / 前高结构点"?说不出 = 重算
铁律 2:RR(风险回报比)必须基于科学支撑压力
RR = (压力位 - 入场价) / (入场价 - 支撑位),压力位/支撑位必须来自铁律1的科学计算。
- ❌ 禁止:
target = 未来高点(前视)、target = 过去高点×0.9(拍脑袋) - ✅ 必须:目标价 = 上方第一个强压力位(筹码密集上沿/均线/前高结构点);止损价 = 下方第一个强支撑位(筹码密集下沿/均线/前低结构点)
- 无科学支撑压力的信号 = 不交易(RR 无法计算 = 仓位无法确定 = 不做)
铁律 1b:科学支撑压力计算规范(落地公式,2026-08-09 明确)
四个关键点位 = 枢轴点系统(Pivot Points,经典技术分析方法)+ 筹码密集区
① 枢轴点系统(四点位:强支撑S2/弱支撑S1/弱压力R1/强压力R2) 基于当日(或回看窗口)最高H、最低L、收盘C:
PP = (H + L + C) / 3 # 枢轴点
S1 = 2×PP - H # 弱支撑
R1 = 2×PP - L # 弱压力
R2 = PP + (PP - S1) # 强压力(= PP + 有效区间)
S2 = PP - (PP - S1) # 强支撑(= PP - 有效区间)
- effective_range(有效区间) = max(当日波幅, 多日平均波幅, 价格×5%);高位/低位运行扩大到 8%
- 用途:S1/S2 = 下方两级支撑(破 S1 减仓、破 S2 清仓);R1/R2 = 上方两级压力(到 R1 减仓、到 R2 清仓)
- 这是有学术/实践意义的经典方法(源自期货日内交易 Pivot 技术,MoFin
calc_support_resistance即此实现)
② 筹码密集区(MoFin calc_chip_sr 实现)
- 从日线 K 线(640 日 qfq 前复权)构建筹码分布:每根 K 线成交量按 OHLC 区间均匀分配(约5档),每日衰减 0.97
- 2% 区间聚合:价格按 2% 步长分桶,累加成交量
- 支撑 = 当前价下方成交量最大的密集区桶上沿;阻力 = 当前价上方成交量最大的密集区桶下沿
- 用途:中长线支撑/压力参考(价下最大量=支撑/价上最大量=阻力)
③ 强弱判断(共振 = 强,孤立 = 弱)
- 强支撑/强压力 = 多方法共振:枢轴 S2/R2 + 筹码密集区 + 均线(MA20/60/120)+ 前高/前低结构点,两个以上落在同一区域
- 弱支撑/弱压力 = 单一方法孤立点(如只有枢轴 S1,无筹码/均线/结构配合)
- 实证:距前低<5% 的票(近支撑)avg +10.93%/wr70%;距前低>10% 的票(无支撑)avg 崩至+4%以下(MoFin §17)
④ RR 取位规则
- 压力位 = 最近的上方强压力(优先 R2/筹码阻力,其次 R1);支撑位 = 最近的下方强支撑(优先 S2/筹码支撑,其次 S1)
- RR = (压力位 - 入场价) / (入场价 - 支撑位),RR < 1.5 不交易
- 深超跌票(下方无可靠技术支撑)→ 止损用固定规则(数据归纳),不硬套支撑位
⑤ 止损止盈必须预留余量(2026-08-09 老莫补充,防洗盘/假触及)
- 止损:不设在支撑位本身,设在支撑位下方 × 缓冲余量——主力可能蓄意击穿支撑洗盘,机械止损会被洗出去
- 止盈:不设在压力位本身,设在压力位附近/下方留余量——价格可能在到达压力位之前就下跌,或只瞬间触及就迅速回落
- 余量大小必须数据验证:不同余量(0%/1%/2%/3%/5%)在历史信号上的收益/胜率/回撤对比,取数据最优者
- 禁止拍脑袋定余量(如"就 2% 吧")——必须跑余量敏感性测试
- 参考实证:弱支撑 S1 距入场仅 1.6% → wr 崩至 17.9%(太近,一买就被扫)——余量过小/支撑过近同样致命(MoFin §17.4)
铁律 3:入场/出场区间必须用结构点定义
- 入场:不是"回升3%就买",而是"价格到达支撑/压力结构确认点"(如回踩支撑企稳、突破压力确认)
- 出场:不是"涨15%卖",而是"价格到达上方压力结构点分批卖";止损不是"-10%",而是"跌破下方支撑结构点"
- 每次重评:价格触及结构点时,用 12 维重新评估(铁律的落地方式)
铁律 4:每一步推进前,先念一遍自检清单
开始任何计算/写代码/下结论前,逐条确认:
- 这个数值有数据来源吗?(不是拍脑袋)
- 支撑/压力位是筹码密集/均线/通道/结构点算的吗?(不是固定窗口)
- RR 用了科学支撑压力吗?(不是"未来高点"/"过去高点×系数")
- 入场/出场是结构点定义吗?(不是固定百分比)
- 有前视偏差吗?(未来数据禁止用于信号/参数/仓位)
- 结论经过全市场验证 + 负面剔除 + 去极端年了吗?
- 任何一条不过 → 停手,先修正再继续
铁律 5:违反后的处理
- 发现自己/脚本违反了铁律 → 立即停下,承认,重做该步骤
- 不掩盖、不将错就错、不用"约等于"糊弄
- 老莫的验收标准(年化≥13.2%)只有在全部铁律遵守的前提下才有意义
一、研究出发点(老莫定的)
- 唯一验收标准:策略实操年化 ≥ 大盘涨幅 + 10 个百分点
- 大盘基准(上证 2016-2026):年化 3.2%,累计 34.4%
- 达标线:年化 ≥ 13.2%
- 不达标 = 策略无价值,不做
- 研究要与 MoFin 实际应用整合:策略要能嵌入 MoFin 工作流(选股→入场→出场→重评)
- 验真证伪优先:先证明策略真实有效,再谈上线
二、MoFin 工作流程(策略嵌入的框架)
选股 → 入场(分仓,多次)→ 出场(分仓,多次)→ 每次重评
- 选股:全市场扫描 → 候选池(多维度评分排序)
- 入场:定入场区间(entry_low/entry_high),分批建仓,每次评估策略是否成立
- 出场:支撑位下方×缓冲止损(防洗盘)/ 压力位止盈,分批减仓
- 重评:每次价格触及关键位(支撑/压力)时重新评估,订立/修正策略
关键:策略不是"买入持有到固定时间",而是持仓期间持续重评。
三、12 维重评框架(核心工具)
3.1 定义:12维 = 3层级 × 4维度
| 消息面 | 基本面 | 技术面 | 资金面 | |
|---|---|---|---|---|
| 大盘 | 大盘新闻/情绪 | 宏观指标 | mkt_rsi / mkt_adx / mkt_ret1 | 两市成交量/北向 |
| 行业 | 行业新闻热度 | 行业景气 | sec_ret1 / sec_above / 行业动量 | 行业资金流 |
| 个股 | news3(3日新闻数)/ 情绪 | 市值/PE/PB | rsi / bias60 / bias20 / dist_lo20 / ret1 / limit_up / hi20_new / limit_n / 缩量 | flow5(5日资金流) |
落地因子(脚本已实现):mkt_rsi、mkt_adx、mkt_ret1、sec_ret1、sec_above、rsi、bias60、bias20、dist_lo20、flow5、news3、ret1、limit_up、hi20_new、limit_n、缩量shrink
3.2 用途一:由果及因挖因子(逆推法)
先找到真实大涨段(果)→ 12维全景画像(因)→ 找分层器 → 归纳因子组合 → 验证
| 步骤 | 内容 | 要点 |
|---|---|---|
| 1. 果 | 定义显著收益票 | 如60日≥p90,覆盖全市场,非单一年份 |
| 2. 因 | 12维全景画像 | 真实买点均值 vs 随机均值,找分层维度 |
| 3. 全市场筛 | 因子组合全市场重筛 | 验证不是样本内拟合 |
| 4. 负面剔除 | 筛集内亏损vs盈利对比 | 负面剔除 > 正面排序 |
| 5. 正负合并 | 剔除亏损共性 | 保留正因子 |
| 6. 稳健验证 | 去极端年+覆盖≥80月+正贡献≥7年 | 非过拟合 |
3.3 用途二:每个买卖点/信号的重评依据(老莫核心要求)
MoFin 工作流是"选股→入场→出场→每次重评",而重评的依据就是 12 维全景:
- 入场重评:信号出现时,不只是看触发条件,还要看 12 维是否共振(大盘状态 + 行业状态 + 个股各维度)
- 出场重评:价格触及支撑/压力时,用 12 维判断"该走该留"(大盘转弱?行业转弱?资金流出?)
- 信号分层:同一信号池内,用 12 维分位数区分强弱(如 dist_lo20、rsi 分位)
落地脚本:
mofin_12d_mining.py— 弱市日全市场 12 维因子档位 vs 随机基线(找分层器)mofin_12d_mining_v2.py— v2 补全基本面维度(PE/PB/市值分位,真实历史数据)mofin_12d_profile.py— 真实买卖点 × 12维画像(不预设规则,让数据归纳)
3.4 12维挖掘实证结论(弱市日全市场 2018-2026,300万样本)
口径:大盘<MA20 弱市日 + 全市场 A 股,未来60日收益 vs 随机基线(avg60=6.56%)
最强正向分层器(弱市选股 alpha):
| 维度 | 最佳档 | avg60 | 超额 |
|---|---|---|---|
| 市值分位 | 最小市值 | 13.13% | +6.57pp |
| 大盘RSI | 最低(恐慌) | 10.45% | +3.89pp |
| 5日资金流 | 中高(2-3档) | 9.46% | +2.90pp |
| PE_TTM分位 | 最低估值 | 9.03% | +2.48pp |
| PB分位 | 低(1档) | 8.32% | +1.77pp |
最强负面维度(弱市规避):
| 维度 | 最差档 | avg60 | 超额 |
|---|---|---|---|
| 市值分位 | 最大市值 | 2.65% | -3.90pp |
| PB分位 | 最高估值 | 2.72% | -3.84pp |
| 行业20日动量 | 最强 | 3.41% | -3.14pp |
| 当日涨停 | 涨停后 | 3.63% | -2.93pp |
| 距20日低点 | 最远 | 4.30% | -2.26pp |
核心结论(弱市策略铁律):
- 弱市选小盘低估(小市值+6.57pp、低PE+2.48pp、低PB+1.77pp)——与"弱市仓位管理>选股"互补
- 弱市不追高(大市值/高PB/强行业动量/涨停/20日新高全负)——做超跌低吸,不做强势
- 大盘恐慌日超额最高(RSI最低档+3.89pp)——对应 v_weak 的 ADX 甜区逻辑
- 资金流中高为正、极高为负(2-3档+2.9pp,4档-4.1pp)——资金流见顶后是出货
对 v_weak 的指导:六条件基础上叠加市值/估值过滤(排除大市值高PB票),聚焦小盘低估,弱市收益可提升。
禁止:
- ❌ 拍脑袋定指标再找数据验证(先射箭再画靶)
- ❌ 固定天数/数值/阈值(为什么是60不是50?)
- ❌ 单日特征识别买卖点(当天可能洗盘)
- ❌ 事后指标当信号(拉升当天资金流入=结果非原因)
四、验真证伪流程(必须遵守)
4.1 数据准备(第一步,必须做)
| 检查 | 方法 | 通过标准 |
|---|---|---|
| 除权/复权异常 | 剔除单日|ret|>25% | A股涨跌幅上限(主板±10%/创业板科创板±20%) |
| 停牌处理 | 缺失日期不参与 | 不产生假收益 |
| 复权一致性 | 全市场统一复权口径 | 无个别票暴跳 |
| 快照偏差 | 检查"当前市值/行业"是否用于历史 | 用历史或当日数据 |
4.2 信号验证
| 步骤 | 方法 | 铁律 |
|---|---|---|
| 1. 无前视 | 信号只用 t-1 及以前数据 | 月频用上月;快照不筛历史 |
| 2. 路径模拟 | 止损/止盈/时间退出 逐日模拟 | 面板fwd正收益≠可交易 |
| 3. 统一资金 | 资金约束+信号排队+逐日净值 | 单笔理想化年化≠真实 |
| 4. 生态检验 | 分年检查+去极端年 | 当前生态正,旧生态可接受 |
| 5. WFO | IS优化→OOS验证→滚动 | OOS是IS"打折仍认得出" |
4.3 四大陷阱(回测膨胀根源)
- 过拟合:反复调参记住噪声 → 用 WFO 验证流程,不扫描找最优
- 前视偏差:shift错/收盘后数据/快照 → 严格 t-1
- 选择偏差:只展示最好变体 → 展示全部(含失败)
- 制度盲区:特定环境测试好部署崩 → 生态检验
4.4 引擎验证(重要)
- 自建模拟引擎必须先验证:用 MoFin 已验证策略(如 v_weak 年化15-16.7%)做基准测试
- 引擎跑不出接近结果 = 引擎有 bug,不能用于策略结论
- 未验证引擎的数字不可信
五、已确认的坑(勿重犯)
- pivot宽表shift/pct_change是行位移 → 停牌股假信号
- 幸存者样本(196个成功段)特征不可外推
- 面板fwd正收益≠可交易(必须路径模拟)
- 前视偏差:月频信号用t-1数据;快照(当前市值)不筛历史
- 信号定义必须用真实参数(v4误定义成深超跌的教训)
- 支撑/压力禁止固定窗口(筹码密集区/swing/通道/均线)
- 单笔理想化年化≠统一资金模拟(资金约束摊薄)
- 除权数据污染(|ret|>25%集中在2024-2026)——模拟前必须剔除
- 当前市值筛选历史信号=前视偏差
- 反复调参=过拟合,按 WFO 验证流程
六、MoFin 已验证的结论(可直接用)
弱市(MoFin 验证达标)
- 弱市无选股alpha,"仓位管理>选股"(§12)
- 等权6槽 > 任何分级仓位(§15)
- 每月限8信号 > 过滤/止损(§16)
- 深超跌票下方无可靠技术支撑,用固定止损(§18)
- 大盘ADX是弱市edge前提:甜区[25,30](§13)
v_weak(弱市策略,实盘 mr_scanner.py 在跑)
- 大盘:上证<MA20 + ADX∈[25,30]甜区
- 个股六条件:bias60∈[-35,-20) + RSI≤25 + 5日急跌≤-3% + 距前低<5% + 收阳 + 缩量
- 出场:固定-12%止损/+30%止盈/40日
- 仓位:等权6槽自然序 + 每月≤8信号
- 组合:年化15-16.7%/回撤19.4%(MoFin验证)
牛市方向(研究增量)
- 叙事龙头:上月新闻升温行业 + 行业市值Top25%龙头
- 关键:新闻升温≠主线,需行业动量确认(ret20>0)
- 出场:科学支撑压力(筹码密集区)
- 状态:引擎未验证,待 MoFin 引擎下验证达标(≥13.2%)
七、仓位管理(MoFin 实盘规则)
RR→仓位映射(MoFin 源码)
RR<1.5 → 不推荐
1.5~3 → 8%
3~5 → 12%
5+ → 15%
×成长系数0.85 → clamp[5,20](典型6-12%)
- 买入资格:RR≥2.0 + 现金预算内
- 换仓:现金不足时卖6维评分最差弱持仓
- 移动止损:止损只上不下
八、文档体系
| 文档 | 用途 |
|---|---|
| 本文档 | 方法论总纲(权威,铁律/流程/标准) |
| 研究日志 | 时间线事实记录(做了什么/发现/待办) |
| 策略现状 | 当前策略状态、达标情况、数据资产 |
| 脚本清单 | 脚本管理(保留/归档/删除) |
九、本次研究新结论(2026-08-10,数据驱动验证达标)
由果及因完整链路:大涨段(果)→ 12维预测因子扫描 → 三段分析 → 统一资金模拟。 全部阈值经数据扫描(step27-37),无拍脑袋。
9.1 预测性信号(事前可计算,核心成果)
弱市+小市值+低PE+新闻+行业跌+深跌:
大盘RSI < 50(弱市/恐慌)
+ 市值分位 < 0.2(小市值)
+ PE分位 < 0.2(低估值)
+ 新闻数 ≥ 1(消息面)
+ 行业20日动量 < 0(行业弱)
+ 个股bias60 < -20(深度超跌)
+ 大盘距60日高点回撤 ≤ -5%(非高位/牛市)
- 大涨率 10-11.6%(全市场基线 3.52% 的 3.4 倍)
- avg60 14.6-18.2%、胜率 68-74%(单信号)
- 预测力随因子叠加单调提升(3.52→6.96→9.41→11.61)
9.2 关键数据发现(打破直觉)
- 牛市强者恒强不可交易:追涨信号(行业强+龙头+前60涨)avg60 为负(-0.3~-2.1%)——强者恒强是"结果"不是"可预测入场信号"
- 超跌策略需大盘门控:大盘RSI<50时 avg16-18%,>60时衰减到 5.9%
- 大盘深跌末期信号最强:大盘回撤15-20%时 avg60 31.2%、胜率93.8%
- 支撑压力保护兑现收益:裸持有5.13% → 支撑保护9.63% → 阶段过滤14.75%
9.3 最终策略(统一资金模拟验证)
- 入场:信号日收盘买(step30验证最优)
- 止损:科学支撑位(枢轴S2/筹码支撑)下方5%缓冲(step34验证)
- 止盈:压力位(枢轴R2/筹码阻力)分批卖(step34验证)
- 兜底:40日持有(step30验证)
- 资金:10槽 + 15%仓位(step35参数扫描)
- 结果:年化 14.75%(达标≥13.2%)、胜率90.3%、单笔+16.39%、总收益329.5%
- 待改进:回撤-36.4%偏大、2019年-6%亏损年