294 lines
9.8 KiB
Markdown
294 lines
9.8 KiB
Markdown
# Blackdata StockTerminal
|
||
|
||
个人 / 小团队 A 股分析·复盘·智能辅助系统。
|
||
|
||
后端基于 FastAPI,提供行情、回测、AI 诊断与定时任务;前端为纯 HTML + ECharts 原型,由 FastAPI 统一托管,浏览器直接访问即可使用。
|
||
|
||
---
|
||
|
||
## 功能模块
|
||
|
||
| 模块 | 说明 |
|
||
|---|---|
|
||
| 大盘行情 | 三大指数、情绪温度计、板块云图、热股榜、龙虎榜、涨跌停统计 |
|
||
| 盘中监控 | 异动雷达(快速拉升 / 放量突破 / 涨停打开 / 连板追踪 / 大单异动) |
|
||
| 自选股 | 自选列表与分组、8 种内置策略选股、多因子条件过滤 |
|
||
| 智能选股 | 可视化条件组合器、策略保存 / 分享、选股回测验证、条件预警 |
|
||
| 复盘中心 | 每日复盘(板块 / 资金 / 龙虎榜)、AI 七段式日报、个股 K 线回放 |
|
||
| 策略回测 | MA 交叉 / 多因子回测、参数优化网格搜索、策略对比、交易明细导出 |
|
||
| 板块轮动 | 板块强弱趋势、资金流向桑基图、龙头股识别、生命周期判断 |
|
||
| AI 分析 | 个股 6 维诊断、AI 对话式分析、信号胜率历史、预测准确率核验 |
|
||
| 组合交易 | 持仓 P&L、资金曲线、交易日志(理由 / 情绪标签)、持仓归因分析 |
|
||
| 智能预警 | 价格 / 量能 / 技术信号规则预警、多通道推送(邮件 / 微信 / 企微) |
|
||
| 资讯中心 | 财经快讯、AI 情绪摘要、自选股关联资讯 |
|
||
| 社区情绪 | 东方财富 / 雪球热帖采集、情绪指数、热议股排行、情绪与股价相关性 |
|
||
| 事件驱动 | 财报前后规律、高管增减持、限售解禁、政策事件库、事件驱动选股 |
|
||
| 财报解读 | 关键指标趋势、AI 财报摘要、同行对比、异常预警、发布日历 |
|
||
| 涨跌停分析 | 涨停 / 跌停追踪、连板监控、炸板率统计、涨停敢死队排行 |
|
||
| 数据中台 | 数据入库状态、任务日志、全市场历史回填、定时调度监控 |
|
||
|
||
---
|
||
|
||
## 技术栈
|
||
|
||
| 层 | 技术 |
|
||
|---|---|
|
||
| 前端 | HTML + CSS + 原生 JS,ECharts 5(CDN) |
|
||
| 后端 | Python 3.12 · FastAPI · uvicorn |
|
||
| 数据库 | PostgreSQL 14+ · SQLAlchemy 2.0 · psycopg2 |
|
||
| 缓存 | Redis 5+(可选,自动降级到内存缓存) |
|
||
| 数据源 | AkShare(行情 / 情绪 / 资讯)· Sina 实时报价 |
|
||
| 调度 | APScheduler |
|
||
| AI | OpenAI 兼容接口(DeepSeek / 通义 / Kimi 等),无 Key 时规则降级 |
|
||
| 鉴权 | JWT Token + API Key 双模式 |
|
||
|
||
---
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
.
|
||
├── backend/
|
||
│ ├── main.py # FastAPI 入口 + 路由
|
||
│ ├── cli.py # 建库 / 入库命令行工具
|
||
│ ├── models.py # SQLAlchemy 数据模型
|
||
│ ├── db.py # 数据库连接
|
||
│ ├── config.py # 全局配置(读 .env)
|
||
│ ├── scheduler.py # APScheduler 定时任务
|
||
│ ├── auth.py # JWT / API Key 鉴权
|
||
│ ├── redis_cache.py # Redis 缓存层
|
||
│ ├── exceptions.py # 统一异常处理
|
||
│ ├── akshare_service.py # 数据源封装
|
||
│ ├── ingest.py # 数据入库逻辑
|
||
│ ├── data_manager.py # 数据管理
|
||
│ ├── trade_calendar.py # 交易日历
|
||
│ ├── llm.py # 大模型调用封装
|
||
│ ├── ai.py # AI 个股诊断
|
||
│ ├── ai_chat.py # AI 对话式分析
|
||
│ ├── rag.py # RAG 知识增强
|
||
│ ├── backtest.py # 基础回测引擎
|
||
│ ├── backtest_advanced.py # 增强回测(多因子 / 参数优化 / 对比)
|
||
│ ├── signals.py # 信号胜率统计
|
||
│ ├── report.py # AI 复盘日报生成
|
||
│ ├── portfolio.py # 组合与持仓计算
|
||
│ ├── position_cost.py # 持仓成本追踪
|
||
│ ├── attribution_analysis.py # 持仓归因分析
|
||
│ ├── alerts.py # 智能预警
|
||
│ ├── notifier.py # 多通道推送
|
||
│ ├── intraday_radar.py # 盘中异动雷达
|
||
│ ├── sector_rotation.py # 板块轮动分析
|
||
│ ├── smart_selector.py # 智能选股
|
||
│ ├── sentiment_monitor.py # 社区情绪监控
|
||
│ ├── event_driven.py # 事件驱动策略
|
||
│ ├── financial_analysis.py # 财报深度解读
|
||
│ ├── limit_analysis.py # 涨跌停分析
|
||
│ ├── watchlist_manager.py # 自选股管理
|
||
│ ├── .env.example # 环境变量模板
|
||
│ └── requirements.txt
|
||
├── prototype/ # 前端静态文件(HTML / JS / CSS)
|
||
│ ├── index.html
|
||
│ ├── app.js
|
||
│ ├── style.css
|
||
│ └── *.js # 各功能模块 JS
|
||
├── 架构总结.md
|
||
├── 功能架构.md
|
||
├── 待优化.md
|
||
└── 功能扩展.md
|
||
```
|
||
|
||
---
|
||
|
||
## 环境要求
|
||
|
||
- Python 3.12+
|
||
- PostgreSQL 14+
|
||
- Redis 5+(可选,不启动时自动降级内存缓存)
|
||
- 大模型 API Key(可选,不配置时使用规则引擎降级)
|
||
|
||
---
|
||
|
||
## 快速开始(WSL / Linux)
|
||
|
||
### 1. 安装服务(首次)
|
||
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install -y postgresql postgresql-contrib redis-server
|
||
sudo service postgresql start
|
||
sudo service redis-server start
|
||
|
||
# 设置 postgres 密码(与后续 .env 中 PG_PASSWORD 保持一致)
|
||
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'your_password';"
|
||
```
|
||
|
||
WSL 重启后若服务未自动运行:
|
||
|
||
```bash
|
||
sudo service postgresql start && sudo service redis-server start
|
||
```
|
||
|
||
### 2. 安装 Python 依赖(首次)
|
||
|
||
```bash
|
||
cd backend
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 3. 配置环境变量
|
||
|
||
```bash
|
||
cd backend
|
||
cp .env.example .env
|
||
```
|
||
|
||
编辑 `backend/.env`:
|
||
|
||
```env
|
||
# 数据库
|
||
PG_USER=postgres
|
||
PG_PASSWORD=your_password
|
||
PG_HOST=localhost
|
||
PG_PORT=5432
|
||
PG_DB=stock_cs
|
||
|
||
# Redis(可选)
|
||
REDIS_HOST=localhost
|
||
REDIS_PORT=6379
|
||
|
||
# 鉴权(生产环境务必修改 SECRET_KEY)
|
||
SECRET_KEY=your-secret-key-change-in-production
|
||
DEFAULT_ADMIN_USERNAME=admin
|
||
DEFAULT_ADMIN_PASSWORD=admin123
|
||
|
||
# 大模型(可选,不填则规则降级)
|
||
LLM_API_KEY=
|
||
LLM_BASE_URL=https://api.deepseek.com/v1
|
||
LLM_MODEL=deepseek-chat
|
||
```
|
||
|
||
生成安全的 SECRET_KEY:
|
||
|
||
```bash
|
||
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
|
||
```
|
||
|
||
完整配置说明见 [backend/ENV_CONFIG.md](backend/ENV_CONFIG.md)。
|
||
|
||
### 4. 初始化数据库(首次)
|
||
|
||
```bash
|
||
cd backend
|
||
source .venv/bin/activate
|
||
|
||
# 建表 + 创建管理员账号
|
||
python cli.py init
|
||
|
||
# 抓取当日行情快照(板块 / 资金 / 情绪 / 龙虎榜)
|
||
python cli.py ingest
|
||
|
||
# 全市场日线历史入库(默认 250 交易日,耗时较长,可选)
|
||
python cli.py ingest_all
|
||
python cli.py ingest_all 500 # 指定天数
|
||
|
||
# 指定股票入库
|
||
python cli.py ingest 600519 000001
|
||
```
|
||
|
||
### 5. 启动服务
|
||
|
||
```bash
|
||
sudo service postgresql start && sudo service redis-server start
|
||
cd backend
|
||
source .venv/bin/activate
|
||
python main.py
|
||
```
|
||
|
||
浏览器访问:**http://127.0.0.1:8000**(WSL2 下 Windows 浏览器可直接访问)
|
||
|
||
健康检查:`GET /api/health`(返回 Redis、AkShare、鉴权状态)
|
||
|
||
---
|
||
|
||
## 定时任务
|
||
|
||
服务启动后,APScheduler 在交易日自动执行:
|
||
|
||
| 任务 | 默认时间 | 说明 |
|
||
|---|---|---|
|
||
| `daily_ingest` | 15:35 | 收盘后增量入库 |
|
||
| `alert_check` | 每 60 秒 | 实时价格 / 量能预警核查 |
|
||
| `intraday_scan` | 交易时段每 5 分钟 | 盘中异动扫描 |
|
||
| `daily_report` | 15:45 | 生成 AI 复盘日报并推送 |
|
||
| `verify_pred` | 15:50 | 核验到期 AI 预测,更新准确率 |
|
||
| `signal_stats` | 周六 09:00 | 全市场信号胜率回测 |
|
||
| `selector_check` | 15:40 | 选股策略预警检查 |
|
||
| `calendar_alerts` | 08:30 | 推送持仓股除权 / 解禁 / 财报等日历事件提醒 |
|
||
|
||
时间可通过环境变量 `INGEST_HOUR` / `INGEST_MINUTE` 调整。
|
||
|
||
---
|
||
|
||
## 推送渠道
|
||
|
||
在 `.env` 中配置任意一种即可,互不依赖:
|
||
|
||
| 渠道 | 配置项 |
|
||
|---|---|
|
||
| SMTP 邮件 | `SMTP_HOST` · `SMTP_PORT` · `SMTP_USER` · `SMTP_PASSWORD` · `SMTP_TO` |
|
||
| Server酱(微信) | `SERVERCHAN_KEY` |
|
||
| 企业微信机器人 | `WECOM_WEBHOOK` |
|
||
| PushPlus(微信) | `PUSHPLUS_TOKEN` |
|
||
|
||
---
|
||
|
||
## API 认证
|
||
|
||
管理接口需要 JWT Token:
|
||
|
||
```bash
|
||
# 登录
|
||
curl -X POST http://localhost:8000/api/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"username":"admin","password":"admin123"}'
|
||
|
||
# 携带 Token 访问
|
||
curl http://localhost:8000/api/admin/status \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
也可在 `.env` 中配置 `API_KEYS` 使用静态 API Key 模式。
|
||
|
||
---
|
||
|
||
## 常见问题(WSL)
|
||
|
||
| 现象 | 处理 |
|
||
|---|---|
|
||
| `connection refused` | `sudo service postgresql start && sudo service redis-server start` |
|
||
| `password authentication failed` | 检查 `.env` 中 `PG_PASSWORD` 与数据库密码是否一致 |
|
||
| `python: command not found` | 使用 `python3` |
|
||
| 新开终端命令失效 | 先执行 `source .venv/bin/activate` |
|
||
| Redis 连接失败 | 不影响运行,自动降级到内存缓存 |
|
||
| 401 Unauthorized | 先调用 `/api/auth/login` 获取 Token |
|
||
|
||
---
|
||
|
||
## 文档
|
||
|
||
| 文件 | 内容 |
|
||
|---|---|
|
||
| [架构总结.md](./架构总结.md) | 分层设计、数据模型、AI 分析流程 |
|
||
| [功能架构.md](./功能架构.md) | 功能模块详细说明 |
|
||
| [待优化.md](./待优化.md) | 已知问题与优化方向 |
|
||
| [功能扩展.md](./功能扩展.md) | 扩展功能建议 |
|
||
| [backend/ENV_CONFIG.md](backend/ENV_CONFIG.md) | 环境变量完整说明 |
|
||
| [backend/UPGRADE_GUIDE.md](backend/UPGRADE_GUIDE.md) | 升级指南 |
|
||
|
||
---
|
||
|
||
## 免责声明
|
||
|
||
本项目仅供学习与研究使用,不构成任何投资建议。行情数据来自第三方公开接口,请遵守相应数据源的使用条款。
|