# 全市场潜力股挖掘系统

## 概述

全自动管道：盘中每15分钟采集全市场数据 → 检测异动 → 搜新闻分析 → 我判断 → 出推荐。

所有数据存入 `mofin.db`（SQLite），统一供 Dashboard 市场模块展示。

---

## 一、时序总览

```
交易日，每15分钟一轮，覆盖沪深A股+港股
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
上午：
 9:25  采集链（75秒）+ 我判断 + 推报告   ← A股集合竞价完毕+港股已交易1.5h
 9:40
 9:55
10:10
10:25
10:40
10:55
11:10
11:25
11:40  ⚡ A股休市，港股交易中
11:55  ⚡ 同上

下午：
13:05
13:20
13:35
13:50
14:05
14:20
14:35
14:50
15:05
15:20
15:35
15:50  ← 最后一轮（港股收市前10分钟）

每天21轮。12:10-12:55午休跳过。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

每轮流程（全部在一个cron内完成，~2-3分钟）：
  ① market_watch → 拉90个行业板块数据
  ② trend_detector → SQL检测17种信号
  ③ mofin_news → 搜新闻（原文入库）
  ④ 我（知微）→ 判断信号 → 更新候选池 → 推报告/紧急消息
```

---

## 二、数据采集（:43，no_agent）

### market_watch.py

拉同花顺90个行业板块，写入 `mofin.db`：

**market_snapshots**（每次一条）：
| 字段 | 说明 |
|------|------|
| timestamp | 采集时间 |
| source | ths / eastmoney |
| up_ratio | 上涨板块占比(%) |
| mood | bullish / neutral / bearish |

**sector_snapshots**（每条一个板块，关联 snapshot_id）：
| 字段 | 说明 |
|------|------|
| name | 板块名，如"半导体" |
| change_pct | 涨跌幅(%) |
| up_count / down_count | 上涨/下跌家数 |
| net_inflow | 资金净流入(亿) |
| lead_stock | 领涨股名 |
| lead_stock_change | 领涨股涨跌幅 |

---

## 三、趋势检测（:45，no_agent）

### trend_detector.py

读取最新 snapshot，检测17种信号，写入 `sector_signals` 表。

按5类维度划分：

**A. 资金流信号**

| 信号 | 逻辑 | 严重性 |
|------|------|--------|
| A1 资金异动 | 单次净流入/出 > 近10次均值 + 3σ | high(>5σ) / medium(3-5σ) |
| A2 持续资金流入 | 连续≥3次净流入且逐次递增 | low |
| A3 持续资金流出 | 连续≥3次净流出且逐次扩大 | low |
| A4 资金转向 | 净流入从正转负或负转正 | medium |

**B. 涨跌结构信号**

| 信号 | 逻辑 | 严重性 |
|------|------|--------|
| B1 涨跌比反转 | 上涨占比变化 > 30个百分点 | medium |
| B2 持续走强 | 连续≥3次涨幅排全市场前10 | low |
| B3 持续走弱 | 连续≥3次跌幅排全市场前10 | low |
| B4 普涨背离 | 涨 > 3% 但上涨家数 < 50% | medium |
| B5 极端分化 | 涨跌家数比 > 5:1 或 < 1:5 | medium |

**C. 领涨/成分股信号**

| 信号 | 逻辑 | 严重性 |
|------|------|--------|
| C1 领涨股更替 | 领涨股与前2次采集不同 | medium |
| C2 领涨股极端涨幅 | 领涨股单次涨跌幅 > 15% | medium |

**D. 趋势拐点信号**

| 信号 | 逻辑 | 严重性 |
|------|------|--------|
| D1 趋势反转(多→空) | 连续≥3次净流入后突然转流出 | high |
| D2 趋势反转(空→多) | 连续≥3次净流出后突然转入流 | high |
| D3 量价背离(涨) | 涨 > 2% 且资金净流出 > 均值2倍 | medium |
| D4 量价背离(跌) | 跌 > 2% 且资金净流入 > 均值2倍 | medium |

**E. 关联信号**

| 信号 | 逻辑 | 严重性 |
|------|------|--------|
| E1 板块轮动 | 前次TOP3全部跌出前10 | medium |
| E2 产业链联动 | 同产业链多板块同时触发A/B/D类 | low |
| E3 持仓关联 | 持仓股所在板块触发任何high信号 | high |

