# Skill: Strategy Recommendation 5 Levels(战略建议 5 档 + 触发条件)

> ADVICE 集成 §4.2 · Skill 沉淀第 3 章 · 把 `decision._strategy_recommendations`(多事件聚合版)+ `validation._infer_strategy`(单事件启发式版)的判断规则显式化。
> ⭐ **本文档顺手回应 D V1 反推的核心盲点**:"加速 vs 进入"分支边界(详见 §4)。

## 0. 目的

把"基于本周期主线评分 + 主驱动维度 → 给 CEO 一条战略建议"的判断规则显式化。

战略建议是 agent 最直接面向决策的输出 —— 直接对应外部评估([`ADVICE-INTEGRATION.md`](../../ADVICE-INTEGRATION.md))说的"③ 被信任、被使用吗" 的关键产物。

## 1. 5 档战略建议(按动作激进度排序)

| 档位 | 含义 | CEO 视角 | 投资视角 |
|---|---|---|---|
| **加速** | 已经在投入,继续扩大产能 | 维持高位订单,扩大产能投入 | 头寸顶配,可考虑加杠杆 |
| **进入** | 信号确认,启动 SKU 立项 | 立项启动,推进对应 SKU | 建仓 / 加仓 |
| **观察** | 信号不足,持续跟踪 | 不行动,继续监控 | 持仓,等明朗 |
| **等待** | 风险信号,等收敛 | 暂缓现有投入,等 1-2 周反转 | 减仓 / 暂停建仓 |
| **退出** | 风险持续,削减暴露 | 削减投入,转向 | 清仓 / 卖出 |

## 2. 当前触发条件(`decision._strategy_recommendations` · 多事件聚合版)

```python
if cur_sentiment >= 1.0 and any(d in _GROWTH_DIMS for d in top_dims):
    action = "加速"   # 高位 + 增长维度命中
elif cur_sentiment >= 0.5 and any(d in _READINESS_DIMS for d in top_dims):
    action = "进入"   # 中位 + 技术/产品就绪
elif cur_sentiment <= -1.0:
    action = "退出"   # 持续负分(≥ 2 周)
elif cur_sentiment <= -0.5 and _RISK_DIM in top_dims:
    action = "等待"   # 中度负 + 风险维度
else:
    action = "观察"   # 兜底
```

其中:
- `_GROWTH_DIMS = (市场空间, 商业模式)`
- `_READINESS_DIMS = (技术, 产品)`
- `_RISK_DIM = 风险`

代码位置:[`agent/satellite_agent/decision.py::_strategy_recommendations`](../satellite_agent/decision.py)。

## 3. 单事件简化版(`validation._infer_strategy`)

D V1 验证回路里需要"单事件 → strategy",但 `_strategy_recommendations` 要 cur_sent + delta + drivers 多事件聚合,单事件场景拿不到。所以 `validation.py` 用简化版启发式:

```python
def _infer_strategy(impact, dimensions):
    if impact == "中性" or not impact:
        return "观察"
    if impact == "削弱":
        return "等待"             # 单事件削弱不直接退出
    # 增强
    dims = set(dimensions)
    if "风险" in dims:
        return "等待"              # 混合信号
    if "市场空间" in dims or "商业模式" in dims:
        return "加速"              # 规模 / 模式落地
    if "技术" in dims or "产品" in dims:
        return "进入"              # 推 SKU 立项
    return "观察"                  # 兜底
```

代码位置:[`agent/satellite_agent/validation.py::_infer_strategy`](../satellite_agent/validation.py)。

## 4. ⭐ D V1 反推的盲点:加速 vs 进入分支边界

### 4.1 盲点描述

D V1 实测 10 条 sample 上,`strategy` 字段 `mismatch ×4`(40%),top-2 mismatch 模式都是"加速 vs 进入"误判:

| sample | agent 推 | gt | analyst note |
|---|---|---|---|
| v005 中移动牌照 | `进入` | `加速` | 牌照 = 商业模式落地,应该已经 mature 到加速档 |
| v007 政策长文 | `加速` | `进入` | 政策驱动是技术/产品就绪,不是已规模化 |
| v008 比亚迪量产 | `加速` | `加速` ✅ | 量产 = 市场空间,正确 |
| v012 FPGA 量产 | `加速` | `加速` ✅ | 量产 = 市场空间,正确 |

### 4.2 根因

当前启发式是 **"any 命中"**(任何一个增长维度命中就归 `加速`),但实际应该看**主导维度**:

