📈 多因子选股系统 — 项目功能介绍
观看地址:https://youtu.be/SpHsZdlyii8
面向 A 股市场的全链路量化分析平台 — 因子计算 · 机器学习 · 组合优化 · 回测验证 · 实时行情
| 指标 | 数据 |
|---|---|
| Python 模块 | 108 |
| 业务代码 | 15,600+ 行 |
| 服务模块 | 30+ |
| API 蓝图 | 14 |
| 内置因子 | 12 |
一、整体功能介绍
多因子选股系统是一个覆盖量化研究全流程的分析平台,从数据管理到策略回测一站式完成。系统采用 Flask + SQLAlchemy + SocketIO 技术栈,基于 Parquet + SQLite 双层存储架构,零外部数据库依赖,克隆即可运行。
核心能力总览
- 实时行情分析:通达信分钟数据接入,MACD、KDJ、RSI、布林带等技术指标实时计算
- 因子与选股:12 个内置因子 + 自定义因子表达式引擎,支持白名单安全校验
- 机器学习建模:XGBoost、LightGBM、RandomForest 三大算法的完整模型生命周期
- 组合优化:等权重、均值方差、风险平价、因子中性四种经典优化方法
- 回测验证:单策略与多策略回测,丰富的绩效指标(年化收益、夏普比率、最大回撤等)
- 风险管理:组合持仓管理、实时价格刷新、风险指标监控、预警管理、压力测试
请求流程
HTTP / WebSocket → Blueprint (app/api/*.py) → Service (app/services/*.py) → ParquetDataReader (行情数据)
↕
SQLAlchemy Models (SQLite 应用状态)
技术栈
| 类别 | 技术 |
|---|---|
| 后端框架 | Python 3.8–3.11、Flask、Flask-SocketIO、Flask-SQLAlchemy、Celery |
| 数据处理 | Pandas、NumPy、PyArrow、SciPy、Scikit-learn |
| 机器学习 | XGBoost、LightGBM、RandomForest、CVXPY |
| 前端 & 可视化 | Bootstrap 5、ECharts、Plotly、Matplotlib / MPLFinance |
| 数据源 | 通达信(实时行情)、Baostock(历史数据)、Tushare(可选)、Parquet 离线数据包 |
| AI 能力 | Ollama(本地 LLM)、OpenAI API(可选)、Text2SQL、Qwen2.5-Coder |
二、各模块功能介绍
2.1 实时行情分析模块
API 蓝图前缀:/api/realtime-analysis/*
核心服务:
-
RealtimeIndicatorEngine(services/realtime_indicator_engine.py):实时技术指标计算 -
RealtimeTradingSignalEngine(services/realtime_trading_signal_engine.py):多策略交易信号生成与融合
功能特性:
| 功能 | 说明 |
|---|---|
| 实时指标计算 | 支持 MACD、KDJ、RSI、布林带等经典技术指标的实时计算与展示 |
| 多策略信号生成 | 基于不同策略的交易信号生成,支持信号融合与综合研判 |
| 信号监控 | 交易信号的实时监控与历史回溯 |
| 策略回测 | 对生成的信号进行历史回测验证 |
| 板块分析 | 板块表现统计与异动检测 |
| 市场情绪 | 市场情绪指标的实时追踪 |
数据源:通达信分钟级行情数据,存储于 data/stock_minute/(Parquet 格式)。
2.2 因子与选股模块
API 蓝图前缀:/api/ml-factor/*、/api
核心服务:
-
FactorEngine(services/factor_engine.py):内置因子计算与自定义因子管理 -
FactorExpressionEngine(services/factor_expression_engine.py):白名单校验的自定义因子公式引擎 -
StockScoringEngine(services/stock_scoring.py):因子评分与 ML 评分的综合选股引擎
内置因子(12 个)
| 维度 | 因子名 | 说明 |
|---|---|---|
| 动量 | 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 |
毛利率 |
自定义因子
支持用户通过表达式语法定义自定义因子,表达式引擎采用白名单校验机制,确保安全性。用户可在因子管理界面创建、编辑和管理自定义因子公式。
选股评分
StockScoringEngine 提供两种评分模式:
- 因子评分:基于多个因子的加权综合评分
- ML 评分:基于机器学习模型的预测评分
2.3 机器学习建模模块
API 蓝图前缀:/api/ml-factor/*
核心服务:
-
MLModelManager(services/ml_models.py):XGBoost / LightGBM / RandomForest 模型生命周期管理 -
ModelTrainingJobService(services/model_training_job_service.py):异步训练任务轮询与管理
功能特性:
| 功能 | 说明 |
|---|---|
| 模型创建 | 支持 XGBoost、LightGBM、RandomForest 三大算法的模型创建 |
| 模型训练 | 支持同步与异步训练,异步训练通过 Celery 或内联模式执行 |
| 模型预测 | 训练完成的模型可直接用于股票预测 |
| 特征工程 | 因子组合与特征选择 |
| 性能评估 | 模型性能评估与多模型比较 |
| 训练任务管理 | 异步训练任务的提交、状态查询与管理 |
2.4 组合优化模块
API 蓝图前缀:/api/ml-factor/*
核心服务:
-
PortfolioOptimizer(services/portfolio_optimizer.py):等权 / 均值方差 / 风险平价 / 因子中性
优化方法:
| 方法 | 说明 | 适用场景 |
|---|---|---|
| 等权重优化 | 所有股票分配相同权重 | 简单基准、等权组合 |
| 均值方差优化 | 基于 Markowitz 理论的均值-方差优化 | 追求风险调整后收益最大化 |
| 风险平价优化 | 基于风险贡献均衡的权重分配 | 风险均衡配置 |
| 因子中性组合 | 控制因子暴露度在中性水平 | 消除特定因子风险暴露 |
2.5 回测验证模块
API 蓝图前缀:/api/ml-factor/*
核心服务:
-
BacktestEngine(services/backtest_engine.py):单策略与多策略回测
回测能力:
| 功能 | 说明 |
|---|---|
| 单策略回测 | 对单个选股策略进行历史回测验证 |
| 多策略比较 | 同时运行多个策略并比较绩效表现 |
| 年化收益率 | 计算策略的年化收益 |
| 夏普比率 | 风险调整后收益指标 |
| 最大回撤 | 策略的最大净值回撤幅度 |
| 胜率 | 盈利交易占比 |
| 卡尔玛比率 | 年化收益与最大回撤的比值 |
回测结果以可视化图表形式展示,支持净值曲线、收益分布等多种视图。
2.6 风险管理模块
API 蓝图前缀:/api/realtime-analysis/*
核心服务:
-
RealtimeRiskManager(services/realtime_risk_manager.py):风险指标、预警管理、压力测试
功能特性:
| 功能 | 说明 |
|---|---|
| 投资组合持仓 CRUD | 创建、查询、更新、删除投资组合持仓记录 |
| 实时价格刷新 | 通过通达信接口获取实时行情价格 |
| 风险指标监控 | 实时计算并展示组合风险指标 |
| 预警管理 | 设定预警规则,触发时自动通知 |
| 压力测试 | 模拟极端市场场景,分析组合表现 |
2.7 数据管理模块
API 蓝图前缀:/api/data-jobs/*
核心服务:
-
DataJobs(services/data_jobs/):数据下载任务执行器
数据架构:
| 存储 | 用途 | 说明 |
|---|---|---|
| Parquet 文件 | 市场行情数据 | 高性能列式存储,承载日线/分钟线行情、基本面、技术面、资金流数据 |
| SQLite 数据库 | 应用状态 | 轻量级存储,管理持仓、报告、预警等低并发元数据 |
| Redis 缓存 | 任务队列 & 缓存 | Celery 任务 Broker、实时数据缓存、WebSocket 消息分发(可选) |
数据下载工具(位于 app/utils/):
| 工具 | 数据源 | 说明 |
|---|---|---|
trade_calendar.py |
Tushare / Baostock | 交易日历下载 |
stock_basic.py |
Tushare / Baostock | 股票基本信息下载 |
| 其他数据脚本 | Tushare / Baostock | 行情、财务等数据下载 |
注意:下载顺序为
trade_calendar.py→stock_basic.py→ 其他脚本。
任务执行模式(通过 DATA_JOB_EXECUTION_MODE 环境变量控制):
-
inline(默认开发模式):在 Web 进程中直接执行,无需 Celery -
celery(默认生产模式):通过 Celery Worker 异步执行,需要 Redis
2.8 Text2SQL 自然语言查询模块
API 蓝图前缀:/api
核心服务:
-
Text2SQLEngine(services/text2sql_engine.py):LLM 驱动的自然语言转 SQL 查询 -
LLMService(services/llm_service.py):LLM 服务封装(Ollama / OpenAI)
功能说明:
用户可以使用自然语言描述查询需求,系统通过 LLM 将自然语言转换为 SQL 查询语句,直接查询股票数据。
LLM 配置:
| 配置 | 默认值 | 说明 |
|---|---|---|
| 默认提供商 | Ollama | 本地 LLM 服务 |
| 默认模型 | qwen2.5-coder | 阿里通义千问代码模型 |
| 可选提供商 | OpenAI API | 通过 LLM_CONFIG 配置切换 |
2.9 实时分析报告模块
API 蓝图前缀:/api/realtime-analysis/*
核心服务:
-
RealtimeReportGenerator(services/realtime_report_generator.py):分析报告生成器
功能:基于实时行情数据和分析结果,自动生成可视化分析报告,涵盖市场概况、板块表现、个股分析等内容。
2.10 WebSocket 推送模块
API 蓝图前缀:/api/websocket/*
核心服务:
-
WebSocketPushService(app/websocket/websocket_push_service.py):WebSocket 推送服务
功能:通过 WebSocket 实现数据的实时推送,支持实时行情、交易信号、风险预警等信息的即时通知。
三、系统架构概览
quantitative_analysis/
├── app/ # 应用主目录
│ ├── __init__.py # Flask 工厂模式 (create_app)
│ ├── extensions.py # 扩展初始化 (SQLAlchemy, SocketIO, Redis)
│ ├── api/ # API 蓝图
│ │ ├── analysis_api.py # 市场分析 API
│ │ ├── ml_factor_api.py # ML 因子管理 API
│ │ ├── realtime_analysis.py # 实时分析 API
│ │ ├── realtime_indicators.py # 实时指标 API
│ │ ├── realtime_signals.py # 交易信号 API
│ │ ├── realtime_monitor.py # 实时监控 API
│ │ ├── realtime_risk.py # 风险管理 API
│ │ ├── realtime_report.py # 分析报告 API
│ │ ├── text2sql_api.py # 自然语言查询 API
│ │ ├── data_jobs_api.py # 数据下载任务 API
│ │ └── websocket_api.py # WebSocket 管理 API
│ ├── models/ # 数据模型 (SQLAlchemy + Parquet 事件)
│ ├── services/ # 核心业务服务
│ ├── routes/ # 页面路由 (HTML 渲染)
│ ├── templates/ # Jinja2 HTML 模板
│ ├── static/ # CSS / JS / 图片
│ ├── utils/ # 数据下载脚本 (通达信/Baostock/Tushare)
│ ├── websocket/ # WebSocket 推送服务
│ └── services/tongdaxin/ # 通达信行情客户端
├── data/ # 数据目录
│ ├── stock_minute/ # 分钟级行情 Parquet
│ ├── ml_factor_state/ # ML 因子状态 Parquet
│ └── realtime_events/ # 实时事件 Parquet
├── tests/ # 测试用例
├── acceptance/ # 验收标准与里程碑
├── config.py # 配置管理
├── run.py # Web 启动入口
└── run_system.py # 初始化与诊断工具
四、核心服务一览
| 服务 | 文件 | 职责 |
|---|---|---|
| FactorEngine | services/factor_engine.py |
内置因子计算与自定义因子管理 |
| FactorExpressionEngine | services/factor_expression_engine.py |
白名单校验的自定义因子公式引擎 |
| MLModelManager | services/ml_models.py |
XGBoost / LightGBM / RandomForest 模型生命周期 |
| ModelTrainingJobService | services/model_training_job_service.py |
异步训练任务轮询与管理 |
| StockScoringEngine | services/stock_scoring.py |
因子评分与 ML 评分的综合选股引擎 |
| PortfolioOptimizer | services/portfolio_optimizer.py |
等权 / 均值方差 / 风险平价 / 因子中性 |
| BacktestEngine | services/backtest_engine.py |
单策略与多策略回测 |
| Text2SQLEngine | services/text2sql_engine.py |
LLM 驱动的自然语言转 SQL 查询 |
| RealtimeIndicatorEngine | services/realtime_indicator_engine.py |
实时技术指标计算 |
| RealtimeTradingSignalEngine | services/realtime_trading_signal_engine.py |
多策略交易信号生成与融合 |
| RealtimeRiskManager | services/realtime_risk_manager.py |
风险指标、预警管理、压力测试 |
| DataJobs | services/data_jobs/ |
数据下载任务执行器(Inline / Celery) |
五、API 蓝图一览
| URL 前缀 | 功能域 |
|---|---|
/api |
主 API — 股票、分析、Text2SQL |
/api/ml-factor/* |
因子管理、ML 模型、选股评分、组合优化 |
/api/data-jobs/* |
数据下载任务提交与状态查询 |
/api/realtime-analysis/* |
实时指标、信号、监控、风险、报告 |
/api/websocket/* |
WebSocket 管理端点 |
六、快速开始
1. 克隆 & 安装
git clone <repository-url>
cd quantitative_analysis
# 安装依赖
pip install -r requirements.txt
# 如遇兼容问题,使用最小依赖
pip install -r requirements_minimal.txt
2. 下载数据
下载预打包的 A 股历史数据,解压到 data/ 目录即可。也可通过系统内的数据管理页面在线更新。
3. 启动系统
# 启动 Web 服务
python run.py
# 访问地址
http://localhost:5000 # Web 界面
http://localhost:5000/api # API 入口
容器化启动(可选)
cp .env.example .env
docker compose up --build
默认启动 Web + SQLite + Redis;市场数据和 ML 因子状态仍使用本地 Parquet 文件。
七、配置说明
所有配置通过 config.py 管理,支持环境变量 .env 文件覆盖。
| 配置项 | 默认值 | 说明 |
|---|---|---|
DATA_SOURCE |
parquet |
数据源类型 |
SQLALCHEMY_DATABASE_URI |
SQLite | 应用状态数据库 |
REDIS_HOST / REDIS_PORT |
localhost:6379 |
Redis 连接(Celery/缓存) |
FLASK_ENV |
development |
运行环境 |
DATA_JOB_EXECUTION_MODE |
inline |
任务执行模式(inline / celery) |
LLM_CONFIG |
Ollama (qwen2.5-coder) | LLM 提供商配置 |
八、项目定位
✅ 适用场景
- 量化交易入门学习
- 策略研究与验证
- 二次开发与定制
- 量化系统架构参考
❌ 不适用场景
- 直接用于实盘交易
- 高频交易系统
九、版本历史
| 版本 | 日期 | 内容 |
|---|---|---|
| v1.0.0 | 2025-06-01 | 多因子选股系统初始版本:因子管理和计算、机器学习模型集成、组合优化、回测验证引擎、Web 界面和 API 接口 |
| v2.0.0-parquet | 2026-06-06 | 架构升级:从 MySQL 迁移到 Parquet + SQLite,零外部数据库依赖。新增实时行情分析模块、通达信行情接入、日频数据中心、投资组合管理完整闭环、报告可视化、离线数据包 |
多因子选股系统 — 面向 A 股市场的全链路量化分析平台
MIT License
Top comments (0)