写入 `sector_signals` 时附带：
- related_stocks — 该板块的领涨股 + 成分股（从 stock_sectors 查）
- holdings_in_sector — 该板块中的持仓股（查 holdings 表）
- watchlist_in_sector — 该板块中的自选股（查 watchlist_stocks 表）

---

## 四、新闻采集（:48，no_agent）

### mofin_news.py

读取未处理 signal（每次1条），用 akshare 搜新闻：
- 搜索范围：领涨股 + 成分股 + 持仓股 + 自选股
- 去重后取前5篇，含标题 + 正文全文
- 写入 signal_news，标记「待知微判断」

**不做情感分析，不调LLM。** 新闻分析由知微在下一轮cron中完成。

| 字段 | 说明 |
|------|------|
| signal_id | 关联 sector_signals |
| overall_sentiment | 总体情感（利好/利空/中性） |
| summary | 汇总摘要 |
| key_articles | JSON [{title, sentiment, summary}] |
| searched_stocks | 本次搜了哪些股票 |

**节流规则：** 同一板块同一signal类型24小时内已有 → 跳过。无未处理 signals → 本轮跳过。

---

## 五、知微判断与决策（:00/:15/:30/:45，LLM cron）

盯盘 cron prompt 中包含信号处理逻辑。

### 5.1 处理流程

```
进入盯盘 cron 后：
────────────────────────────────────────
1. 读最近15分钟的 signal_news（高严重性优先）
   │
2. 逐条判断：
   │
   ├── severity=high 且 sentiment=利空
   │   → 检查持仓中是否有该板块个股
   │   → 有 → 推老爸（风险预警）
   │   → 无 → 记入待观察
   │
   ├── severity=high 且 sentiment=利好 且置信
   │   → 查腾讯API实时价
   │   → 判断入场条件是否成熟（现价在合理区间）
   │   ├── 可操作 → 给星级+策略 → 插入candidates
   │   │           → 同时加入 watchlist_stocks 表（自动入自选）
   │   │           → 推老爸（今日推荐）
   │   └── 需等待 → 标记待观察，记录入场条件
   │
   └── severity=medium/low
       → 累积，收盘汇总
   │
3. 照常做持仓/自选盯盘输出
   如果本轮有紧急推荐，单独推一条消息；盯盘报告里不加额外篇幅
```

### 5.2 推送给老爸的规则

只在以下情况才推：

| 情况 | 推送内容 | 渠道 |
|------|---------|------|
| 持仓股板块出现利空 | 风险预警+建议操作 | 立即推 |
| 发现高置信潜力股，现价在买入区内 | 推荐+星级+入场策略 | 立即推 |
| 常规盯盘报告 | 三段式600字以内 | 定时走cron |

### 5.3 自动加入自选

当确认一只新的潜力股（不在持仓且不在自选）时：
- 写入 candidates 表
- 同时 INSERT INTO watchlist_stocks
- 这样 Dashboard 自选模块和策略引擎都能看到

---

## 六、收盘后处理（16:00，LLM cron）

盘中每轮已经完成了判断和推送。16:00额外一轮主要是做**知识萃取**：
- 回顾当日所有 signals + 判断记录
- 提炼可复用的判断经验 → 写入 analyst-knowledge-log.md
- 供后续分析参考

---

## 七、数据库表

### 市场信号相关表

| 表 | 用途 | 关键字段 |
|----|------|---------|
| market_snapshots | 每次采集元信息 | id, timestamp, up_ratio, mood |
| sector_snapshots | 板块快照 | snapshot_id, name, change_pct, net_inflow |
| sector_signals | 检测到的异常信号 | type, sector, severity, related_stocks, processed |
| signal_news | 小果情报分析 | signal_id, overall_sentiment, summary, key_articles |
| candidates | 候选池 | code, zhiwei_star, promoted, dropped |
| candidate_score_history | 评分变更历史 | code, score, source, created_at |

### 自选自动写入

新确认的潜力股自动写入 `watchlist_stocks` 表，Dashboard 自选模块即时可见。

---

## 八、Dashboard 市场模块展示

mofin.db 中的所有数据直接在 Dashboard 上展示：

| Dashboard 页面 | 数据源 | 刷新频率 |
|---------------|--------|---------|
| 行业热点 | market_snapshots + sector_snapshots 最新一次 | 每15分 |
| 知微洞察 | signal_news（当日汇总） | 每15分 |
| 潜力股挖掘 | candidates（zhiwei_star 非空） | 实时 |
| 自选股 | watchlist_stocks | 实时 |