- "牌照下发" → `商业模式` 单一主导 → `加速`
- "政策出台 + 推动技术 + 推动产品" → 多维度均匀触发,但**未规模化** → 应该 `进入` 而非 `加速`
- "比亚迪量产" → `市场空间`(车企量产 = 量产规模)+ `产品` → 主导是 `市场空间` → `加速`

### 4.3 改进建议(D V1.1 follow-up)

```python
# V1.1 设计草案
def _infer_strategy_v1_1(impact, dimensions, dim_weights=None):
    """加速 vs 进入分支按主导维度判, 而非 any 命中.

    dim_weights: dict[str, float]  各维度强度 (从 _top_drivers 拿)
                 单事件场景退化为均匀 1.0 (与 V1 等价)
    """
    if impact == "中性" or not impact:
        return "观察"
    if impact == "削弱":
        return "等待"
    dims = list(dimensions)
    weights = dim_weights or {d: 1.0 for d in dims}
    if "风险" in dims:
        return "等待"

    # 主导维度判断 (新): 按 weight 加权后比"增长维度"vs"就绪维度"
    growth_score = sum(weights.get(d, 0) for d in dims if d in ("市场空间", "商业模式"))
    readiness_score = sum(weights.get(d, 0) for d in dims if d in ("技术", "产品"))

    if growth_score > readiness_score and growth_score > 0:
        return "加速"
    if readiness_score > 0:
        return "进入"
    return "观察"
```

但 V1.1 需要 `dim_weights` 数据,单事件场景没这个数据(只有 `dimensions` 列表)。实际改进路径:
1. V1 暂保持现状,留 `strategy` mismatch 作"已知盲点"标注
2. D V2 接时序数据后,用历史 5 日板块涨跌幅做"加速 vs 进入"的真值校准
3. B follow-up:strategy 判断改成"主导维度强度 + 当前 sentiment 等级"二维矩阵

详细 V1.1 / V1.2 设计待 D V2 启动后再讨论。

### 4.4 V1.1 数量加权方案 — 已评估并否决(2026-06-04)

[`agent/docs/d-v1-1-assessment.md`](../docs/d-v1-1-assessment.md) 详细记录:
- V1 实测 strategy 4 个 mismatch 根因分类(v012 classifier 漏判 / v005-v007 政策类 / v008 量产类)
- V1.1 数量加权方案净增益 = 0(v005/v007 dims 仅 growth 无 readiness 抵消;v008 dims 仅 readiness 无 growth)
- 真改进路径在 D V2 接时序数据 + classifier 词典扩充,**不在 strategy 启发式层面**
- 当前 V1 60% baseline 锁定作回归保护(`tests/test_validation.py::test_run_validation_end_to_end_on_real_set` ≥ 0.50)

## 5. 与代码 / 测试的对应关系

| 触发条件 | 代码 | 测试 |
|---|---|---|
| 5 档判断主入口 | `decision._strategy_recommendations` | `test_decision.py::test_position_signal_directions_match_delta` |
| 单事件简化版 | `validation._infer_strategy` | `test_validation.py::test_infer_strategy_*`(6 个分支测试) |
| 主线评分输入 | `decision._thread_sentiment` | `test_decision.py::test_top_drivers_*` |
| top driver 维度反哺 | `decision._top_drivers` 输出 `dimensions` 字段 | 同上 |

## 6. WYHTB / Trigger 配合使用

5 档建议不是孤立的 ——它们与 [`wyhtb_writing_guide.md`](./wyhtb_writing_guide.md) 和 [`trigger_design_patterns.md`](./trigger_design_patterns.md) 配合形成完整的判断链:

```
事件流 → 主线评分 → 5 档建议 (本 skill)
                       │
                       ▼
                  WYHTB 条件清单
                  (operator 写"看牛/看熊必须成立的条件")
                       │
                       ▼
                  Trigger 触发器
                  (operator 设硬阈值, 命中即 alert)
                       │
                       ▼
                  反方矛盾 + 如何崩塌 段
                  (5 步语法 contradiction + falsification)
```

例:`加速` 档 + WYHTB bear 条件"市场空间 < N 亿" + sentiment_below trigger 阈值 -1.5 → 完整的"事前主动告警"机制。

## 7. 不构成投资建议

5 档触发条件 + 数值阈值(`1.0` / `0.5` / `-0.5` / `-1.0`)均为**示范规则**。Operator 应基于自己的产业研究经验校准:

- 不同主线可能需要不同阈值(芯片主线波动比终端主线大)
- 单事件 vs 多事件聚合的判断口径不同(本 skill 明示二者并存)
- D V1 反推的盲点("加速 vs 进入")当前是"已知工程缺陷",不应被用作真实投资决策依据

**不构成任何投资建议**。
