📈 智能荐股系统(Stock Advisor)
一个专业的股票推荐与量化分析系统:多因子荐股评分 + RAG 增强 AI 研报 + 主流量化策略回测 + 舆情驱动自动化通知。
- 技术栈:Python Flask + SQLite + Chroma 向量库 + bge-large-zh 语义检索 + DeepSeek 大模型
- 默认端口:16095
- Git:
hz4th_coder/stock-advisor(v1.3.0) - 数据模式:当前为模拟数据(
IS_MOCK=True),后期可无缝切换真实数据
✨ 功能总览
| 模块 | 页面 | 说明 |
|---|---|---|
| 📊 仪表盘 | / |
三大指数、市场情绪、今日荐股 TOP5、行业热度、最新要闻、自选股 |
| 🏢 股票池 | /stocks |
68 只股票搜索/行业/板块/评级筛选,一键 ⭐ 自选 |
| 🎯 荐股中心 | /recommend |
六因子评分排名 + 推荐理由 + AI 深度分析入口 |
| ⏰ 自动化 | /automation |
双选项卡:舆情驱动自动化 + 持仓跟踪智能体(配置/持仓管理/目标管理/日志/报告) |
| 📈 量化策略 | /strategies |
6 主流策略全市场回测榜 + 单股净值曲线 + 交易明细 |
| 📰 财经新闻 | /news |
新闻分类/搜索/情感标签/关联个股,RAG 语料库 |
| 🏦 机构动向 | /institutions |
27 家机构、评级变动榜、基金增减持榜、机构详情 |
| 📄 个股详情 | /stock/<code> |
ECharts K线、技术指标、六因子评分、相关资讯、AI 研报、历史分析 |
| 📑 AI 分析详情 | /analysis/<id> |
研报正文 + 大模型参考的数据源(RAG新闻/概况/指标/评级/持仓/提示词) |
| 🧭 持仓跟踪报告 | /tracking |
产业链深度跟踪报告总览(⏰ 自动化页入口进入) |
| 🔧 系统设置 | /settings |
邮件 SMTP + 大模型接口配置 |
| ⚙️ 数据管理 | /admin |
数据统计、向量库状态、一键重灌、重建回测、定时报告手动触发与日志 |
🏗️ 技术架构
┌─────────────────────────────────────────────────────────┐
│ 前端(模板 + 原生JS + ECharts) │
│ 仪表盘 / 股票池 / 荐股 / 策略 / 新闻 / 机构 / 设置 / 详情 │
└──────────────────────────┬──────────────────────────────┘
│ HTTP (Flask)
┌──────────────────────────▼──────────────────────────────┐
│ app.py(路由/API 层) │
│ ┌──────────┬──────────┬──────────┬───────────────────┐ │
│ │ 评分荐股 │ AI研报 │ 量化回测 │ 舆情监控+设置 │ │
│ │scoring.py│analyst.py│strategies│notifier+settings │ │
│ └──────────┴──────────┴──────────┴───────────────────┘ │
│ indicators.py(技术指标) vector_store.py(向量REST) │
└───────────────┬──────────────────────────┬──────────────┘
│ │
┌──────────▼──────────┐ ┌──────────▼───────────────┐
│ SQLite (本地库) │ │ Chroma(16010) + bge(16011)│
│ stock_advisor.db │ │ 新闻索引/公司概况索引 │
└─────────────────────┘ └──────────────────────────┘
│
┌──────────▼──────────┐
│ DeepSeek (RAG研报) │ SMTP (舆情邮件通知)
└─────────────────────┘
- 向量库:纯 REST 直连(无 chromadb 客户端依赖),Embedding 用 bge-large-zh-v1.5(1024 维)
- 大模型:DeepSeek
deepseek-v4-flash(推理型,研报生成约 25-40 秒,后台线程 + 前端轮询) - 定时任务:舆情监控调度器(后台守护线程,默认 30 分钟一轮)
📂 目录结构
stock-advisor/
├── app.py # Flask 主应用(页面 + 全部 API)
├── config.py # 全局配置(端口/LLM/向量库/邮件/监控默认值)
├── database.py # SQLite 连接与表结构(13 张表)
├── settings.py # 设置管理器(settings 表 + 默认值合并)
├── seed_data.py # 模拟数据生成器(行情/新闻/机构/持仓 + 向量/回测构建)
├── start.sh # 启动/停止/重启/状态/重灌脚本
├── requirements.txt # 依赖:flask, requests
├── engine/
│ ├── indicators.py # 技术指标:MA/RSI/MACD/KDJ/量比/波动率
│ ├── scoring.py # 六因子评分模型 + 规则化推荐理由
│ ├── analyst.py # DeepSeek 研报 + RAG 增强 + 历史记录
│ ├── strategies.py # 量化策略信号生成 + 回测引擎
│ └── notifier.py # 舆情监控:重要度评分 + SMTP 邮件 + 调度器
├── rag/
│ └── vector_store.py # Chroma/Embedding 纯 REST 封装
├── templates/ # 10 个页面模板
├── static/
│ ├── css/style.css
│ ├── js/ # 各页面脚本
│ └── lib/marked.min.js # Markdown 渲染(本地无 CDN)
├── data/ # stock_advisor.db(运行时生成)
└── logs/ # 运行日志
🚀 快速开始
cd works/stock-advisor
./start.sh start # 启动(端口 16095)
./start.sh status # 查看状态
./start.sh stop # 停止
./start.sh restart # 重启
./start.sh seed # 一键重灌数据(含向量重建 + 策略回测,约 1-3 分钟)
# 手动执行数据生成(可选参数)
/home/hz1/miniconda3/envs/openclaw/bin/python3 seed_data.py # 全量(DB+向量+回测)
/home/hz1/miniconda3/envs/openclaw/bin/python3 seed_data.py --skip-vector # 跳过向量重建
/home/hz1/miniconda3/envs/openclaw/bin/python3 seed_data.py --no-strategies # 跳过策略回测
访问:http://<服务器IP>:16095/
依赖环境:openclaw conda 环境(flask、requests);外部服务 Chroma 16010 + Embedding 16011(本机常驻)。
🗄️ 数据库设计(SQLite,13 张表)
| 表 | 说明 | 关键字段 |
|---|---|---|
stocks |
股票基础信息(68 只) | code/name/industry/board/market_cap/pe/pb/description |
stock_daily |
日线行情(12240 条) | code/date/OHLC/volume/amount/change_pct |
market_index |
上证/深证/创业板指数 | date/sh/sz/cy |
news |
财经新闻(305 条,RAG 语料) | title/content/category/sentiment/related_stocks |
institutions |
机构实体(27 家) | name/type(公募/券商/保险/外资/私募)/description |
inst_ratings |
机构评级(165 条) | inst_id/stock_code/rating/target_price/rating_date |
fund_holdings |
基金季度持仓(363 条) | inst_id/stock_code/quarter/hold_value/change_pct |
watchlist |
用户自选股 | code |
analysis_cache |
研报最新缓存 | code/report |
analysis_history |
AI 分析历史(含数据源 JSON) | code/focus/report/sources |
strategy_backtests |
策略回测结果(408 条) | strategy/code/metrics/equity/trades |
settings |
系统设置 KV | key/value |
notification_log |
舆情通知日志 | news_id/importance/status |
watch_targets |
跟踪目标(概念/主题/股票) | type/name/keywords/enabled |
tracking_reports |
跟踪报告(含类型/数据源/影响度 JSON) | target_type/code/report/meta |
report_log |
定时报告发送日志 | kind/subject/status |
global_markets |
全球主要指数(模拟) | date/data(JSON) |
🎯 核心模块详解
1. 六因子评分模型(engine/scoring.py)
满分 100,评级:强烈推荐 ≥82 / 推荐 ≥68 / 关注 ≥55 / 观望 <55
| 因子 | 满分 | 依据 |
|---|---|---|
| 趋势 | 25 | 均线多头排列 + 站上 MA20 |
| 动量 | 20 | 5 日涨幅区间映射(过急扣分防追高) |
| 技术 | 15 | RSI 健康区间 / 超买超卖 |
| 量能 | 10 | 量比 |
| 消息 | 15 | 近 7 日相关新闻情感均值 |
| 机构 | 15 | 近 30 日正面评级数 + 基金持仓动向 |
同时生成规则化推荐理由(趋势/动量/RSI/量能/消息/机构),列表页直接展示,无需 LLM。
2. AI 深度研报(engine/analyst.py,RAG 增强)
触发 → RAG检索(个股新闻向量命中 + 公司概况) + 技术指标 + 机构评级/持仓 + 六因子评分
→ 组装提示词 → DeepSeek 推理生成 Markdown 研报
→ 写入 analysis_history(含数据源快照)→ 前端轮询展示
研报结构:公司概况 / 技术面 / 消息面 / 机构动向 / 风险提示 / 操作建议(目标区间·支撑·压力位)。
数据源详情页 /analysis/<id> 可追溯每次分析参考的:
- 📰 RAG 相关资讯(含情感 + 向量相似度)
- 🏢 公司概况 / 📈 技术指标 / 🎯 综合评分
- 🏦 机构评级 / 💼 基金持仓 / 🧠 完整提示词
3. 量化策略回测(engine/strategies.py)
6 个主流策略(全市场 × 6 = 408 条预计算,秒级加载):
| 策略 | 参数 | 类型 |
|---|---|---|
| 双均线金叉 | MA5/MA20 | 趋势 |
| MACD 金叉 | 12/26/9 | 趋势 |
| RSI 超买超卖 | RSI(14) 30/70 | 反转 |
| 布林带回归 | 20日/2σ | 均值回归 |
| 20日动量 | 20日涨幅/MA20 | 动量 |
| N日新高突破 | 20日高低点 | 突破 |
回测规则:收盘产生信号 → 次日开盘成交(全仓多头,避免未来函数);指标含总收益/年化/最大回撤/夏普/胜率/盈亏比/交易次数/超额收益;并对比买入持有基准净值曲线。
扩展新策略:在
STRATEGIES注册 name/desc + 实现_signals()即可。
4. 舆情驱动自动化(engine/notifier.py)
流程:后台调度线程(默认 30 分钟)→ 扫描新新闻(水位去重)→ 重要度评分 → 达标 → SMTP 邮件通知
重要度评分(0-100):
类别基础分(公司40/业绩35/机构30/行业25/市场15)
+ |情感| × 情感权重 × 100
+ 关键词命中 ×12/个(回购/中标/减持/问询/超预期…)
+ 关联个股 ×5/只
防打扰机制:monitor_last_news_id 水位只扫新增;首次启动只建水位不通知历史;单封邮件最多 20 条。
🌙 静默期:可配置某些时段不发送邮件(如夜间/午休),支持多段 23:00-07:30,12:00-13:00(跨午夜)。命中静默时段时扫描照常、仅抑制发送(日志标记为 quiet,水位正常推进,不会在结束后补发积压)。在 ⏰ 自动化页开启。
5. 持仓跟踪智能体(engine/agent.py + chain_data.py)
对持仓(自选股)与目标概念/主题/股票定期主动跟踪,由大模型智能体 + 工作流驱动:
工作流:读取产业链知识库 → RAG+DB 采集(个股/上游/下游/同业 或 概念资讯/受益股) → LLM 深度分析
→ 影响度判定(0-100) → 入库 tracking_reports → 重大变化(≥阈值)邮件通知
- 跟踪对象(
watch_targets表 + 自选股)- 💼 持仓(自选股):⏰ 自动化→持仓管理 或 股票池/详情页 ⭐ 添加
- 🎯 概念/主题目标:如「AI算力」「低空经济」「固态电池」(关键词检索)
- 🎯 股票目标:额外跟踪的个股代码
- 产业链知识库
chain_data.py:覆盖 40+ 行业,每个行业定义 上游(供给/成本)/下游(需求/客户)/同业 + 检索关键词(引用池内股票代码便于 RAG 过滤) - 个股深度分析:个股最新动态 / 上游产业链分析 / 下游产业链分析 / 同行业竞争格局 / 产业链传导与投资启示 / 风险提示 / 关注要点
- 概念/主题深度分析:题材最新动态 / 核心驱动与催化 / 受益标的梳理 / 市场情绪与资金 / 风险提示 / 关注要点
- 影响度判定:大模型输出 JSON(significance / impact_score / change_kind / summary / chain_trend),前置输出防截断,容错解析
- 主动调度:后台调度器按间隔(默认 60 分钟)跟踪全部持仓+目标;支持「立即跟踪全部目标/单只」
- 重大变化通知:impact_score ≥ 阈值(默认 65)自动邮件(股票/概念通用)
- 🌙 静默期:可配置某些时段不发送重大变化邮件(跟踪报告照常生成入库),在 ⏰ 自动化页开启,多段/跨午夜均支持
- 页面
/tracking:股票+概念报告总览;⏰ 自动化页可管理持仓与目标、查看最近报告
6. 系统设置(/settings)
- 📧 邮件:SMTP 服务器/端口/加密模式(plain/starttls/ssl)/账号/密码/收件人 + 测试邮件
- 🤖 大模型:base_url / api_key / model(运行时生效)+ 测试连接
设置存入
settings表,优先于config.py默认值,无需改代码。
7. 每日定时报告(engine/report.py + reports.py + cron)
工作日自动发送两封行情报告到邮箱:
| 时段 | cron | 内容 |
|---|---|---|
| 🌅 盘前分析 | 0 9 * * 1-5 |
昨日市场回顾 / 昨日至今要闻 / 全球市场 / 持仓与关注目标 / 盘前研判 |
| 🌇 盘后总结 | 30 15 * * 1-5 |
今日市场总结 / 今日要闻 / 全球市场 / 持仓表现 / 盘后研判 |
每期输出两份报告:
-
简单版:邮件正文(指数/涨跌结构/要闻/持仓/目标 + AI 研判速览)
-
详细版:HTML 附件(数据总览表格 + 全球市场 + 持仓明细 + AI 深度分析全文)
-
全球市场数据
global_markets表(模拟):道琼斯/纳斯达克/标普/恒生/日经/KOSPI/德法英等 9 大指数 -
报告由 DeepSeek 基于当日数据生成研判(简版+详版两次调用),失败自动降级为数据速览
-
手动触发:数据管理页「定时报告」卡片(🌅/🌇 按钮)+ 发送日志
report_log表 -
🌙 静默期:数据管理页可配置报告静默时段,命中时段内不生成、不发送(日志标记为
quiet) -
CLI:
python3 reports.py premarket|postmarket
🔌 API 文档
页面
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / /stocks /recommend /strategies /news /institutions /settings /admin |
各页面 |
| GET | /stock/<code> |
个股详情页 |
| GET | /analysis/<id> |
AI 分析详情页 |
行情/股票
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/health |
健康检查 |
| GET | /api/overview |
仪表盘聚合数据(指数/情绪/荐股/要闻/自选) |
| GET | /api/stocks?keyword=&industry=&board=&rating=&sort=&page= |
股票列表(含评分) |
| GET | /api/stock/<code> |
个股详情 + 指标 + 评分 |
| GET | /api/stock/<code>/kline?days= |
K线数据 + MA 序列 |
| GET | /api/stock/<code>/news |
个股相关新闻 |
| GET | /api/stock/<code>/institutions |
个股机构评级 + 基金持仓 |
荐股/AI
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/recommend?rating=&limit= |
评分排名 |
| POST | /api/stock/<code>/analyze |
提交 AI 研报任务 {focus} |
| GET | /api/stock/<code>/analyze/status |
轮询研报状态 |
| GET | /api/stock/<code>/analyses |
历史分析列表 |
| GET | /api/analyses/<id> |
分析详情(含数据源) |
自选
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/watchlist |
自选列表 |
| POST | /api/watchlist/<code> |
加入自选 |
| DELETE | /api/watchlist/<code> |
移出自选 |
新闻/机构
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/news?keyword=&category=&page= |
新闻列表(分页) |
| GET | /api/news/<id> |
新闻详情(含关联股票) |
| GET | /api/institutions?type= |
机构列表 |
| GET | /api/institutions/<id> |
机构详情 |
| GET | /api/ratings/upgrades |
评级变动榜 |
| GET | /api/holdings/moves |
基金增减持榜 |
持仓跟踪
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/tracking |
跟踪报告列表 |
| GET | /api/tracking/stock/<code> |
某股跟踪记录 |
| GET | /api/tracking/<id> |
跟踪详情(含数据源) |
| POST | /api/tracking/run |
立即跟踪全部自选股 |
| POST | /api/tracking/run/<code> |
立即跟踪单只 |
量化策略
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/strategies |
策略列表 + 全市场统计 |
| GET | /api/backtest/market?strategy= |
某策略全市场收益榜 |
| GET | /api/backtest?strategy=&code= |
单股回测详情(净值+交易) |
| POST | /api/backtest/rebuild |
重建全市场回测 |
设置/监控
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/settings |
读取全部设置 |
| POST | /api/settings |
保存设置 {mail, llm, monitor, tracking, quiet}(quiet 含 monitor/tracking/report 三任务静默期) |
| POST | /api/settings/test-email |
发送测试邮件 |
| POST | /api/settings/test-llm |
测试大模型连接 |
| POST | /api/monitor/scan |
立即扫描新闻 |
| GET | /api/monitor/log |
通知日志 |
数据管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/admin/stats |
表统计 + 向量库状态 |
| POST | /api/admin/reseed |
一键重灌数据 |
| GET | /api/admin/healthcheck |
外部依赖连通性检查 |
🔌 外部依赖
| 服务 | 地址 | 用途 |
|---|---|---|
| Chroma 向量库 | 121.40.164.32:16010 |
新闻/概况向量索引 |
| Embedding (bge-large-zh-v1.5) | 121.40.164.32:16011 |
1024 维语义向量 |
| DeepSeek API | https://api.deepseek.com |
AI 研报生成 |
| SMTP | mail.tphai.com:587 |
舆情邮件通知 |
向量集合:
stock_news_v1(新闻 474 条)/stock_profiles_v1(公司概况 68 条)
📦 模拟数据说明
当前所有行情/新闻/机构数据均为模拟数据(页面有"模拟数据"标识),用于功能演示与系统验证:
- 68 只 A 股风格股票,覆盖 20+ 行业(白酒/新能源/半导体/医药/银行/券商…)
- 180 个交易日日线(随机游走 + 趋势分化,让荐股/回测有区分度)
- 305 条财经新闻(业绩/行业/公司/机构观点/市场 5 类,带情感标签 + 关联个股)
- 27 家机构(公募/券商/保险资管/外资/私募)+ 165 条评级 + 363 条季度持仓
接入真实数据
# 1. 改 config.py
IS_MOCK = False
# 2. 替换 seed_data.py 的数据源(真实行情/新闻/机构接口),保持表结构不变
# - stocks / stock_daily / market_index → 真实行情
# - news → 真实新闻(保留 category / sentiment / related_stocks 字段)
# - institutions / inst_ratings / fund_holdings → 真实机构数据
# 3. 重灌
./start.sh seed
分析/检索/回测/监控逻辑零改动即可对接真实数据。
📝 版本历史
| 版本 | 内容 |
|---|---|
| v1.0.0 | 基础版:股票池/行情/新闻/机构/多因子评分/AI 研报(RAG) |
| v1.0.1 | 修复:重灌后机构 ID 自增未重置、行业板块字段错位、研报评分口径 |
| v1.1.0 | AI 分析历史记录 + 数据源详情页(/analysis/<id>,展示 RAG 新闻/提示词等) |
| v1.2.0 | 量化策略模块:6 主流策略全市场回测 + 单股净值曲线 + 交易明细 |
| v1.3.0 | 舆情驱动自动化(定期扫新闻→邮件通知)+ 系统设置区(邮件/大模型/监控可配) |
| v1.4.0 | 持仓跟踪智能体:产业链上下游深度分析(上游供给/成本、下游需求/景气、同业),影响度判定+重大变化通知 |
| v1.5.0 | 舆情监控与持仓跟踪合并为「⏰ 自动化」导航入口(双选项卡);修复布尔设置存储兼容 |
| v1.6.0 | 目标跟踪:概念/主题/股票(watch_targets),概念智能体分析+受益个股,持仓管理与目标管理,报告支持双类型 |
| v1.7.0 | 每日定时报告:工作日 9:00 盘前 / 15:30 盘后,简版正文+详细版附件,全球市场数据,cron 定时+手动触发 |
| v1.8.0 | 🌙 静默期:舆情监控/持仓跟踪/定时报告三大自动化任务均可独立配置静默时段(多段/跨午夜),命中时段不发送邮件(日志标记 quiet) |
🗺️ 后续规划(可叠加的高级能力)
- 模拟盘/实盘信号推送(每日盘前舆情日报)
- 策略参数调优、策略组合与仓位管理
- 自选股策略联动、财务因子库(真实财报数据)
- 多模型对比研报、行业轮动分析
⚠️ 本系统所有内容基于模拟数据生成,仅供系统演示与量化研究,不构成任何投资建议。