衍一量化交易系统

v1.6 | Python 3.12 | PyQt5 | Backtrader

📋 系统概览

衍一量化交易系统是一款面向 A 股市场的量化交易软件,集成了实时行情、策略回测、模拟交易、价值投资估值选股等功能。

功能模块 说明 对应标签页
行情 实时股票行情、K线图、自选股管理 实时行情 / 自选股
数据 历史数据下载、增量更新、财务数据、自动检查 数据管理
回测 单股/批量/组合策略回测、参数优化、模板保存、历史对比 策略回测 / 组合回测 / 批量回测 / 回测对比
交易 模拟交易 / QMT 实盘对接、交易日志导出 实盘交易 / 策略运行
估值 价值投资估值法五条件筛选、批量扫描、低估高亮 价值投资估值
趋势 趋势跟踪选股、海龟信号验证、全市场扫描 趋势选股策略
因子 20因子面板、PCA降维、IC-IR加权、候选股池 因子分析

🚀 安装与启动

开发环境启动

# 1. 激活 conda 环境
conda activate quant

# 2. 启动程序
python main.py

打包版本启动

双击 dist/衍一量化交易系统.exe 即可运行,无需安装 Python 环境。

⚠️ 注意事项

首次启动会自动创建 data_storage/sqlite/quant.db 数据库文件和必要的目录结构。

🎯 首次运行指南

  1. 配置数据源
    进入「数据管理」标签页 → 点击「🔑 Token」按钮 → 输入 Tushare Token(从 tushare.pro 注册获取)。不填也能用 akshare 免费数据
  2. 配置微信推送(可选)
    进入「策略运行」标签页 → 点击「🔑 SendKey」按钮 → 输入 Server酱 SendKey(从 sct.ftqq.com 获取)。用于策略信号微信推送
  3. 下载股票列表
    进入「数据管理」标签页,点击「更新股票列表」获取全市场股票代码
  4. 下载历史数据
    选择需要分析的股票,下载日线/周线/分钟线数据
  5. 开始回测或交易
    切换到「策略回测」或「实盘交易」标签页开始使用

📈 实时行情

功能说明

实时行情标签页提供 A 股市场的实时报价和 K 线图表。

数据来源

数据源用途状态
新浪 hq.sinajs.cn实时行情(主力)✅ 正常
腾讯 qt.gtimg.cn持仓盈亏计算✅ 正常
akshare股票列表、板块✅ 正常

操作说明

K 线图功能

💡 提示

行情数据每 3 秒自动刷新一次。网络异常时会自动切换备用数据源。北交所股票代码以 8 或 4 开头。

💾 数据管理

功能说明

数据管理标签页负责历史数据的下载、更新和维护。

自动更新机制

启动时自动检查数据时效性:

支持的周期

周期存储格式数据源说明
日线SQLite 表akshare / 新浪每日 OHLCV 数据
周线SQLite 表akshare周线 OHLCV 数据
1/5/15/30/60分钟SQLite 表新浪 HTTP分钟线数据(实时获取)

数据下载功能

API Token 配置

通过界面按钮即可配置 Tushare API Token,无需手动编辑配置文件:

  1. 点击「数据管理」页签中的「🔑 Token」按钮(橙色)
  2. 输入从 tushare.pro 获取的 API Token
  3. Token 自动保存到 data_storage/user_secrets.json
  4. 下次启动自动加载,无需重新输入
💡 提示

不配置 Tushare Token 不影响基础功能,系统会自动使用 akshare 免费数据源。Token 同样可通过「策略运行」页签的「🔑 SendKey」按钮配置 Server酱 微信推送。

财务数据更新

  1. 点击「更新财务数据」按钮
  2. 选择更新范围(全部 / 指定股票)
  3. 等待进度完成(支持断点续传)
  4. 可随时暂停/继续或取消
⚠️ 注意

财务数据更新耗时较长(全市场约 30-60 分钟),建议首次更新后使用增量更新。更新过程中会自动创建备份。

📊 策略回测

功能说明

对单只股票进行历史回测,验证策略有效性。

支持的策略(11种)

