新增:信号检测+小果情报处理全链路设计

This commit is contained in:
知微
2026-06-20 21:45:53 +08:00
parent 8cef092c74
commit 08852600c1
+136 -3
View File
@@ -139,7 +139,140 @@ curl -s --noproxy '*' "http://qt.gtimg.cn/q=sz002371"
---
## 四、完整数据流
## 四、实时信号检测与小果情报处理(新增)
### 4.1 概述
在每30分的 market_watch 数据采集之外,增加一条实时信号处理链路:
```
market_watch(每30分)→ mofin.db
trend_detectorno_agent,每30分)
│ SQL扫最新 snapshots → 发现异常信号
│ 定位领涨股/成分股/持仓股/自选股
│ 写入 sector_signals
小果情报处理(no_agent,每30分)
│ 读未处理 signals
│ curl 搜新闻(板块+个股+持仓+自选)
│ 调本地 LLM 逐篇分析情感
│ 写入 signal_news
知微(盘中即时 + 收盘汇总)
│ 读 signal_news → 判断真伪
│ 紧急利空 → 盘中推老爸
│ 确认利好 → 更新 candidates
│ 16:00 → 整合到每日推荐
```
### 4.2 trend_detector — 信号检测规则
```python
# 每次运行检测以下6类信号:
# 1. 资金异动:单次净流入 > 近20次均值 + 3σ
# 2. 涨跌比反转:上涨占比从 <30% 跳到 >70%
# 3. 领涨股更替:领涨股与前2次采集不同
# 4. 趋势拐点:连续N次净流入 → 突然转流出
# 5. 量价背离:板块涨但资金流出 / 跌但资金流入
# 6. 普涨背离:板块大涨但上涨家数 <50%
```
检测到信号后,收集以下信息写入 `sector_signals`
- signal_type, sector, severity (high/medium/low)
- related_stocks — 该板块的领涨股+成分股(从 stock_sectors 表查)
- holdings_in_sector — signal 板块中属于持仓的股票(查 holdings 表)
- watchlist_in_sector — signal 板块中属于自选的股票(查 watchlist_stocks 表)
- trigger_reason — 一句话触发原因
### 4.3 小果情报处理流程
trend_detector 完成后的下一步,由小果处理每一条未处理的 signal。
**第1步:搜新闻**
对小果来说,一条 signal 需要搜索的范围:
- 板块层面:搜"板块名 + 行业/政策/走势"
- 领涨股:本次 signal 的领涨股
- related_stocks 中的每一只
- holdings_in_sector 中的每一只(如有持仓股)
- watchlist_in_sector 中的每一只(如有自选股)
搜索方式:curl 调百度/新浪公开新闻源,取标题(不要求全文)。
**第2步:调小果本地 LLM 逐篇分析**
对每篇新闻标题,小果本地 LLM 做:
- 内容摘要(一段话,不限字数)
- 情感分类:利好 / 利空 / 中性
- 判断依据一句话
**第3步:汇总(所有文章处理完后)**
- 总体情感判断
- 一段简短的总结
写入 `signal_news` 表。
**第4步:交知微盘中判断**
signal_news 写入后,知微立即读取:
- severity=high + sentiment=利空 → 盘中即时推送给老爸
- 确认利好信号 → 更新 candidates(加候选或升星级)
- 不确定的 → 标记待观察,累积到16:00汇总
### 4.4 小果 LLM 调用设计
**模型:** Qwen3.6-27B-OptiQ-4bit192.168.1.122:18003
**每次调用内容:**
```
输入:同一 signal 的 3-5 条新闻标题
任务:逐条分析(摘要 + 情感) + 总体判断
```
**注意:** 该模型会先输出思考过程再输出 JSON。JSON 在回复末尾,需从 response 中提取最后的完整 JSON 对象(跳过 thinking process 部分)。
**节流规则:**
- 同一板块同一 signal 类型24小时内已有 signal_news 记录 → 跳过
- 每次只处理未 processed 的 signals
- 无未处理 signals → 本轮跳过
### 4.5 新增表结构
```sql
-- 信号表
CREATE TABLE IF NOT EXISTS sector_signals (
id INTEGER PRIMARY KEY AUTOINCREMENT,
signal_type TEXT NOT NULL,
sector TEXT NOT NULL,
severity TEXT DEFAULT 'medium',
related_stocks TEXT, -- JSON [{code, name, change_pct}]
holdings_in_sector TEXT, -- JSON,持仓股
watchlist_in_sector TEXT, -- JSON,自选股
trigger_reason TEXT,
snapshot_id INTEGER, -- 触发的 snapshot
processed INTEGER DEFAULT 0,
detected_at TEXT DEFAULT (datetime('now','localtime'))
);
-- 小果情报表
CREATE TABLE IF NOT EXISTS signal_news (
id INTEGER PRIMARY KEY AUTOINCREMENT,
signal_id INTEGER REFERENCES sector_signals(id),
sector TEXT NOT NULL,
overall_sentiment TEXT,
summary TEXT,
key_articles TEXT, -- JSON [{title, sentiment, summary, reason}]
searched_stocks TEXT, -- JSON,本次搜了哪些股
created_at TEXT DEFAULT (datetime('now','localtime'))
);
```
---
## 五、完整数据流
```
┌────────────────────────────────────────────────────────┐
@@ -169,7 +302,7 @@ curl -s --noproxy '*' "http://qt.gtimg.cn/q=sz002371"
---
## 、数据库表结构
## 、数据库表结构
### 核心表
@@ -201,7 +334,7 @@ ORDER BY c.zhiwei_star DESC NULLS LAST;
---
## 、与其他管道的关系
## 、与其他管道的关系
| 管道 | 时间 | 关系 |
|------|------|------|