多因子选股系统
一个面向 A 股市场的量化分析系统,涵盖实时行情分析、因子计算、机器学习建模、交易信号、组合管理、风险管理、回测验证等完整链路。v4.0 采用 React 前端 + Flask API 架构,数据层延续 Parquet + SQLite,零外部中间件依赖(无需 MySQL / Redis),克隆即可运行。
项目定位
本项目是用于学习和二次开发的多因子选股系统原型,适合继续补齐后再扩展使用。
- 定位:多因子选股系统原型,适合继续补齐后再扩展使用
- 适用场景:量化入门学习、策略研究、二次开发
- 不适用场景:直接用于实盘交易
能力现状(已实现 / 部分实现 / 未实现/未开放)
| 模块 | 状态 | 说明 |
|---|---|---|
| 日线/分钟线数据中心 | 已实现 | 任务提交、状态轮询、历史展示(Parquet 存储) |
| AI 智能工作台 | 已实现 | 自然语言查数据/更新数据/建宽表/算因子/训练模型,流式对话,SQL 只读约束 |
| 因子计算与表达式 | 已实现 | 内置因子 + 自定义表达式(白名单校验),point-in-time 公告日打点 |
| ML 建模与预测 | 已实现 | XGBoost / LightGBM / RandomForest,防泄漏训练管线 |
| 基础选股评分 | 已实现 | 基础因子评分与 ML 集成评分 |
| 投资组合管理 | 已实现 | 投资组合页面已具备真实创建、详情、持仓增删改、组合删除和优化结果落库能力 |
| 回测验证 | 已实现(研究级) | t+1 成交、涨跌停/停牌约束、逐日 mark-to-market 净值已实现;卖出印花税计入成本;注意股票池完整性依赖重新下载含退市股的 stock_basic |
| 报告中心 | 部分实现 | 报告列表与生成功能入口已接通,导出与订阅派发仍在补齐 |
| 实时行情分析 | 部分实现 | React 前端六页已可用(指标/信号/监控/风险/报告/推送);分钟数据依赖本地同步任务 |
| 试用数据面板 | 已实现 | 市场简报、财务健康度、资金流统计、个股雷达/全景、板块热力图(/trial/*) |
| Text2SQL 查询 | 部分实现 | 只读查询可用(统一只读校验),模板生态待完善 |
| 实盘交易对接 | 未实现/未开放 | 无券商接口,不构成投资建议 |
功能概览
🤖 AI 智能工作台
通过自然语言对话完成查询分析与系统操作,页面入口:导航栏「AI 工作台」(/ai-workbench)。
- 数据查询分析:大模型生成只读 SQL 查询本地宽表数据(最新交易日快照),自动查看表结构、修正 SQL
- 代办系统功能:下载/更新数据(需在 .env 配置 TUSHARE_TOKEN)、构建大宽表、计算因子、创建自定义因子、训练与预测 ML 模型、查询任务进度
- 安全约束:SQL 仅允许单条只读 SELECT(复用 text2sql 校验与独立只读查询库);动作类工具可整体切换为只读模式;大宽表构建保留 18:00 校验
- 配置方式:在 .env 中设置
LLM_API_KEY/LLM_BASE_URL/LLM_MODEL即可,兼容 DeepSeek、通义、GLM、Kimi、OpenAI 及本地 Ollama 的 OpenAI 兼容接口;对话为流式输出,工具调用过程全程可见
📊 实时行情分析(v4.0 起 React 前端呈现)
-
页面入口:
/realtime-analysis/*六页——技术指标、交易信号、实时监控、风险管理、分析报告、消息推送(SocketIO 实时推送) -
技术指标:通达信分钟数据接入,支持 MACD/KDJ/RSI/布林带等指标计算与展示
-
交易信号:多策略信号生成、信号融合、信号监控、策略回测
-
风险管理:投资组合持仓管理、实时价格刷新(通达信接口)、风险指标、预警管理、压力测试
-
分析报告:5 种报告类型(每日总结/组合分析/风险评估/信号分析/市场概览),支持指标卡片、表格、图表可视化
-
实时监控:板块表现、异动检测、市场情绪指标
🧮 因子与选股
- 内置因子计算 + 自定义因子表达式(白名单校验)
- 基础因子评分与 ML 选股
- 机器学习模型创建、训练(XGBoost / LightGBM / RandomForest)、预测
📈 组合与回测
- 等权重、均值方差、风险平价、因子中性组合优化
- 投资组合 CRUD:创建、持仓增删改、优化结果落库
- 单策略与多策略回测;长周期回测支持异步模式:提交后立即返回 run_id,轮询进度与结果
💾 数据管理
- 行情数据:Parquet 格式存储,支持通达信和 Baostock 双数据源
- 应用状态:SQLite 管理持仓、报告、预警等
- 离线数据包:提供预下载的历史数据,解压即用
- 数据中心入口:页面
/data-management,支持任务提交、查询、重试、状态过滤、进度轮询、历史展示
数据下载
- 视频讲解地址:v2.0版本 https://youtu.be/SpHsZdlyii8 v3.0版本:https://youtu.be/p0iJxGveW60
- 为方便学习使用,数据已改为 Parquet 模式,下载后安装环境即可使用,不需要安装 MySQL
- 数据更新到 2026 年 06 月 03 日,包含历史行情、基本面、技术面、资金流入、筹码分布,后续不定期更新
- 由于历史数据第一次下载较大,百度网盘没会员下载较慢,现提供其它几个网盘,请根据实际情况选择其中一个下载,后面日更新的数据文件不大,继续放百度网盘
- 夸克网盘:https://pan.quark.cn/s/30fe0b6ddb86
- 123网盘:https://1859852554.share.123pan.cn/123pan/tRlivd-xOXLH
- 百度网盘:https://pan.baidu.com/s/1V7GW68EmA3Ad8lKTLsuG3Q?pwd=bie3
- 如有 Tushare 接口,可通过数据管理页面更新数据
工具下载
-
anaconda或者python 二选一就行,以免环境冲突,简单一点用python,需要更多功能用anaconda
-
anaconda下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
-
python下载地址,建议用3.12.10 https://www.python.org/downloads/windows/
-
查看SQLite数据库,免费软件可以下载 https://sqlitebrowser.org/dl/ 然后把stock_cursor.sqlite3文件拖入软件中即可使用。

🌟 系统特色
核心功能
- 📊 因子管理: 内置因子和受限自定义因子能力
- 🤖 机器学习: 支持随机森林、XGBoost、LightGBM 等模型定义与训练
- 🎯 基础选股评分: 支持基础因子评分与 ML 选股链路
- 📈 组合优化: 当前仅保留已验证的优化方法
- 🔄 回测验证: 提供基础回测结果和多策略比较能力
- 📋 分析页面: 仅展示真实返回结果,不再自动填充演示数据

技术架构
- 后端: Python 3.10–3.12 / Flask / SQLAlchemy / SocketIO
- 前端: React 19 / Vite 7 / TypeScript(SPA;开发态代理
/api与/socket.io到后端 5000) - 数据处理: Pandas / NumPy / Scikit-learn
- 机器学习: XGBoost / LightGBM / CVXPY
- 任务执行: 进程内(后台线程 / 本地任务注册表),无需 Redis / Celery
- 市场数据源: Parquet 文件为主,市场数据统一落在
data/ - ML 因子状态层: Parquet 文件,状态数据统一落在
data/ml_factor_state/ - 应用状态层: 低并发状态与元数据统一使用 SQLite
🚀 快速开始
📘 新手用户:请从零开始一步步操作的话,推荐阅读详细的 从零安装指南(INSTALL.md),涵盖环境准备、依赖安装、配置说明、前后端启动、数据下载与常见问题排查。
1. 环境要求
- Python 3.10–3.12(最低 3.8+)
- Node.js 22 LTS(仅 React 前端界面需要;只用 API 可跳过)
- 运行系统不需要 MySQL,也不需要 Redis;默认使用 SQLite + Parquet,克隆即可运行
2. 安装依赖
# 克隆项目
git clone <repository-url>
cd quantitative_analysis
# 后端依赖
pip install -r requirements.txt
# 前端依赖(首次需要,Node 22 LTS)
cd frontend && npm install && cd ..
# 环境配置(LLM、Tushare Token 等按需填写)
cp .env.example .env2.1 容器化启动
cp .env.example .env
docker compose up --build默认只启动 Web 单容器(SQLite 与 parquet 状态均为本地文件);市场数据和 ml-factor 状态以本地 parquet 文件为准。
3. 启动系统
运行当前已接通功能入口:
# 终端 1:后端 API + SocketIO(端口 5000)
python run.py
# 终端 2:React 前端开发服务器(端口 5173)
cd frontend && npm run dev常规 Web 启动统一使用 python run.py。run_system.py 用于初始化与诊断(检查依赖、校验数据库和补建基础表),不作为日常启动入口。
模型删除前后端入口已打通:模型管理页面的删除按钮与
/api/ml-factor/models/<id>DELETE 接口均已接通。
遇到以下问题
Traceback (most recent call last):
File "/root/stock/run.py", line 9, in <module>
app = create_app(os.getenv('FLASK_ENV', 'default'))
执行:pip install eventlet

4. 访问系统
- React 界面(推荐入口): http://localhost:5173
- Flask 页面: http://localhost:5000
- API入口: http://localhost:5000/api
📖 使用指南
启动方式
1. 常规启动
运行 python run.py 后,系统会输出启动检查摘要,并默认在开发环境下启动 Web 服务。
2. 初始化与诊断
运行 python run_system.py 后,可执行以下操作:
- 检查系统依赖 - 验证Python版本和必需包
- 初始化数据库 - 创建数据表和内置因子
- 启动Web服务器 - 启动开发模式服务器(调试用途)
- 启动Web服务器(生产模式) - 启动生产模式服务器
- 运行系统演示 - 运行当前已接通功能入口
- 显示系统信息 - 查看系统功能概览

Web界面操作
1. 仪表盘
- 查看系统状态和统计信息
- 快速访问主要功能

2. 因子管理
- 查看内置因子列表
- 创建自定义因子
- 计算因子值


3. 模型管理
- 创建机器学习模型
- 训练模型
- 模型预测


4. 股票选择
- 基于因子的选股
- 基于ML模型的选股
- 配置选股参数


5. 组合优化
- 多种优化方法
- 约束条件设置
- 权重分配结果


6. 分析报告
- 行业分析
- 因子贡献度分析


7. 回测验证
- 单策略回测
- 多策略比较
- 失败时不再自动展示模拟结果



API接口使用

🏗️ 系统架构

目录结构
quantitative_analysis/
├── app/ # 应用主目录
│ ├── api/ # API 蓝图(ml_factor、realtime_*等)
│ ├── models/ # 数据模型(SQLAlchemy + Parquet事件)
│ ├── services/ # 业务服务(因子引擎、信号引擎、风控等)
│ ├── routes/ # 页面路由
│ ├── templates/ # Jinja2 HTML 模板
│ ├── static/ # CSS/JS/图片静态资源
│ ├── utils/ # 数据下载脚本(通达信/Baostock/Tushare)
│ ├── websocket/ # WebSocket 推送服务
│ └── services/tongdaxin/ # 通达信行情客户端
├── frontend/ # React 前端(React 19 + Vite 7 + TypeScript)
│ └── src/
│ ├── pages/ # 功能页面(实时分析、多因子模型、AI 工作台等)
│ ├── api/ # 统一 API 客户端与类型定义
│ └── components/ # 共享组件
├── data/ # 数据目录(Parquet 行情 + SQLite 状态)
│ ├── stock_minute/ # 分钟级行情 Parquet
│ ├── ml_factor_state/ # ML因子状态 Parquet
│ └── realtime_events/ # 实时事件 Parquet
├── tests/ # 测试用例
├── config.py # 配置文件
├── requirements.txt # 依赖包
├── run.py # Web 启动入口
├── run_system.py # 初始化与诊断工具
└── README.md # 说明文档
核心模块
1. 因子引擎 (FactorEngine)
- 因子定义管理
- 因子值计算
- 支持自定义公式
2. 机器学习管理器 (MLModelManager)
- 模型创建和训练
- 预测和评估
- 支持多种算法
3. 股票打分引擎 (StockScoringEngine)
- 因子打分
- ML模型打分
- 综合评分
4. 组合优化器 (PortfolioOptimizer)
- 多种优化算法
- 约束条件支持
- 风险模型估计
5. 回测引擎 (BacktestEngine)
- 策略回测
- 性能指标计算
- 多策略比较
📊 内置因子
动量因子
momentum_1d: 1日动量momentum_5d: 5日动量momentum_20d: 20日动量
波动率因子
volatility_20d: 20日波动率
技术指标
rsi_14: RSI相对强弱指标
成交量因子
turnover_rate: 换手率
基本面因子
pe_ratio: 市盈率pb_ratio: 市净率roe: 净资产收益率debt_ratio: 资产负债率current_ratio: 流动比率gross_margin: 毛利率
🔧 配置说明
数据库配置
已经改成parquet模式,不需要数据库
日志配置
LOG_LEVEL = 'INFO'
LOG_FILE = 'logs/app.log'📈 性能指标
系统支持的回测指标:
- 总收益率
- 年化收益率
- 年化波动率
- 夏普比率
- 最大回撤
- 胜率
- 卡尔玛比率
🛠️ 开发指南
添加自定义因子
- 在因子管理界面创建因子定义
- 编写因子计算公式
- 测试因子计算结果
扩展机器学习模型
- 在
MLModelManager中添加新算法 - 实现训练和预测方法
- 更新API接口
添加优化算法
- 在
PortfolioOptimizer中实现新方法 - 添加约束条件支持
- 测试优化结果
🐛 故障排除
⚠️ 依赖包兼容性问题
如果遇到 empyrical 或 TA-Lib 安装失败,请优先安装标准依赖;若本地环境仍有兼容性问题,再退回最小依赖安装:
# 使用最小化依赖
pip install -r requirements_minimal.txt常见问题
-
依赖包安装失败
# 方案1:安装标准依赖 pip install -r requirements.txt # 方案2:使用国内镜像安装最小依赖 pip install -r requirements_minimal.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ -
Python版本兼容性
- 推荐使用 Python 3.10–3.12
- 个别包兼容问题时可退回
requirements_minimal.txt
-
前端打开但接口报错 / 无数据
- 确认后端已启动(
python run.py,端口 5000) - 开发模式下前端 5173 通过代理访问
/api与/socket.io,无需额外跨域配置 - 页面无数据多为行情数据未同步,先在数据管理页面下载对应数据
- 确认后端已启动(
-
因子计算失败
- 检查数据是否存在
- 验证因子公式语法
- 查看日志错误信息
-
模型训练失败
- 确保有足够的训练数据
- 检查因子数据完整性
- 调整模型参数
📝 更新日志
v4.0.0 (2026-09-03)
前端重构 + 去 Redis 化:React 19 + Vite 7 + TypeScript 全新前端(29 个页面),移除 Redis / Celery 外部依赖,单容器即可部署。
- React 前端:实时分析六页(指标/信号/监控/风险/报告/推送)、多因子模型六页(因子/训练/评分/组合优化/分析图表/异步回测)、AI 工作台(SSE 流式对话)、数据管理、Text2SQL;统一 API 客户端与错误处理
- 去 Redis 化:缓存改为进程内 TTL 缓存,任务改为进程内执行(
DATA_JOB_EXECUTION_MODE保留为兼容项,任意值均为本地执行);docker-compose 精简为 web 单服务;依赖移除 celery / redis - 异步回测:提交后立即返回 run_id,前端轮询进度与结果
- 质量体系:测试套件入库(195 个文件 / 552 项),
acceptance/<module>.md结构性合约注册表 + pytest module marker;经三轮独立评审关闭全部发现 - 文档:新增从零安装指南 INSTALL.md;master 分支自本版本起包含完整前端
v3.0.0 (2026-08)
试用功能 + AI 智能工作台:
- 试用数据面板:市场简报、财务健康度、资金流统计、个股雷达/全景、板块热力图(
/trial/*) - AI 智能工作台:大模型对话驱动的数据查询与系统操作,流式输出、只读 SQL 约束
- 量化正确性修复(明细见下方 2026-08-24 小节)
- Docker 部署支持
量化正确性修复 (2026-08-24,随 v3.0.0 发布)
数据底座
- 股票基础资料同时下载 L/D/P 全部上市状态并携带 delist_date,消除幸存者偏差;因子计算按历史时点过滤股票池(退市股、未上市股不参与)
- 动量/波动率等收益率类因子与 ML 标签改用后复权价(
get_return_prices),除权除息缺口不再被当成真实涨跌 - 交易日历下载范围扩展至 2005 年起,财务公告日可对齐到准确的历史交易日
因子引擎
- ROE/ROA/营收增长/利润增长改为按公告日逐季度生成 point-in-time 快照(此前每股仅落库最新一期,历史日期取不到基本面因子)
组合优化与回测
- 协方差矩阵按调仓日截断估计,消灭用"今天"的数据回测历史的前视偏差
- 净值曲线改为逐日 mark-to-market:最大回撤/波动率/夏普不再被调仓频率采样系统性失真
- 截面 z-score 映射为年化预期收益后再喂给均值方差优化(量纲匹配,避免角点解)
- 卖出印花税(0.05%)计入交易成本;夏普分子改算术平均超额收益;信息比率分母改真跟踪误差;年化统一 252 交易日口径
- 单股回测补齐涨跌停/停牌约束与印花税
ML 链路
- 训练/测试时间切分加入 purge/embargo,交叉验证只在训练段进行
- 训练窗口落库;预测拒绝训练区间内的 in-sample 请求;预测兜底日期格式统一 YYYY-MM-DD
- 自定义因子表达式禁负 shift/pct_change/diff 与全序列 rank(防未来函数),rolling 窗口设上限
注意:升级后需重新下载
stock_basic与stock_trade_calendar,并用新逻辑重算受影响的因子(momentum_/volatility_/price_to_ma20 及四个基本面因子)。
v1.0.0 (2025-06-01)
- 多因子选股系统初始版本
- 因子管理和计算、机器学习模型集成
- 组合优化、回测验证引擎
- Web 界面和 API 接口
v2.0.0-parquet (2026-06-06)
架构升级:从 MySQL 迁移到 Parquet + SQLite,零外部数据库依赖,克隆即可运行。
- 实时行情分析模块:技术指标、交易信号(生成/融合/监控/回测)、风险管理(持仓/预警/压力测试)、分析报告(5种类型,可视化渲染)、实时监控(板块/异动/情绪)
- 通达信实时行情接入,支持批量获取报价和自动刷新持仓价格
- 日频数据中心:页面内直接触发数据下载脚本,支持任务管理和进度轮询
- 数据存储全面迁移到 Parquet(行情/指标/信号/状态),SQLite 仅保留应用元数据
- 投资组合管理完整闭环:创建、持仓增删改、实时价格刷新、优化落库
- 报告可视化:指标卡片、HTML 表格、ECharts 图表、预警卡片等类型化渲染
- 离线数据包:提供预下载的 A 股历史数据,解压即用
📄 许可证
本项目采用 MIT 许可证。
🤝 贡献
欢迎提交Issue和Pull Request来改进这个项目。
📞 联系方式
如有问题或建议,请通过以下方式联系:
- 提交Issue
多因子选股系统原型 - 适合继续补齐后再扩展使用。