策略名称参数说明
双均线短期/长期周期均线金叉买,死叉卖
布林带周期/标准差突破上轨买,跌破下轨卖
MACD快/慢/信号周期金叉买,死叉卖
均线多头排列短期/中期/长期三线多头排列买入
RSI超买超卖周期/超买/超卖超卖区买,超买区卖
海龟交易法则入场/出场周期唐奇安通道突破
网格交易下限/上限/步长等差网格低买高卖
动量策略动量周期/阈值价格动量突破
ATR突破ATR周期/倍数波动率突破系统
双动量快/慢周期双时间框架动量
肯特纳通道周期/ATR倍数通道突破系统

策略参数模板

保存和加载常用的策略参数配置:

回测参数设置

回测结果

回测完成后显示:

参数优化

对策略参数进行自动优化:

📑 批量回测

功能说明

同时对多只股票运行同一策略,快速筛选出表现优秀的标的。使用 ThreadPoolExecutor 并行执行,充分利用多核 CPU。

操作步骤

  1. 在左上输入框粘贴股票代码列表(每行一个,或从自选股批量导入)
  2. 选择策略和参数(或加载已保存的模板)
  3. 设置初始资金、佣金、滑点等参数
  4. 点击「开始批量回测」
  5. 等待结果表格生成(右上角显示进度和耗时)

结果解读

指标说明优秀标准
总收益率回测期间总回报> 50%
年化收益折算年化回报率> 15%
最大回撤最大资金回落幅度< 20%
夏普比率风险调整后收益> 1.0
卡玛比率收益与最大回撤比> 2.0
胜率盈利交易占比> 50%
盈亏比平均盈利/平均亏损> 1.5

导出功能

📂 组合回测

功能说明

构建多股票组合,测试策略在组合层面的表现。支持等权重或自定义权重分配。

功能特点

💡 提示

组合回测支持等权重分配或自定义权重,可对比不同组合配置的风险收益特征。建议使用「批量回测」先筛选出表现好的股票,再构建组合。

🔬 回测结果对比

功能说明

从回测历史数据库中加载多组回测记录,进行并排指标对比和多维度图表可视化分析。

操作步骤

  1. 菜单栏 → 工具 → 回测结果对比
  2. 在左侧历史记录表中勾选 2~8 条需要对比的回测记录
  3. 可使用顶部「策略」「股票」下拉框筛选记录
  4. 点击 开始对比分析 按钮
  5. 右侧图表区切换标签页查看不同维度的对比图表

图表类型

其他功能

💡 提示

净值曲线数据存储在回测记录的 value_history 列中。旧版本保存的记录可能不含此数据,需要重新运行回测以生成完整对比图表。

💰 实盘交易

功能说明

提供模拟交易和 QMT 实盘交易两种模式。

模拟交易

交易日志导出

将交易记录导出为 CSV 或 Excel 文件:

  1. 在「当日委托」区域点击「📤 导出日志」按钮
  2. 选择保存路径和格式(CSV 或 Excel)
  3. 导出文件包含:订单编号、股票代码、方向、委托价格、成交数量、成交均价、佣金、滑点等
💡 提示

导出功能支持按日期范围和股票代码过滤,方便进行税务申报或交易分析。

QMT 实盘(需开户)

  1. 在国金证券开通 miniQMT 权限
  2. 安装 xtquant:pip install xtquant
  3. 启动国金证券 miniQMT 客户端
  4. 在交易面板切换模式为「实盘」并点击「连接」
🚨 风险提示

实盘交易涉及真实资金,请确保充分测试策略后再切换实盘模式。首次使用建议先用模拟交易熟悉操作流程。

⚡ 策略运行

功能说明

实时运行策略,自动扫描市场并生成交易信号。

运行模式

模式数据源是否下单适用场景
回测模式本地历史数据否策略验证
信号模式实时数据仅提醒观察信号质量
模拟模式实时数据模拟下单模拟盘验证
实盘模式实时数据真实下单实盘交易

股票池来源

