一个用于学习和二次开发的多因子选股系统原型,当前包含因子计算、机器学习建模、股票选择、组合优化和回测验证等模块的基础实现。
本项目目前仍处于原型阶段,仅适合学习、研究和二次开发,不应视为完整交付版量化平台。
- 适用场景:功能验证、学习交流、二次开发
- 不适用场景:未经补齐前直接作为实盘、生产交付或完整商业系统
- 当前原则:主路径只保留真实可用能力,演示/占位/模拟能力持续下线中
- 实时行情分析当前仅做设计,不进入开发范围
如需定制化开发,可联系 39189996@qq.com。
- 内置因子计算基础链路
- 自定义因子表达式白名单校验
- 机器学习模型创建与真实训练任务轮询
- 模型删除前后端入口已打通
- 基础选股评分
- 等权重、均值方差、风险平价、因子中性组合优化
- 基础回测结果返回与前后端字段对齐
- 投资组合页面已具备真实创建、详情、持仓增删改、组合删除和优化结果落库能力
- 分析报告页已移除演示数据,但总结与管理能力仍较弱
- 投资组合页面已下线演示数据,再平衡入口与更完整的批量运维能力仍待补齐
- 实时分析已清理 demo/mock 主路径,但真实数据接入与推送能力仍需继续完善
- Black-Litterman、行业约束等高级优化能力
- 稳定的报告管理闭环,当前仅保留报告列表与生成功能入口
- 统一的数据来源审计与功能状态标记机制
- 完善因子构建
- 完善基础策略开发
- 完善投资组合真实管理闭环
- 实时行情分析仅保留设计稿与接口预留,暂不进入开发实施
新版本开发中,演示地址:http://223.4.156.201:5173/
-- 数据更新到2026年02月13日,包含历史行情、基本面、技术面、资金流入、筹码分布。 -- 通过网盘分享的文件:stock_data_20260213.zip 链接: https://pan.baidu.com/s/1XYMvl_OAnFycV8bOBkyQ0g?pwd=ctfq 提取码: ctfq -- 如果有tushare接口,可以直接通过 quantitative_analysis/app/utils 目录下的文件直接下载,例如:
# 下载历史行情数据:
# 首先进入下载工具的目录
cd app/utils
# tushare数据下载
# 先下载交易日期数据,所有下载数据接口都依赖这个文件
python trade_calendar.py
# 下载所有股票列表,所有按股票代码下载的数据接口都依赖这个文件
python stock_basic.py
# 运行历史数据,根据自己的需要,修改下载日期,代码在第33-34行,例如:
and cal_date >= '2025-01-01'
and cal_date <= '2025-12-31'
# 然后运行,下载天数越多,下载时间越长
python daily_history_by_date.py
# baostock 数据下载
# 日线
python baostock_daily.py
# 分钟线 min5.py min15.py min30.py min60.py
python min5.py
- 📊 因子管理: 内置因子和受限自定义因子能力
- 🤖 机器学习: 支持随机森林、XGBoost、LightGBM 等模型定义与训练
- 🎯 基础选股评分: 支持基础因子评分与 ML 选股链路
- 📈 组合优化: 当前仅保留已验证的优化方法
- 🔄 回测验证: 提供基础回测结果和多策略比较能力
- 📋 分析页面: 仅展示真实返回结果,不再自动填充演示数据
- 后端: Python 3.8+ / Flask / SQLAlchemy
- 数据处理: Pandas / NumPy / Scikit-learn
- 机器学习: XGBoost / LightGBM / CVXPY
- 前端: Bootstrap 5 / JavaScript
- 数据库: MySQL / SQLite
- Python 3.8+
- MySQL 5.7或8.x
# 克隆项目
git clone <repository-url>
cd quantitative_analysis
# 安装依赖
pip install -r requirements.txtcp .env.example .env
docker compose up --build# 常规启动入口
python run.py常规 Web 启动统一使用 python run.py。
run.py:唯一标准 Web 启动入口run_system.py用于初始化与诊断:检查依赖、校验数据库和补建基础表,不作为日常启动入口
run_system.py 用于初始化与诊断,不作为日常启动入口。
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
- Web界面: http://localhost:5000
- API入口: http://localhost:5000/api
运行 python run.py 后,系统会输出启动检查摘要,并默认在开发环境下启动 Web 服务。
运行 python run_system.py 后,可执行以下操作:
- 检查系统依赖 - 验证Python版本和必需包
- 初始化数据库 - 创建数据表和内置因子
- 启动Web服务器 - 启动开发模式服务器(调试用途)
- 启动Web服务器(生产模式) - 启动生产模式服务器
- 运行系统演示 - 运行当前已接通功能入口
- 显示系统信息 - 查看系统功能概览
- 查看系统状态和统计信息
- 快速访问主要功能
- 查看内置因子列表
- 创建自定义因子
- 计算因子值
- 创建机器学习模型
- 训练模型
- 模型预测
- 基于因子的选股
- 基于ML模型的选股
- 配置选股参数
- 多种优化方法
- 约束条件设置
- 权重分配结果
- 行业分析
- 因子贡献度分析
- 单策略回测
- 多策略比较
- 失败时不再自动展示模拟结果
import requests
# 获取因子列表
response = requests.get('http://localhost:5000/api/ml-factor/factors/list')
# 创建自定义因子
factor_data = {
"factor_id": "custom_momentum",
"factor_name": "自定义动量因子",
"factor_type": "momentum",
"factor_formula": "close.pct_change(10)",
"description": "10日价格变化率"
}
response = requests.post('http://localhost:5000/api/ml-factor/factors/custom', json=factor_data)
# 计算因子值
calc_data = {
"trade_date": "2024-01-15",
"factor_ids": ["momentum_1d", "momentum_5d"]
}
response = requests.post('http://localhost:5000/api/ml-factor/factors/calculate', json=calc_data)# 创建模型
model_data = {
"model_id": "my_xgb_model",
"model_name": "我的XGBoost模型",
"model_type": "xgboost",
"factor_list": ["momentum_1d", "momentum_5d", "volatility_20d"],
"target_type": "return_5d"
}
response = requests.post('http://localhost:5000/api/ml-factor/models/create', json=model_data)
# 训练模型
train_data = {
"model_id": "my_xgb_model",
"start_date": "2023-01-01",
"end_date": "2023-12-31"
}
response = requests.post('http://localhost:5000/api/ml-factor/models/train', json=train_data)# 基于因子选股
selection_data = {
"trade_date": "2024-01-15",
"factor_list": ["momentum_1d", "momentum_5d"],
"method": "equal_weight",
"top_n": 50
}
response = requests.post('http://localhost:5000/api/ml-factor/scoring/factor-based', json=selection_data)
# 基于ML模型选股
ml_selection_data = {
"trade_date": "2024-01-15",
"model_ids": ["my_xgb_model"],
"top_n": 50
}
response = requests.post('http://localhost:5000/api/ml-factor/scoring/ml-based', json=ml_selection_data)# 组合优化
optimization_data = {
"expected_returns": {"000001.SZ": 0.05, "000002.SZ": 0.03},
"method": "mean_variance",
"constraints": {
"max_weight": 0.1,
"risk_aversion": 1.0
}
}
response = requests.post('http://localhost:5000/api/ml-factor/portfolio/optimize', json=optimization_data)stock_analysis/
├── app/ # 应用主目录
│ ├── api/ # API接口
│ ├── models/ # 数据模型
│ ├── services/ # 业务服务
│ ├── routes/ # 路由
│ └── utils/ # 工具函数
├── templates/ # HTML模板
├── static/ # 静态文件
├── examples/ # 使用示例
├── config.py # 配置文件
├── requirements.txt # 依赖包
├── run_system.py # 初始化与诊断工具
└── README.md # 说明文档
- 因子定义管理
- 因子值计算
- 支持自定义公式
- 模型创建和训练
- 预测和评估
- 支持多种算法
- 因子打分
- ML模型打分
- 综合评分
- 多种优化算法
- 约束条件支持
- 风险模型估计
- 策略回测
- 性能指标计算
- 多策略比较
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: 毛利率
在 config.py 中修改数据库连接:
# SQLite(不建议使用,数据太大,速度较慢)
SQLALCHEMY_DATABASE_URI = 'sqlite:///stock_analysis.db'
# MySQL (默认,建议用MySQL)
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:password@localhost/stock_analysis'LOG_LEVEL = 'INFO'
LOG_FILE = 'logs/app.log'系统提供当前已接通功能入口的演示:
# 运行当前演示入口
python examples/complete_system_example.py
# 或通过初始化/诊断工具运行
python run_system.py
# 选择 "5. 运行系统演示"演示内容包括:
- 因子管理演示
- 模型管理演示
- 股票选择演示
- 组合优化演示
- 集成选股和优化演示
- 回测验证演示
- 分析功能演示
系统支持的回测指标:
- 总收益率
- 年化收益率
- 年化波动率
- 夏普比率
- 最大回撤
- 胜率
- 卡尔玛比率
- 在因子管理界面创建因子定义
- 编写因子计算公式
- 测试因子计算结果
- 在
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.8-3.11
- Python 3.12 可能有部分包兼容性问题
-
数据库连接失败
- 检查数据库配置
- 确保数据库服务运行
- 验证连接权限
-
因子计算失败
- 检查数据是否存在
- 验证因子公式语法
- 查看日志错误信息
-
模型训练失败
- 确保有足够的训练数据
- 检查因子数据完整性
- 调整模型参数
- 多因子选股系统原型,适合继续补齐后再扩展使用
- 支持因子管理和计算
- 机器学习模型集成
- 组合优化功能
- 回测验证引擎
- Web界面和API接口
本项目采用 MIT 许可证。
欢迎提交Issue和Pull Request来改进这个项目。
如有问题或建议,请通过以下方式联系:
- 提交Issue
- 发送邮件:39189996@qq.com
多因子选股系统原型 - 适合继续补齐后再扩展使用。
现在可以在页面直接触发 app/utils 中的数据下载脚本,无需手工进入目录执行。
- 页面入口:
/realtime-analysis->日频数据中心 - API 前缀:
/api/data-jobs - 任务能力:提交、查询、重试、状态过滤、进度轮询、历史展示
开发环境默认使用 inline 执行模式:
- 运行
python run.py - 直接在页面提交任务
此模式下,日频数据中心任务会在当前 Web 进程内执行,无需额外启动 Celery Worker。
如需切换到队列模式,可显式设置 DATA_JOB_EXECUTION_MODE=celery,再额外启动 Worker:
celery -A app.celery_app.celery worker -l info -P solo# 提交任务
curl -X POST http://127.0.0.1:5000/api/data-jobs/submit \
-H 'Content-Type: application/json' \
-d '{"job_type":"daily_basic","params":{"start_date":"2026-01-01","end_date":"2026-01-31"}}'
# 查看最近任务
curl "http://127.0.0.1:5000/api/data-jobs/list?limit=20"
# 仅看失败任务
curl "http://127.0.0.1:5000/api/data-jobs/list?status=failed&limit=20"



















