# 事项五解决方案:策略组合 + 市场测温 + 动态切换 > 2026-08-13 一次性落地。老莫指示:不分短期中期,全部立即完成。 --- ## 一、根因诊断(数据铁证) ### 1.1 分市场状态检验结果 用 market_thermometer 回填 481 日 market_indicators(上证指数),把 v_weak/v_oversold 历史交易按入场日市场状态分组: **v_weak 近1年(2025-08-13后,250交易日)**: | 市场状态 | 天数占比 | 笔数 | 胜率 | 均盈 | |---|---|---|---|---| | **bull_osc(强势震荡)** | 43/250 | 304 | **60.2%** | **+5.05%** | | bull_trend(牛市趋势) | 47/250 | 95 | 30.5% | -0.61% | | bear(熊市/下跌) | 111/250 | 223 | 28.3% | -1.88% | | neutral(中性) | 49/250 | 155 | 28.4% | -1.64% | **v_weak 全历史(2021+)**: | 市场状态 | 笔数 | 胜率 | 均盈 | |---|---|---|---| | bull_osc | 441 | **54.4%** | +4.18% | | bull_trend | 234 | 44.4% | +2.47% | | neutral | 356 | 44.1% | +1.78% | | bear | 370 | 37.8% | +0.48% | ### 1.2 核心结论 1. **v_weak 本质是"强势震荡市反弹策略"**(bull_osc 胜率 60%/54%),不是"熊市抄底策略"(bear 胜率仅 28%/38%) 2. **近1年 bear 占一半时间(111/250 天)**——v_weak 一半时间信号质量差,整体胜率被拉低到 39.3%(vs 10y 53.6%) 3. **当前市场 = bull_osc(强势震荡)**——正是 v_weak 最有效状态 4. **v_oversold 信号枯竭**:2026 仅 4 笔,结构性牛市下"值得抄底的超跌"消失 5. **失效预警实测**:v_weak 近90日胜率 **22.7% → 红牌淘汰**(701笔,盈亏比 1.70 尚可但胜率崩溃) ### 1.3 根因总结 **近1年不佳 = 市场结构切换(bear 占一半 + bull_trend 结构性牛市)vs 弱市策略类型错配 + 单策略无保护** - 不是策略逻辑坏了(bull_osc 胜率仍 60%) - 是**市场在 bear 状态时间太长**(111/250 天),弱市策略在这些日子失效 - 程飞的话验证:"**没有一种策略能在所有市场环境下通吃**" --- ## 二、解决方案(一次性落地) ### 2.1 市场测温机制(market_thermometer.py) **核心理念**(市场周期测温文/霍华德·马克斯):周期像钟摆无法预测,但可测温——不是预测拐点,是判断当前摆到哪。 **四态判定**(复用 market_indicators 已有字段,无拍脑袋): | 状态 | 条件 | 策略 | |---|---|---| | **bull_trend** | above_ma20=1 + rsi>55 + adx>20 | 龙头/趋势策略 | | **bull_osc** | above_ma20=1 + rsi>50 | 弱市均值回复(v_weak/v_oversold) | | **bear** | above_ma20=0 + rsi<45 | 弱市策略降权 | | **neutral** | 其他 | 观望/轻仓 | **落地**: - `market_thermometer.py`:回填 481 日 market_indicators + 四态判定 + 输出 market_state.json - cron:每日 16:50 跑(盘后) - 当前状态:**bull_osc(强势震荡)**(rsi 58.7 / above_ma20=1 / dd60 -2.5) ### 2.2 策略动态路由(strategy_router.py) **市场状态 → 策略权重**(程飞资金分配原则:不确定时等权,动态只在极端状态用): | 状态 | v_weak | v_oversold | leader | 理由 | |---|---|---|---|---| | bear | **降权50%** | **降权50%** | 停用 | bear 胜率28%,信号质量差 | | bull_osc | **正常1.0** | **正常1.0** | 停用 | bull_osc 胜率60%,最有效 | | bull_trend | **降权50%** | **降权50%** | **启用1.0** | bull_trend 适用龙头 | | neutral | 轻仓0.5 | 轻仓0.5 | 停用 | 观望 | **落地**: - `strategy_router.py`:读 market_state.json → 输出 strategy_weights.json - cron:每日 16:55 跑(测温后) ### 2.3 龙头识别策略(leader_scanner.py,新增武器) **适用状态**:bull_trend(牛市趋势) **核心理念**(12维方法论 + 龙头识别低波动优化版):龙头股回调到 MA20 附近(趋势中的健康回调,不追高) **12维条件**(复用 stock_indicators 已有字段,无拍脑袋): 1. 个股 close > MA20(趋势向上)→ dist_ma20 ∈ [-3%, +2%](回调到 MA20 附近) 2. RSI ∈ [45, 65](强势未超买) 3. 市值/流动性(mcap_q > 0.3,龙头非小盘) 4. 量能配合(vol_ratio > 0.8,非极度缩量) 5. 趋势共振(trend_aligned=1) 6. 行业强势(待接入 sector 数据) **落地**: - `leader_scanner.py`:bull_trend 状态扫描龙头回调买点,输出 leader_signals.json - 当前 bull_osc 状态不扫描(避免追高——测温决定策略) **注意**:这是初版框架,需 MoFin 引擎验证达标(年化≥13.2%)才正式上线。当前标记为"待验证"。 ### 2.4 失效预警机制(strategy_alert.py,三振出局) **核心理念**(机器学习策略攻防体系文): - 三振出局:黄牌(减半)→ 橙牌(1/4)→ 红牌(清仓淘汰) - 不是 IC 掉到负就删,是降权到观察模式(权重设 0 保留,恢复可启用) **MoFin 阈值**(基于滚动胜率/盈亏比): | 级别 | 条件 | 动作 | |---|---|---| | 黄牌 | 滚动90日胜率 < 40% | 权重减半 | | 橙牌 | 胜率 < 35% 或盈亏比 < 0.5 | 权重降1/4 | | 红牌 | 胜率 < 30% | 权重0(淘汰观察) | **落地**: - `strategy_alert.py`:监控 v_weak/v_oversold 滚动胜率/盈亏比,输出 strategy_alerts.json - cron:每周五 17:00 跑 - **实测**:v_weak 近90日胜率 22.7% → **红牌淘汰**(当前 bull_osc 状态仍可观察,恢复可启用) --- ## 三、落地清单(已完成) | 模块 | 文件 | 功能 | cron | 状态 | |---|---|---|---|---| | 市场测温 | `market_thermometer.py` | 四态判定+历史回填 | 每日16:50 | ✅ 跑通 | | 策略路由 | `strategy_router.py` | 状态→策略权重 | 每日16:55 | ✅ 跑通 | | 龙头识别 | `leader_scanner.py` | bull_trend 龙头回调 | (手动/待验证) | ✅ 框架 | | 失效预警 | `strategy_alert.py` | 三振出局 | 每周五17:00 | ✅ 跑通 | | 分市场检验 | `analyze_market_state2.py` | v_weak/v_oversold 分态胜率 | (一次性) | ✅ 完成 | --- ## 四、下一步(待验证/优化) 1. **leader_scanner 回测验证**:用 MoFin 引擎跑 bull_trend 日的龙头回调信号,验证年化≥13.2% 2. **v_weak 恢复观察**:当前红牌(22.7%胜率),但市场已转 bull_osc——每周失效预警自动重评,胜率回升至 40%+ 自动恢复权重 3. **v_oversold 信号恢复**:结构性牛市下信号枯竭,待市场转 bear/neutral 时恢复 4. **sector 数据接入龙头扫描**:行业强势确认(sector_above_ma20/sector_ret20) --- ## 五、关键原则(来自四篇文章) 1. **程飞(多策略组合)**:"单策略是茧,多策略是翅膀"——分散化本质是低相关性,不是数量 2. **程工(市场测温)**:"周期无法预测,但可测温"——不是预测拐点,是知道现在摆在哪 3. **因子挖掘框架**:"每个因子都有旱季雨季,没有任何因子能连续36个月保持正超额"——策略必须动态切换 4. **机器学习攻防**:"三振出局,不是IC掉到负就删"——降权观察,恢复可启用 5. **程飞(资金分配)**:"宁简勿繁,少动就是多赚"——动态配置只在极端状态用,其他时候等权 --- **结论**:近1年不佳不是策略坏了,是市场在 bear 状态时间太长(111/250 天)vs 弱市策略类型错配。解法 = 市场测温动态切换(bear 降权/bull_osc 正常/bull_trend 换龙头)+ 新增龙头策略(bull_trend 武器)+ 失效预警淘汰(三振出局)。 --- ## 六、测温机制定稿:三态骨架 + 温度(rsi)连续维度(2026-08-13 数据验证后修正) ### 6.1 三态 vs 四态对比(老莫提问,数据决定) **对比实验**:用 market_regime 回填 10 年(2016-2026,2319 条),按三态分组所有历史策略交易: | 策略 | trend_up | choppy | trend_down | 适用温区 | |---|---|---|---|---| | v_weak | 46% | **55%** | 47% | **choppy** | | v_oversold | 50% | 57% | **60%/+12.5%** | **trend_down** | | v_next4 | **63%/+13.6%** | - | - | **trend_up** | | v8.1 | **57%/+9.4%** | - | - | **trend_up** | | s2_panic | - | - | **86%/+16.6%** | **trend_down×恐慌** | | v_lurk_v3 | - | 77% | 71% | choppy/trend_down | | v_lurk_bull | 33%/-4.7% | 35%/-4.0% | - | 全失效(负收益)| **choppy 内部按 rsi 温度分组(决定性验证)**: | rsi 档 | v_weak 胜率 | 均盈 | |---|---|---| | 恐慌<45 | **71%** | +6.43% | | 中性45-60 | 46% | +1.74% | | 亢奋>60 | 37% | -0.16% | ### 6.2 结论:三态够用,温度是叠加的连续维度 1. **三态(trend_up/choppy/trend_down)= 策略类型分类**(用哪类策略)——market_regime.py 已有,回填 10 年完成 2. **温度(rsi 分档)= 力度维度**(仓位乘数,连续量)——不并入状态分类(四态会把 rsi 硬切成 50/55 拍脑袋阈值,丢失连续性斜坡:恐慌71%→中性46%→亢奋37%) 3. **废弃 market_thermometer 四态**(避免重复基建,数据纪律:统一 market_regime 三态) ### 6.3 策略-适用温度表(数据驱动固化,STRATEGY_TEMP 基础数据) | 策略 | 适用状态 | 温度档 | 数据依据 | |---|---|---|---| | v_weak | choppy | fear/neutral | 恐慌71% | | v_oversold | trend_down | panic/fear | 64-86% | | v_next4 | trend_up | greed/euphoria | 63% | | v8.1 | trend_up | - | 57% | | s2_panic | trend_down | panic | 86% | | v_lurk_v3 | choppy/trend_down | fear/neutral | 71-77% | **关键发现**:趋势市策略 v_next4/v8.1 已躺在历史列表(不需要新发明 leader_scanner),三态×已有策略 = 完整武器库。 ### 6.4 落地文件 | 文件 | 功能 | |---|---| | market_regime.py | 三态判定(已有,回填10年) | | temp_band.py | 温度分档 + 仓位乘数(panic/fear/neutral/greed/euphoria)| | strategy_router.py v2 | 三态选策略 + 温度乘数 → strategy_weights.json | | strategy_alert.py | 三振出局失效预警 | 当前:choppy×neutral → v_weak/v_lurk_v3 weight=0.8,v_next4/v8.1 观察。 --- ## 七、温区平滑与周期记录(2026-08-13 老莫补充设计) ### 7.1 设计原则(老莫定) 1. **策略内部不放温区门控因子**(v_next4 的 行业ADX>25 是反例,应去除)——让策略在所有温区都能发信号,才能测出全温区表现 2. **策略带"适用温区"属性**——记录温区测试结果,不是内部硬门控 3. **适用温区是动态的**——常态化测试,记录策略在不同温区随时间的变化 4. **系统监控温区变化、记录温区周期**——以温区周期为锚点,触发策略周期性评估 ### 7.2 平滑手段(数据选参) **问题**:日级 regime 切换太频繁(原始 457 周期/151个1天周期),无法直接作为评估锚点。 **方案**:滞回确认(hysteresis)——连续 K 天同温区才确认切换。 **数据选参**: | K(确认天数) | 周期数 | 平均长度 | 效果 | |---|---|---|---| | K=1(原始) | 457 | 5.1天 | 太碎,151个1天 | | K=3 | 177 | 13.1天 | 无1天,仍偏碎 | | **K=5** | **112** | **20.7天** | **甜区:无1天噪音,周期合理** | | K=10 | 49 | 47.3天 | 过度平滑,choppy 只剩391天 | **选 K=5**:滞后约5天(宁慢勿错),事后评估与实时判断统一口径。 ### 7.3 实时 vs 事后 - **实时温区**:K=5 滞回确认(滞后5天,确认才切换策略权重) - **温度(rsi)**:不滞后(连续量,实时反映恐慌/亢奋,用于仓位乘数) - **事后评估**:用 K=5 平滑后的周期做策略-温区归因 **温区与温度互补**:温区滞后、温度实时。例:当前平滑温区=trend_down(7/17起19天)但温度=neutral(rsi 58)——阴跌状态,v_oversold/s2_panic 主导(weight 0.8),v_weak 观察(0.24)。 ### 7.4 落地文件 | 文件 | 功能 | |---|---| | regime_tracker.py | 滞回平滑(K=5)+ 周期记录 regime_cycles 表 + 输出平滑温区 | | strategy_router.py v3 | 读平滑温区 + 温度 → strategy_weights.json | **cron 顺序**(每日):16:50 market_regime → 16:52 regime_tracker(平滑)→ 16:55 strategy_router(路由) --- ## 八、温区自适应全链路(2026-08-13 完整落地) ### 8.1 核心架构(老莫定) 组合组织不变(固定的组合/策略),但**组合内策略根据当前温区自动激活/休眠**,选股/买卖/重评各环节按温区过滤。 ### 8.2 策略-温区表现常态化记录(regime_perf.py) - 表 strategy_regime_perf(strategy × regime × 胜率/均盈/样本) - **全策略动态纳入**(老莫提醒:不漏历史策略,特定温区可能能打) - 发现被埋没的温区强者: - **v_mr_sel:trend_down 93%/+15.8%(129笔)**——比 v_oversold(60%)强得多 - **v7.3:trend_up 94%/+9.2%**、v6.2:82%、v6.0:71%、v9.2:72% - v_combo:trend_up 60%(实盘主力) ### 8.3 策略去门控(老莫原则) - **策略内部不放温区门控因子**——v_next4/v8.1 的 mkt_above_ma20/mkt_adx_min 是反例(只测了 trend_up 一个温区) - **scanner 层的温区门控是执行层合理设计**(mr_scanner 只在 trend_down/choppy 扫,v_next4 让位)——保留 - 策略全温区发信号 → 适用温区由实测动态决定(不是内部硬门控) ### 8.4 各环节接入 | 环节 | 文件 | 接入方式 | |---|---|---| | 选股 | mr_scanner / predictive_oversold_scanner | 温区判定升级为平滑温区(regime_gate),adx 仍读原始表(甜区门控)| | 买卖 | price_monitor | 温区感知:非激活策略的买入/加仓机会抑制(不进摘要),**风控(卖出/止盈)仍推** | | 重评 | strategy_lifecycle | market_regime 加载用平滑温区(regime_gate)→ timing_signal 合成反映温区 | | 路由 | strategy_router v5 | 动态策略库:当前温区实测胜率高者激活(>=50%门槛剔除全负策略)| | 前端 | research Tab | 温区横幅(平滑温区+温度档+rsi+激活策略)+ 成员卡温区徽章 | ### 8.5 验证结果 - **平滑温区 = trend_down**(7/17 起 19 天),**原始 market_regime = choppy**(8/11-8/12 两天)——平滑避免误判 - 激活策略(trend_down):s2_panic(86%)、v_mr_sel(93%)、v_oversold(60%)、v_mr4(63%)、v_mr(59%)、v_lurk_v3(77%) - 观察:v_weak(choppy 55%)、v_next4/v_combo(trend_up) - price_monitor 非激活策略买入机会抑制、风控仍推 ### 8.6 新增文件 | 文件 | 功能 | |---|---| | regime_gate.py | 温区门控共享工具(平滑温区 + 策略激活判断)| | regime_perf.py | 策略-温区表现常态化记录(全策略动态)| --- ## 九、知微日志审查发现的问题(2026-08-13 小小莫遗漏) > 老莫要求:从知微发来的沟通日志(XMPP)找问题,看我遗漏了什么。 ### 已修复 1. **agents_health_check.py 停摆 22+ 小时**(最严重,持续告警):系统 crontab 里该任务被删(AgentsMeeting 监控,非 MoFin 违规 cron)。**已恢复 crontab**(*/5,备份 /tmp/crontab_backup_health_20260813.txt)。 - 副作用:它检测到的 xmpp_bot_xxm/article_processor 端口关闭(服务本就停用,非本次问题) 2. **deploy_guard 反复回滚我的改动**(工作方式错误):我改完没立即 git commit,deploy_guard 15分钟回滚未提交改动。**已改正**:走 git 工作流(本地改→commit→push→246 pull)。 3. **多个新脚本未跟踪告警**(strategy_executor/regime_perf/market_thermometer/health_monitor_daily/daily_kline_collector/factor_engine/live_data_collector/step49_save):我 scp 到 246 没 git add 提交。已逐步补提交(strategy_executor/regime_perf 已提交)。 ### 待确认(未修) 4. **LLM 端点故障反复**:最近60分钟多次调用失败(opencode.ai 端点不可用),影响重评/健康检查。 5. **price_monitor 重评管道异常**:1022分未更新(可能 LLM 故障或逻辑卡住)。 6. **服务停用确认**:xmpp_bot_xxm/article_processor/wechat_fetcher 端口关闭——需确认是预期停用还是故障。 ### 教训(记录 .memory/error_library) - **改 246 代码必须走 git 工作流**(本地改→commit→push→246 pull),deploy_guard 回滚未提交改动 - **新脚本必须 git add 提交**,否则 deploy_guard 告警"未跟踪文件" - **处理系统 crontab 时别漏 AgentsMeeting 的监控任务**(agents_health_check 不是 MoFin 违规 cron)