操作步骤

  1. 选择股票池(全部自选 / 自定义列表 / 板块筛选)
  2. 选择要运行的策略(可多选并行运行)
  3. 配置策略参数(或加载模板)
  4. 设置扫描间隔(默认 60 秒)和资金分配比例
  5. 点击「开始运行」
  6. 在信号日志区查看实时信号和持仓变化

风控机制

💡 提示

信号去重机制会避免同一股票在同一方向重复发出信号。切换模式时会自动重置信号记录。点击「🔑 SendKey」按钮可配置 Server酱 微信推送,SendKey 自动持久化到 data_storage/user_secrets.json。

🎯 价值投资估值

功能说明

基于价值投资方法,通过五条件筛选优质股票并计算合理估值(估值逻辑参考唐朝先生《价值投资实战手册》)。

五条件筛选

条件标准说明
前置条件上市满3年新股IPO招股书财务数据可能美化,必须经历至少3年市场检验(v1.4新增)
条件1经营现金流 > 净利润 > 0利润有现金支撑
条件2销售商品收到现金 ≥ 营业收入收入真实可靠
条件3投资现金流出 ≈ 经营现金流入投资规模合理
条件4有息负债率低财务风险可控
条件5期末现金及等价物充足偿债能力充足

估值计算

操作步骤

  1. 确保财务数据已更新(数据管理页)
  2. 输入单股代码分析,或点击「批量筛选」扫描全市场
  3. 查看通过五条件的股票列表(代码/名称/市值/合理估值/低估幅度)
  4. 点击「历史记录」查看过往筛选结果
  5. 点击「日期对比」对比不同报告期的财务变化
  6. 可导出 Excel、生成 HTML 报告,或一键加入自选股

财务数据管理

💡 提示

批量筛选支持断点续传,中断后可从上次位置继续。结果自动保存到 SQLite 数据库。筛选过程在后台线程执行,可暂停/继续。

📈 趋势选股策略(TESS v2)

功能说明

基于 TESS v2 趋势评估引擎,对全市场股票进行五维量化评分,自动分类为加速期/持续期/蓄力期三个阶段,辅助趋势交易决策。

五维评分体系

维度指标说明
持续性Hurst 指数衡量趋势记忆性(>0.5 趋势持续)
稳定性R²(拟合优度)趋势线性度(>0.6 趋势清晰)
方向性ADX 趋势强度趋势动力(>20 进入趋势、>30 强趋势)
超额收益Alpha 超额相对于市场基准的超额回报
成长性年化斜率价格增长速度(年化百分比)

三阶段分类

新功能

操作步骤

  1. 选择数据源(全市场 / 自选股分组)
  2. 点击「🧹 刷新缓存」更新 K 线数据
  3. 点击「🔍 开始扫描」
  4. 等待扫描完成(缓存命中约 5-10 秒)
  5. 查看按评分排名的候选列表
  6. 悬停查看五维雷达图详情
  7. 可「加入自选」、「回测选中」、「微信推送」、「导出Excel」
💡 提示

首次扫描建议先「刷新缓存」获取完整 K 线数据。后续扫描直接从缓存读取,速度极快。调试日志区显示详细处理进度和评分分布。

🧬 因子分析

功能说明

多因子量化选股引擎,基于 20 个基本面/技术面/市场面因子,通过 PCA 降维和 IC-IR 加权,生成综合评分和候选股池。

20 因子体系

类别因子说明方向
技术面mom_1m1月动量+
mom_3m3月动量+
mom_6m6月动量+
vol_1m1月波动率-(低波好)
vol_3m3月波动率-(低波好)
turnover换手率-(低换手好)
pdiPDI上升动向+
mdiMDI下降动向-(低MDI好)
pdi_mdiPDI/MDI比+
adxADX趋势强度+
估值pe_ttm市盈率TTM-(低PE好)
pb市净率-(低PB好)
ep_ratio盈利收益率+
财务roe净资产收益率+
debt_ratio负债率-(低负债好)
profit_growth利润增速+
rev_growth营收增速+
市场market_cap市值(亿元)-(小市值偏好)
listed_years上市年限-(老股更稳)
复合trend_score趋势评分(TESS)+

