224 lines
11 KiB
Markdown
224 lines
11 KiB
Markdown
# 智策 StockTerminal — 架构总结
|
||
|
||
> 版本:当前实现态(2026-06)
|
||
> 定位:个人/小团队 A 股分析·复盘·智能辅助系统
|
||
|
||
---
|
||
|
||
## 一、整体分层
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 展示层(前端) │
|
||
│ HTML + ECharts 5 + 原生 JS │
|
||
│ prototype/index.html · style.css · app.js │
|
||
└────────────────────────┬────────────────────────────────────┘
|
||
│ HTTP / REST
|
||
┌────────────────────────▼────────────────────────────────────┐
|
||
│ 服务层(后端 FastAPI) │
|
||
│ main.py —— 50+ API 端点,静态文件托管 │
|
||
│ │
|
||
│ 数据服务 akshare_service.py (行情·情绪·资讯·实时报价) │
|
||
│ AI 分析 ai.py (证据链·置信度·LLM/规则) │
|
||
│ 信号统计 signals.py (胜率回测·预测留痕·核验) │
|
||
│ RAG 检索 rag.py (资讯检索·情绪标注) │
|
||
│ 复盘日报 report.py (结构化日报·推送) │
|
||
│ 组合计算 portfolio.py (持仓·P&L·资金曲线) │
|
||
│ 回测引擎 backtest.py (MA交叉·净值曲线) │
|
||
│ 预警引擎 alerts.py (实时报价判断·触发事件) │
|
||
│ 推送通知 notifier.py (SMTP·Server酱·企微·PP) │
|
||
│ 大模型客户端 llm.py (OpenAI 兼容接口) │
|
||
│ 定时调度 scheduler.py (APScheduler 5 个任务) │
|
||
│ ETL 入库 ingest.py (AkShare→PostgreSQL) │
|
||
│ CLI 工具 cli.py (init/ingest/ingest_all) │
|
||
│ 配置 config.py + .env (DB·LLM·推送密钥) │
|
||
└────────────────────────┬────────────────────────────────────┘
|
||
│ SQLAlchemy ORM / psycopg2
|
||
┌────────────────────────▼────────────────────────────────────┐
|
||
│ 数据层(PostgreSQL) │
|
||
│ 13 张业务表,见下方数据模型 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 二、后端模块职责
|
||
|
||
| 文件 | 职责 | 关键依赖 |
|
||
|---|---|---|
|
||
| `main.py` | FastAPI 入口,50+ REST 端点,静态托管 | 所有模块 |
|
||
| `config.py` | 环境变量读取,支持 `.env` 文件 | python-dotenv |
|
||
| `db.py` | 引擎/Session,自动建库建表 | SQLAlchemy, psycopg2 |
|
||
| `models.py` | 13 个 ORM 表(见下节) | SQLAlchemy |
|
||
| `akshare_service.py` | AkShare 数据抓取,带 TTL 缓存和 mock 降级 | akshare, cachetools |
|
||
| `ingest.py` | ETL:AkShare → PostgreSQL 增量 upsert | akshare, models |
|
||
| `scheduler.py` | APScheduler 后台任务(5 个定时任务) | apscheduler |
|
||
| `backtest.py` | MA 交叉策略回测,读 DB 日线,输出净值曲线 | sqlalchemy, pandas |
|
||
| `ai.py` | AI 分析:证据链构造、置信度计算、LLM 调用/规则降级 | llm, signals, rag |
|
||
| `signals.py` | 6 类信号历史胜率回测;预测留痕 + 到期核验 | sqlalchemy, pandas, numpy |
|
||
| `rag.py` | 资讯检索 + 利好/利空情绪标注,作为 LLM 上下文 | akshare_service |
|
||
| `report.py` | 七段式 AI 复盘日报生成、落库、推送精简版 | ai, notifier |
|
||
| `portfolio.py` | 持仓计算(移动加权均价)、P&L 归因、逐日资金曲线 | sqlalchemy |
|
||
| `alerts.py` | 实时报价轮询 → 规则命中 → 写事件 + 推送 | akshare_service, notifier |
|
||
| `notifier.py` | 四渠道推送:SMTP 邮件、Server酱、企业微信 Webhook、PushPlus | requests, smtplib |
|
||
| `llm.py` | OpenAI 兼容客户端(DeepSeek/通义/Kimi 均适用) | requests |
|
||
| `cli.py` | 命令行工具:`init` / `ingest` / `ingest_all` | ingest, db |
|
||
|
||
---
|
||
|
||
## 三、数据模型(PostgreSQL)
|
||
|
||
| 表名 | 说明 | 主键 / 唯一约束 |
|
||
|---|---|---|
|
||
| `securities` | 证券基础信息(代码·名称·市场) | `code` |
|
||
| `quotes_daily` | 个股日线(OHLCV,前复权) | `(code, date)` |
|
||
| `index_daily` | 指数日线(上证/深证/沪深300) | `(code, date)` |
|
||
| `sector_daily` | 板块每日快照(涨跌·成交额·龙头) | `(date, name)` |
|
||
| `fund_flow_daily` | 行业主力资金流每日快照 | `(date, name)` |
|
||
| `sentiment_daily` | 全市场情绪(涨跌家数/涨跌停) | `date` |
|
||
| `dragon_tiger` | 龙虎榜明细(代码·席位·净买额) | `(date, code, reason)` |
|
||
| `stock_metrics` | 个股最新因子快照(MA/RSI/MACD/量比/分位/连涨 等 15 个因子) | `code` |
|
||
| `signal_stats` | 6 类技术信号历史胜率(回测样本·N日上涨概率·平均收益) | `(signal, horizon)` |
|
||
| `predictions` | AI 诊断留痕(方向·置信度·N日后核验·命中与否) | `(code, date, kind)` |
|
||
| `daily_reports` | AI 复盘日报(markdown 正文·来源·是否已推送) | `date` |
|
||
| `trades` | 交易记录(买卖·价格·数量·手续费·理由·情绪标签) | `id` |
|
||
| `alert_rules` | 预警规则(价格上穿/下穿/涨跌幅条件·状态) | `id` |
|
||
| `alert_events` | 预警触发事件(站内通知·已读状态) | `id` |
|
||
| `job_runs` | 定时任务执行日志 | `id` |
|
||
|
||
---
|
||
|
||
## 四、定时任务(APScheduler,周一至周五)
|
||
|
||
| 任务 ID | 触发时间 | 功能 |
|
||
|---|---|---|
|
||
| `daily_ingest` | 15:35(收盘后,可配) | 抓取当日板块/资金流/情绪/龙虎榜/自选股日线入库 |
|
||
| `alert_check` | 每 60 秒 | 实时报价核查所有 active 预警规则,触发则写事件并推送 |
|
||
| `daily_report` | 15:45(入库+10分) | 生成 AI 七段式复盘日报并推送微信/邮件 |
|
||
| `verify_pred` | 15:50 | 核验到期 AI 预测,计算命中率 |
|
||
| `signal_stats` | 每周六 09:00 | 对全市场样本股回测 6 类信号历史胜率(可手动触发) |
|
||
|
||
---
|
||
|
||
## 五、AI 分析层设计(可回溯)
|
||
|
||
```
|
||
用户请求 /api/ai/diagnose
|
||
│
|
||
▼
|
||
_stock_context() 从 stock_metrics + DailyQuote 取最新因子
|
||
│
|
||
├─ signals.get_stats() 读 signal_stats 表,取各信号历史胜率
|
||
│
|
||
├─ rag.stock_context() 拉近期资讯 → 情绪标注(利好/利空/中性)
|
||
│
|
||
▼
|
||
_build_evidence() 生成 6 维证据链(趋势/技术/动量/资金/位置/消息)
|
||
每条附:事实描述 · 方向(bull/bear/neutral) · 历史胜率 · 样本数
|
||
│
|
||
▼
|
||
_confidence_direction() 加权多空净值 → 置信度(%) + 预测方向(up/down/flat)
|
||
│
|
||
├─ signals.record_prediction() 写入 predictions 表留痕
|
||
│
|
||
├─ llm.ask() (有 key) 将证据链+胜率+RAG资讯构造 prompt → 大模型输出
|
||
│ 或
|
||
└─ 规则文本降级 格式化证据链为可读文本
|
||
```
|
||
|
||
实测准确率闭环:
|
||
```
|
||
预测留痕(open) → N 个交易日后 verify_predictions() 拉 DailyQuote 核验
|
||
→ 填写 actual_ret + hit(True/False) → status=closed
|
||
→ /api/ai/accuracy 按方向汇总命中率
|
||
```
|
||
|
||
---
|
||
|
||
## 六、推送通知渠道
|
||
|
||
| 渠道 | 触发条件 | 配置项(`.env`) |
|
||
|---|---|---|
|
||
| SMTP 邮件 | 预警触发 / 复盘日报 / 测试 | `SMTP_HOST/PORT/USER/PASSWORD/TO` |
|
||
| Server酱(微信) | 同上 | `SERVERCHAN_KEY` |
|
||
| 企业微信群机器人 | 同上 | `WECOM_WEBHOOK` |
|
||
| PushPlus(微信) | 同上 | `PUSHPLUS_TOKEN` |
|
||
|
||
任意渠道配置即自动启用,互不依赖。
|
||
|
||
---
|
||
|
||
## 七、前端菜单结构(app.js MENU)
|
||
|
||
```
|
||
大盘行情
|
||
├─ 市场总览 行情/三大指数/情绪温度计/资金流向
|
||
├─ 大盘云图 行业/板块涨跌热力图(ECharts treemap)
|
||
├─ 热股榜 实时热股+板块
|
||
└─ 龙虎榜 当日龙虎榜净买额排名
|
||
|
||
自选股
|
||
├─ 自选列表 持仓快照 + K线
|
||
├─ 全市场选股 8 个内置策略 + SQL 直查 stock_metrics
|
||
└─ 条件选股 客户端多因子过滤
|
||
|
||
复盘中心
|
||
├─ 每日复盘 板块/情绪/资金流统计
|
||
├─ AI日报 七段式 markdown 日报,历史翻阅,一键推送
|
||
└─ 个股复盘 K线回放 + MA交叉买卖点标注
|
||
|
||
策略与中台
|
||
├─ 策略回测 MA交叉净值曲线 + 最大回撤
|
||
└─ 数据中台 入库状态 / 手动触发 / 任务日志
|
||
|
||
AI 分析
|
||
├─ 今日策略 大模型/规则 生成当日操作方向
|
||
├─ 个股诊断 6维证据链 + 历史胜率 + 置信度 + RAG资讯
|
||
├─ AI复盘点评 当日大模型复盘摘要
|
||
└─ AI准确率 信号历史胜率表 + 实测命中率 + 近期核验记录
|
||
|
||
组合交易
|
||
├─ 组合持仓 实时市值/浮亏/胜率
|
||
├─ 资金曲线 逐日净值 vs 沪深300基准(ECharts折线)
|
||
├─ 交易日志 录入买卖 / 理由 / 情绪标签
|
||
└─ 盈亏归因 按个股/理由/情绪三维归因
|
||
|
||
智能预警
|
||
├─ 预警规则 创建/删除/重激活规则,推送渠道状态检测
|
||
└─ 触发记录 预警事件列表,标记已读,🔔铃铛角标
|
||
|
||
资讯中心
|
||
├─ 要闻快讯 全球财经资讯 + 情绪标注 + AI摘要
|
||
└─ 自选相关 自选股关联资讯聚合
|
||
```
|
||
|
||
---
|
||
|
||
## 八、技术栈
|
||
|
||
| 层 | 技术选型 |
|
||
|---|---|
|
||
| 前端 | 纯 HTML + CSS + 原生 JS,ECharts 5(CDN) |
|
||
| 后端 | Python 3.12 + FastAPI 0.115 + uvicorn |
|
||
| 数据库 | PostgreSQL(psycopg2-binary + SQLAlchemy 2.0) |
|
||
| 数据源 | AkShare(新浪/同花顺/乐估备选源),Sina hq 实时报价 |
|
||
| 调度 | APScheduler 3.x BackgroundScheduler |
|
||
| AI | OpenAI 兼容 REST(默认 DeepSeek),规则降级无缝切换 |
|
||
| 缓存 | cachetools TTL(内存),无 Redis 依赖 |
|
||
| 推送 | SMTP(SSL) + Server酱 + 企业微信 Webhook + PushPlus |
|
||
| 部署 | WSL2 / Linux,`nohup python main.py`,可 Docker 化 |
|
||
|
||
---
|
||
|
||
## 九、待完善方向
|
||
|
||
| 优先级 | 模块 | 建议 |
|
||
|---|---|---|
|
||
| 高 | 回测引擎 | 手续费/滑点建模,参数寻优,月度收益热力图 |
|
||
| 高 | 数据稳定性 | 东财源封锁问题,增加 Tushare 备用源,分钟线入库 |
|
||
| 中 | RAG 升级 | Embedding + 向量库(Chroma/Qdrant),支持语义检索财报 |
|
||
| 中 | 多组合 | 目前单一组合,扩展为模拟盘/真实盘多组合管理 |
|
||
| 中 | 盘中异动雷达 | 快速拉升/放量突破/涨停打开实时监测 |
|
||
| 低 | 用户系统 | 登录/鉴权,多用户自选股独立管理 |
|
||
| 低 | 部署文档 | Docker Compose(FastAPI + PostgreSQL),Nginx 反代 |
|