# 全市场潜力股挖掘系统设计

## 目标

打破持仓和自选的局限，从全 A 股市场挖掘新投资标的，附带入场策略和动态星级评分。

## 整体架构（两层式）

```
市场数据(market.json)
    │ 每30分更新
    ▼
┌──────────────────────────────────────┐
│ 第一层：小果本地LLM · 高频低耗        │
│                                      │
│ 每轮1-2个板块，积少成多覆盖全市场       │
│ → 分析板块趋势                        │
│ → 筛选成分股                          │
│ → 给出初步评分+策略                   │
│ → 写入候选池(candidate_pool.json)     │
└──────────────────┬───────────────────┘
                   │
                   ▼
┌──────────────────────────────────────┐
│ 第二层：知微（主模型）· 低频高质       │
│                                      │
│ 每日收盘后                            │
│ → 读候选池                            │
│ → 用技术分析+策略引擎验证              │
│ → 确认星级(5/4.5/4/3.5/3)            │
│ → 输出最终推荐+推送                    │
│ → 已推荐的标记 promoted               │
└──────────────────────────────────────┘
```

## 候选池设计

### candidate_pool.json 结构

```json
{
  "last_updated": "2026-06-19 15:30",
  "total_candidates": 12,
  "sectors_analyzed_today": ["半导体", "消费电子", "汽车零部件"],
  "candidates": [
    {
      "code": "600000",
      "name": "XX股份",
      "sector": "半导体",
      "added_at": "2026-06-19 10:30",
      "last_updated": "2026-06-19 15:30",
      "num_observations": 3,
      "xiaoguo_score": 8.2,
      "xiaoguo_reason": "放量突破前高，板块龙头",
      "xiaoguo_strategy": {
        "entry_range": "18.5~19.2",
        "stop_loss": "17.5",
        "target": "22.0"
      },
      "score_history": [
        {"date": "2026-06-19 10:30", "score": 7.5},
        {"date": "2026-06-19 11:00", "score": 8.0},
        {"date": "2026-06-19 15:30", "score": 8.2}
      ],
      "zhiwei_star": null,
      "zhiwei_reviewed": false,
      "zhiwei_reviewed_at": null,
      "promoted": false,
      "promoted_at": null,
      "dropped": false,
      "drop_reason": null
    }
  ]
}
```

### 候选池治理规则

- 评分历程 >= 3 次且均分 < 5 → 自动淘汰
- 连续 3 次评分下降 → 标记预警，下轮淘汰
- 超过 7 天未评分 → 标记过期待重评
- 已 promoted（确认推荐）→ 保留供回顾，不重复推

## 第一层：小果筛选（no_agent 脚本）

### 文件：market_screener.py

**触发频率：** 每 60 分钟（跟随 market_watch 节奏，间隔一次执行）

**每轮流程：**

1. 读 market.json → 取行业板块涨幅排名
2. 选择本轮分析的板块：
   - 优先级：涨幅前 10 中「累计分析次数最少」的板块
   - 确保一周内覆盖所有活跃板块
   - 每轮分析 2 个板块
3. 对每个板块：
   a. `ak.stock_board_industry_cons_ths()` → 取成分股
   b. 基础过滤：涨幅 > 0、价格 3~100 元、有成交量
   c. 取前 5~8 只候选
   d. 调小果 LLM API 分析 → 返回评分+策略
4. 更新 candidate_pool.json（新增候选 + 刷新已有候选的评分）

**小果 LLM Prompt：**

```
你是一位A股市场分析助手。分析以下板块和个股，筛选潜力候选股。

板块：{sector_name}
板块涨幅：{change}%
上涨/总家数：{up_count}/{total_count}
资金净流入：{net_inflow}亿
领涨股：{lead_stock} +{lead_stock_change}%

成分股（涨幅前8）：
代码 | 名称 | 现价 | 涨跌幅 | 换手率
{a} | {b} | {c} | {d} | {e}

判断标准：
1. 板块是真强势还是短期反弹？看量价配合和领涨股持续性
2. 个股：量价配合好、趋势健康、不是单纯跟涨
3. 给出 1-10 分（7分以上才值得关注）

输出JSON：
{
  "sector_judgment": "强势|中性|弱势",
  "sector_reason": "一句话理由",
  "candidates": [
    {
      "code": "600xxx",
      "name": "名称",
      "score": 8.5,
      "reason": "选股理由含技术面特征",
      "entry_range": "18.5~19.2",
      "stop_loss": "17.5",
      "target": "22.0"
    }
  ]
}
```

**代码注意事项：**
- 小果 API 调用超时设 120s（27B 模型较慢）
- 调用失败时跳过该板块，下次重试
- 输出只写文件，不输出到 stdout（no_agent 静默模式）

## 第二层：知微精选（LLM cron）

**触发时间：** 每日 16:00（收盘后）

**流程：**
1. 读 candidate_pool.json → 取未 reviewed 且评分 >= 7 的候选
2. 对每个候选用我的技术分析工具验证
3. 综合打分 → 星级（5/4.5/4/3.5/3）
4. 输出最终 2-3 只推荐（含完整策略）
5. 写入 market.json 的 potential_stocks 字段
6. 标记 promoted

**星级标准：**
- 5.0：强趋势+板块强势+技术面完美+入场时机佳
- 4.5：趋势健康+板块向好+技术面良好+有安全边际
- 4.0：板块和个股都OK，但缺明确催化剂
- 3.5：有逻辑但需要等待更好入场点
- 3.0以下：不推荐

## 时序与 cron 设计

| 时间 | 组件 | 类型 | 频率 | 说明 |
|------|------|------|------|------|
| 9:00~15:30 | market_watch | no_agent | 每30分 | 已有，采集板块数据 |
| 9:30~15:30 | market_screener | no_agent | 每60分 | 新脚本，小果筛股 |
| 16:00 | 市场精选推荐 | LLM | 每日 | 新cron，我出最终推荐 |

## 文件清单

| 文件 | 类型 | 说明 |
|------|------|------|
| /home/hmo/web-dashboard/market_screener.py | 新脚本 | 小果筛选引擎 |
| /home/hmo/web-dashboard/data/candidate_pool.json | 新数据 | 候选池 |
| /home/hmo/web-dashboard/market_insight.py | 废弃 | 被替换 |
| /home/hmo/web-dashboard/inject_xiaoguo_insight.py | 保留 | 仍需要注入情感到market.json |

## 关联修改

1. market_insight.py 停用（cron 改为新脚本）
2. 新 cron job：市场精选推荐（LLM，16:00）
3. 小果筛选 cron：market_screener.py（no_agent，每60分）