核心指标

三 Tab 可视化

新功能

操作步骤

  1. 首次使用:点击「🚀 构建面板 + 拟合引擎」(约 15-30 分钟,4543 只 × 118 截面)
  2. 选择「预测周期」(推荐 fwd_ret_20d,信号更稳定)
  3. 设置「滚动窗口」(默认 26 期 ≈ 半年)
  4. 查看 IC 排行榜,关注 |IR|>0.5 的有效因子
  5. 切换「Pearson / Spearman」观察差异
  6. 查看三 Tab 可视化,判断因子稳定性
  7. 查看「当期因子权重」和「候选股 TOP30」
  8. 双击候选股查看详情弹窗
  9. 点击「⭐ 加入自选股」批量导入

实盘集成

💡 提示

面板构建完成后数据自动持久化,下次启动直接加载。如需更新数据(如新增财务数据),点击「重建面板」重新拟合。Walk-Forward 验证采用滚动样本外方法检验因子预测力,防范过拟合,结果仅供研究参考,不构成投资建议。

⚠️ 注意

因子分析基于历史数据,不代表未来收益。建议结合趋势选股(TESS)和价值投资估值综合决策,避免单一因子依赖。

⭐ 自选股管理

功能说明

管理关注的股票列表,支持从多个入口添加。

添加方式

功能特点

💡 提示

自选股是策略运行的默认股票池。合理的分组管理可以大大提高策略扫描效率。

📦 打包发布

打包命令

# 方法1:使用 build 脚本
python build_exe.py

# 方法2:直接使用 PyInstaller
pyinstaller 衍一量化交易系统.spec

打包配置要点

配置项说明
console=False发布时不显示控制台(已修复 stdout 兜底)
collect_all自动收集 numpy/scipy/pyarrow/sqlalchemy 等依赖
hiddenimports声明 backtrader/sklearn/deap/skopt 等隐藏导入
binaries包含 Conda DLL(ffi/lzma/sqlite 等)
certifi打包 SSL 证书,确保 HTTPS 请求正常
datas包含 logo.ico、docs/ 等静态资源
⚠️ 常见问题

如果打包后运行报错「所有数据源均不可用」,检查 main.py 的 stdout/stderr 兜底代码是否在 import 之前。打包后图标不显示需检查 _resolve_icon_path() 方法。

🔧 故障排查

常见问题

1. 行情数据获取失败

现象原因解决
所有数据源不可用console=False 时 stdout 为 None修复 main.py 兜底代码
东财接口超时运营商屏蔽 push2 域名已切换新浪/腾讯源
akshare 返回 NoneSSL 证书问题打包时包含 certifi

2. 数据库错误

现象原因解决
database is locked多线程并发访问使用 with 语句 + WAL 模式
表列数不匹配Schema 版本不一致自动重建表(保留 K 线数据)
找不到 stock_list表名不一致统一使用 stock_list 表

3. 策略运行问题

现象原因解决
self.params 为 None策略实例化方式错误使用 cerebro.addstrategy()
无信号产生本地数据不足/策略未触发检查数据完整性
qty=0 错误资金分配比例太小调整为 30% 或固定金额
int + slice 错误backtrader LineBuffer 切片不兼容改用 .get(size=n)
所有数据源不可用打包后 SSL/stdout 问题检查 main.py 顶部兜底代码

4. 打包问题

现象原因解决
双击无反应console=False + stdout 问题main.py 加兜底
DLL load failed缺少 Conda DLLspec 文件添加 binaries
ImportError隐藏导入未声明hiddenimports 补充

⌨️ 快捷键

快捷键功能适用场景
Ctrl+R刷新行情实时行情页
Ctrl+S保存配置全局
Ctrl+Q退出程序全局
F5开始回测策略回测页
F9开始/停止策略策略运行页
Delete删除选中股票自选股/行情页
Ctrl+A全选表格多选
Ctrl+Shift+E导出数据数据管理页

衍一量化交易系统 | 基于 Python + PyQt5 + Backtrader 构建

文档版本 v1.6 | 2026-08-7