From 08852600c1e17fd3bdb42b7ca505bf47fcfe9b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Sat, 20 Jun 2026 21:45:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=BF=A1=E5=8F=B7?= =?UTF-8?q?=E6=A3=80=E6=B5=8B+=E5=B0=8F=E6=9E=9C=E6=83=85=E6=8A=A5?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=85=A8=E9=93=BE=E8=B7=AF=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/market-screening-pipeline.md | 139 +++++++++++++++++++++++++++++- 1 file changed, 136 insertions(+), 3 deletions(-) diff --git a/docs/market-screening-pipeline.md b/docs/market-screening-pipeline.md index 2fa2a57..bc9940a 100644 --- a/docs/market-screening-pipeline.md +++ b/docs/market-screening-pipeline.md @@ -139,7 +139,140 @@ curl -s --noproxy '*' "http://qt.gtimg.cn/q=sz002371" --- -## 四、完整数据流 +## 四、实时信号检测与小果情报处理(新增) + +### 4.1 概述 + +在每30分的 market_watch 数据采集之外,增加一条实时信号处理链路: + +``` +market_watch(每30分)→ mofin.db + │ + ▼ +trend_detector(no_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-4bit(192.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; --- -## 六、与其他管道的关系 +## 七、与其他管道的关系 | 管道 | 时间 | 关系 | |------|------|------|