DEV Community

Henry Lin
Henry Lin

Posted on

开源量化分析软件功能介绍

📈 多因子选股系统 — 项目功能介绍

观看地址: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 应用状态)
Enter fullscreen mode Exit fullscreen mode

技术栈

类别 技术
后端框架 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/*

核心服务

  • RealtimeIndicatorEngineservices/realtime_indicator_engine.py):实时技术指标计算
  • RealtimeTradingSignalEngineservices/realtime_trading_signal_engine.py):多策略交易信号生成与融合

功能特性

功能 说明
实时指标计算 支持 MACD、KDJ、RSI、布林带等经典技术指标的实时计算与展示
多策略信号生成 基于不同策略的交易信号生成,支持信号融合与综合研判
信号监控 交易信号的实时监控与历史回溯
策略回测 对生成的信号进行历史回测验证
板块分析 板块表现统计与异动检测
市场情绪 市场情绪指标的实时追踪

数据源:通达信分钟级行情数据,存储于 data/stock_minute/(Parquet 格式)。


2.2 因子与选股模块

API 蓝图前缀/api/ml-factor/*/api

核心服务

  • FactorEngineservices/factor_engine.py):内置因子计算与自定义因子管理
  • FactorExpressionEngineservices/factor_expression_engine.py):白名单校验的自定义因子公式引擎
  • StockScoringEngineservices/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/*

核心服务

  • MLModelManagerservices/ml_models.py):XGBoost / LightGBM / RandomForest 模型生命周期管理
  • ModelTrainingJobServiceservices/model_training_job_service.py):异步训练任务轮询与管理

功能特性

功能 说明
模型创建 支持 XGBoost、LightGBM、RandomForest 三大算法的模型创建
模型训练 支持同步与异步训练,异步训练通过 Celery 或内联模式执行
模型预测 训练完成的模型可直接用于股票预测
特征工程 因子组合与特征选择
性能评估 模型性能评估与多模型比较
训练任务管理 异步训练任务的提交、状态查询与管理

2.4 组合优化模块

API 蓝图前缀/api/ml-factor/*

核心服务

  • PortfolioOptimizerservices/portfolio_optimizer.py):等权 / 均值方差 / 风险平价 / 因子中性

优化方法

方法 说明 适用场景
等权重优化 所有股票分配相同权重 简单基准、等权组合
均值方差优化 基于 Markowitz 理论的均值-方差优化 追求风险调整后收益最大化
风险平价优化 基于风险贡献均衡的权重分配 风险均衡配置
因子中性组合 控制因子暴露度在中性水平 消除特定因子风险暴露

2.5 回测验证模块

API 蓝图前缀/api/ml-factor/*

核心服务

  • BacktestEngineservices/backtest_engine.py):单策略与多策略回测

回测能力

功能 说明
单策略回测 对单个选股策略进行历史回测验证
多策略比较 同时运行多个策略并比较绩效表现
年化收益率 计算策略的年化收益
夏普比率 风险调整后收益指标
最大回撤 策略的最大净值回撤幅度
胜率 盈利交易占比
卡尔玛比率 年化收益与最大回撤的比值

回测结果以可视化图表形式展示,支持净值曲线、收益分布等多种视图。


2.6 风险管理模块

API 蓝图前缀/api/realtime-analysis/*

核心服务

  • RealtimeRiskManagerservices/realtime_risk_manager.py):风险指标、预警管理、压力测试

功能特性

功能 说明
投资组合持仓 CRUD 创建、查询、更新、删除投资组合持仓记录
实时价格刷新 通过通达信接口获取实时行情价格
风险指标监控 实时计算并展示组合风险指标
预警管理 设定预警规则,触发时自动通知
压力测试 模拟极端市场场景,分析组合表现

2.7 数据管理模块

API 蓝图前缀/api/data-jobs/*

核心服务

  • DataJobsservices/data_jobs/):数据下载任务执行器

数据架构

存储 用途 说明
Parquet 文件 市场行情数据 高性能列式存储,承载日线/分钟线行情、基本面、技术面、资金流数据
SQLite 数据库 应用状态 轻量级存储,管理持仓、报告、预警等低并发元数据
Redis 缓存 任务队列 & 缓存 Celery 任务 Broker、实时数据缓存、WebSocket 消息分发(可选)

数据下载工具(位于 app/utils/):

工具 数据源 说明
trade_calendar.py Tushare / Baostock 交易日历下载
stock_basic.py Tushare / Baostock 股票基本信息下载
其他数据脚本 Tushare / Baostock 行情、财务等数据下载

注意:下载顺序为 trade_calendar.pystock_basic.py → 其他脚本。

任务执行模式(通过 DATA_JOB_EXECUTION_MODE 环境变量控制):

  • inline(默认开发模式):在 Web 进程中直接执行,无需 Celery
  • celery(默认生产模式):通过 Celery Worker 异步执行,需要 Redis

2.8 Text2SQL 自然语言查询模块

API 蓝图前缀/api

核心服务

  • Text2SQLEngineservices/text2sql_engine.py):LLM 驱动的自然语言转 SQL 查询
  • LLMServiceservices/llm_service.py):LLM 服务封装(Ollama / OpenAI)

功能说明

用户可以使用自然语言描述查询需求,系统通过 LLM 将自然语言转换为 SQL 查询语句,直接查询股票数据。

LLM 配置

配置 默认值 说明
默认提供商 Ollama 本地 LLM 服务
默认模型 qwen2.5-coder 阿里通义千问代码模型
可选提供商 OpenAI API 通过 LLM_CONFIG 配置切换

2.9 实时分析报告模块

API 蓝图前缀/api/realtime-analysis/*

核心服务

  • RealtimeReportGeneratorservices/realtime_report_generator.py):分析报告生成器

功能:基于实时行情数据和分析结果,自动生成可视化分析报告,涵盖市场概况、板块表现、个股分析等内容。


2.10 WebSocket 推送模块

API 蓝图前缀/api/websocket/*

核心服务

  • WebSocketPushServiceapp/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                    # 初始化与诊断工具
Enter fullscreen mode Exit fullscreen mode

四、核心服务一览

服务 文件 职责
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
Enter fullscreen mode Exit fullscreen mode

2. 下载数据

下载预打包的 A 股历史数据,解压到 data/ 目录即可。也可通过系统内的数据管理页面在线更新。

3. 启动系统

# 启动 Web 服务
python run.py

# 访问地址
http://localhost:5000    # Web 界面
http://localhost:5000/api # API 入口
Enter fullscreen mode Exit fullscreen mode

容器化启动(可选)

cp .env.example .env
docker compose up --build
Enter fullscreen mode Exit fullscreen mode

默认启动 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)