Files
MoFin/docs/research/methodology.md
T

21 KiB
Raw Blame History

MoFin 策略研究方法论总纲

唯一权威的方法论文档。所有策略研究必须遵循本文档的流程与铁律。 最后更新:2026-08-09(老莫要求从头整理,梳理清楚)


🔴 零、铁律(每一步必须自检,违反即重做)

2026-08-09 老莫怒斥后立规。以下规则无例外,任何一步研究推进前必须逐条自检。

铁律 0:禁止拍脑袋数值(最高优先级)

任何阈值、目标价、止损价、参数,禁止凭空设定或"乘以一个系数"。

  • 禁止:过去60日高点 × 0.9固定 +15% 止盈-10% 止损RSI<45 拍脑袋
  • 必须:每个数值注明来源(来自哪一步数据归纳/哪条规则/哪个结构点),写不出来源 = 该数值作废
  • 自检:问自己"这个 0.9 / 15% / 45 是怎么来的?有数据证据吗?"——答不出 = 不能进代码

铁律 1:支撑/压力位必须用科学方法计算

支撑位、压力位、入场区间、出场区间,全部基于技术分析结构,禁止用固定窗口/固定百分比。

  • 可用的科学方法(老莫指定):
    1. 筹码密集区上下沿(成交密集的价格区间 = 强支撑/强压力)
    2. 均线系统MA20/MA60/MA120,股价与均线的相对位置、均线多空排列)
    3. 通道上下沿(趋势通道的边界)
    4. 前高/前低(结构点,突破/跌破才有意义,不是"最近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%)只有在全部铁律遵守的前提下才有意义

一、研究出发点(老莫定的)

  1. 唯一验收标准:策略实操年化 ≥ 大盘涨幅 + 10 个百分点
    • 大盘基准(上证 2016-2026):年化 3.2%,累计 34.4%
    • 达标线:年化 ≥ 13.2%
    • 不达标 = 策略无价值,不做
  2. 研究要与 MoFin 实际应用整合:策略要能嵌入 MoFin 工作流(选股→入场→出场→重评)
  3. 验真证伪优先:先证明策略真实有效,再谈上线

二、MoFin 工作流程(策略嵌入的框架)

选股 → 入场(分仓,多次)→ 出场(分仓,多次)→ 每次重评
  1. 选股:全市场扫描 → 候选池(多维度评分排序)
  2. 入场:定入场区间(entry_low/entry_high),分批建仓,每次评估策略是否成立
  3. 出场:支撑位下方×缓冲止损(防洗盘)/ 压力位止盈,分批减仓
  4. 重评:每次价格触及关键位(支撑/压力)时重新评估,订立/修正策略

关键:策略不是"买入持有到固定时间",而是持仓期间持续重评。

三、12 维重评框架(核心工具)

3.1 定义:12维 = 3层级 × 4维度

消息面 基本面 技术面 资金面
大盘 大盘新闻/情绪 宏观指标 mkt_rsi / mkt_adx / mkt_ret1 两市成交量/北向
行业 行业新闻热度 行业景气 sec_ret1 / sec_above / 行业动量 行业资金流
个股 news33日新闻数)/ 情绪 市值/PE/PB rsi / bias60 / bias20 / dist_lo20 / ret1 / limit_up / hi20_new / limit_n / 缩量 flow55日资金流)

落地因子(脚本已实现):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.pyv2 补全基本面维度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

核心结论(弱市策略铁律)

  1. 弱市选小盘低估(小市值+6.57pp、低PE+2.48pp、低PB+1.77pp)——与"弱市仓位管理>选股"互补
  2. 弱市不追高(大市值/高PB/强行业动量/涨停/20日新高全负)——做超跌低吸,不做强势
  3. 大盘恐慌日超额最高RSI最低档+3.89pp)——对应 v_weak 的 ADX 甜区逻辑
  4. 资金流中高为正、极高为负2-3档+2.9pp4档-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 四大陷阱(回测膨胀根源)

  1. 过拟合:反复调参记住噪声 → 用 WFO 验证流程,不扫描找最优
  2. 前视偏差:shift错/收盘后数据/快照 → 严格 t-1
  3. 选择偏差:只展示最好变体 → 展示全部(含失败)
  4. 制度盲区:特定环境测试好部署崩 → 生态检验

4.4 引擎验证(重要)

  • 自建模拟引擎必须先验证:用 MoFin 已验证策略(如 v_weak 年化15-16.7%)做基准测试
  • 引擎跑不出接近结果 = 引擎有 bug,不能用于策略结论
  • 未验证引擎的数字不可信

