Files
MoFin/docs/decisions/2026-08-13-事项五-策略组合市场测温动态切换.md
T

152 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 事项五解决方案:策略组合 + 市场测温 + 动态切换
> 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 武器)+ 失效预警淘汰(三振出局)。