五、已确认的坑(勿重犯)

  1. pivot宽表shift/pct_change是行位移 → 停牌股假信号
  2. 幸存者样本(196个成功段)特征不可外推
  3. 面板fwd正收益≠可交易(必须路径模拟)
  4. 前视偏差:月频信号用t-1数据;快照(当前市值)不筛历史
  5. 信号定义必须用真实参数(v4误定义成深超跌的教训)
  6. 支撑/压力禁止固定窗口(筹码密集区/swing/通道/均线)
  7. 单笔理想化年化≠统一资金模拟(资金约束摊薄)
  8. 除权数据污染(|ret|>25%集中在2024-2026)——模拟前必须剔除
  9. 当前市值筛选历史信号=前视偏差
  10. 反复调参=过拟合,按 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 关键数据发现(打破直觉)

  1. 牛市强者恒强不可交易:追涨信号(行业强+龙头+前60涨)avg60 为负(-0.3~-2.1%)——强者恒强是"结果"不是"可预测入场信号"
  2. 超跌策略需大盘门控:大盘RSI<50时 avg16-18%>60时衰减到 5.9%
  3. 大盘深跌末期信号最强:大盘回撤15-20%时 avg60 31.2%、胜率93.8%
  4. 支撑压力保护兑现收益:裸持有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%亏损年

十、温区自适应方法论(2026-08-13 新增)

核心认知(来自量化文献+MoFin实证):没有任何策略能在所有市场环境通吃——每个策略有它的"适用温区"(市场状态),策略组合应按当前温区自动激活/休眠。

10.1 温区三态判定

  • trend_up(趋势市):above_ma20 + adx≥20——趋势策略(追涨/龙头识别)适用
  • choppy(震荡市):adx<20——均值回复策略(超跌反弹)适用
  • trend_down(下跌市):below_ma20 + adx≥20——深超跌/恐慌策略适用

滞回平滑(K=5:连续5天同温区才确认切换(数据选参:112周期/20.7天/无1天噪音),避免单日噪音误判。

10.2 温度(rsi 连续维度)

  • 温度分档panic(<35) / fear(35-45) / neutral(45-60) / greed(60-70) / euphoria(>70)
  • 仓位乘数:恐慌重仓(mr 1.5倍)、亢奋减仓(0.3倍)
  • 温区与温度互补:温区滞后(K=5确认)、温度实时(rsi连续量)

10.3 策略-温区对应(数据验证)

策略 适用温区 胜率 依据
v_weak choppy 55% 震荡市超跌确认
v_oversold trend_down 60% 下跌市深超跌
v_mr_sel trend_down 93% 精选小盘超跌
v_next4/v8.1 trend_up 63%/57% 趋势市追涨
s2_panic trend_down×恐慌 86% 极端恐慌买超跌
v_lurk_v3 choppy/trend_down 77%/71% 潜伏型

原则:策略全温区发信号(内部不留温区门控),适用温区由实测胜率动态决定strategy_regime_perf 表常态化更新),不是固定映射。

10.4 组合构建(温区自适应)

  • 单一策略是茧,多策略是翅膀:策略组合按当前温区自动激活/休眠
  • 分散化本质是低相关性:跨策略类型(趋势/均值回复/事件驱动)组合
  • 动态配置克制:温区切换才调权重,"少动就是多赚"
  • 失效预警(三振出局):滚动胜率 <40% 黄牌减半、<35% 橙牌1/4、<30% 红牌淘汰(权重0观察)

10.5 信号溯源

  • 每次推送记录:策略/版本/温区/原因(signal_ledger 表)
  • 多策略共振:同一股票24h内被多个激活策略推 → 标记"🔥多策略共振"(加关注)
  • 用途:日后评估"哪个策略在什么温区推了什么股票,效果如何"

10.6 落地文件

文件 功能
market_regime.py 三态判定(已有,回填10年)
regime_tracker.py 滞回平滑(K=5+ regime_cycles 周期记录
temp_band.py 温度分档 + 仓位乘数
regime_perf.py 策略-温区表现常态化记录
strategy_router.py 动态策略路由(strategy_weights.json
strategy_executor.py 温区策略调度器(按激活策略调度 scanner)
signal_ledger.py 信号溯源(推送记录+共振标记)

详见 SYSTEM_ARCHITECTURE.md 五.5 温区自适应系统(系统架构视角)。