衍一量化交易系统
📋 系统概览
衍一量化交易系统是一款面向 A 股市场的量化交易软件,集成了实时行情、策略回测、模拟交易、价值投资估值选股等功能。
| 功能模块 | 说明 | 对应标签页 |
|---|---|---|
| 行情 | 实时股票行情、K线图、自选股管理 | 实时行情 / 自选股 |
| 数据 | 历史数据下载、增量更新、财务数据、自动检查 | 数据管理 |
| 回测 | 单股/批量/组合策略回测、参数优化、模板保存、历史对比 | 策略回测 / 组合回测 / 批量回测 / 回测对比 |
| 交易 | 模拟交易 / QMT 实盘对接、交易日志导出 | 实盘交易 / 策略运行 |
| 估值 | 价值投资估值法五条件筛选、批量扫描、低估高亮 | 价值投资估值 |
| 趋势 | 趋势跟踪选股、海龟信号验证、全市场扫描 | 趋势选股策略 |
| 因子 | 20因子面板、PCA降维、IC-IR加权、候选股池 | 因子分析 |
🚀 安装与启动
开发环境启动
# 1. 激活 conda 环境
conda activate quant
# 2. 启动程序
python main.py
打包版本启动
双击 dist/衍一量化交易系统.exe 即可运行,无需安装 Python 环境。
首次启动会自动创建 data_storage/sqlite/quant.db 数据库文件和必要的目录结构。
🎯 首次运行指南
-
配置数据源
进入「数据管理」标签页 → 点击「🔑 Token」按钮 → 输入 Tushare Token(从 tushare.pro 注册获取)。不填也能用 akshare 免费数据 -
配置微信推送(可选)
进入「策略运行」标签页 → 点击「🔑 SendKey」按钮 → 输入 Server酱 SendKey(从 sct.ftqq.com 获取)。用于策略信号微信推送 -
下载股票列表
进入「数据管理」标签页,点击「更新股票列表」获取全市场股票代码 -
下载历史数据
选择需要分析的股票,下载日线/周线/分钟线数据 -
开始回测或交易
切换到「策略回测」或「实盘交易」标签页开始使用
📈 实时行情
功能说明
实时行情标签页提供 A 股市场的实时报价和 K 线图表。
数据来源
| 数据源 | 用途 | 状态 |
|---|---|---|
| 新浪 hq.sinajs.cn | 实时行情(主力) | ✅ 正常 |
| 腾讯 qt.gtimg.cn | 持仓盈亏计算 | ✅ 正常 |
| akshare | 股票列表、板块 | ✅ 正常 |
操作说明
- 输入股票代码(如
000001或600519)按回车添加 - 右键点击表格行可「加入自选股」、「加入批量回测」或「加入趋势扫描」
- 双击股票行打开 K 线图
- 支持多选(Ctrl+点击)批量操作
- 拖拽股票行可调整显示顺序
K 线图功能
- 支持日线、周线、分钟线切换
- 鼠标滚轮缩放,拖拽平移
- 显示均线(MA5/MA10/MA20/MA60)
- 右键菜单支持技术指标切换
行情数据每 3 秒自动刷新一次。网络异常时会自动切换备用数据源。北交所股票代码以 8 或 4 开头。
💾 数据管理
功能说明
数据管理标签页负责历史数据的下载、更新和维护。
自动更新机制
启动时自动检查数据时效性:
- 首次启动:提示下载股票列表和历史数据
- 日常启动:检测日线数据是否过期(超过 1 天未更新)
- 过期提示:状态栏显示「数据已过期,建议更新」
- 手动检查:点击「🔄 自动检查更新」按钮立即检查
支持的周期
| 周期 | 存储格式 | 数据源 | 说明 |
|---|---|---|---|
| 日线 | SQLite 表 | akshare / 新浪 | 每日 OHLCV 数据 |
| 周线 | SQLite 表 | akshare | 周线 OHLCV 数据 |
| 1/5/15/30/60分钟 | SQLite 表 | 新浪 HTTP | 分钟线数据(实时获取) |
数据下载功能
- 单股票下载:输入代码,选择周期和日期范围
- 批量下载:支持多代码逗号分隔,后台线程执行
- 增量更新:只下载本地缺失的数据,避免重复
- 数据清洗:自动检测并修复异常值、缺失值
API Token 配置
通过界面按钮即可配置 Tushare API Token,无需手动编辑配置文件:
- 点击「数据管理」页签中的「🔑 Token」按钮(橙色)
- 输入从 tushare.pro 获取的 API Token
- Token 自动保存到
data_storage/user_secrets.json - 下次启动自动加载,无需重新输入
不配置 Tushare Token 不影响基础功能,系统会自动使用 akshare 免费数据源。Token 同样可通过「策略运行」页签的「🔑 SendKey」按钮配置 Server酱 微信推送。
财务数据更新
- 点击「更新财务数据」按钮
- 选择更新范围(全部 / 指定股票)
- 等待进度完成(支持断点续传)
- 可随时暂停/继续或取消
财务数据更新耗时较长(全市场约 30-60 分钟),建议首次更新后使用增量更新。更新过程中会自动创建备份。
📊 策略回测
功能说明
对单只股票进行历史回测,验证策略有效性。
支持的策略(11种)
| 策略名称 | 参数 | 说明 |
|---|---|---|
| 双均线 | 短期/长期周期 | 均线金叉买,死叉卖 |
| 布林带 | 周期/标准差 | 突破上轨买,跌破下轨卖 |
| MACD | 快/慢/信号周期 | 金叉买,死叉卖 |
| 均线多头排列 | 短期/中期/长期 | 三线多头排列买入 |
| RSI超买超卖 | 周期/超买/超卖 | 超卖区买,超买区卖 |
| 海龟交易法则 | 入场/出场周期 | 唐奇安通道突破 |
| 网格交易 | 下限/上限/步长 | 等差网格低买高卖 |
| 动量策略 | 动量周期/阈值 | 价格动量突破 |
| ATR突破 | ATR周期/倍数 | 波动率突破系统 |
| 双动量 | 快/慢周期 | 双时间框架动量 |
| 肯特纳通道 | 周期/ATR倍数 | 通道突破系统 |
策略参数模板
保存和加载常用的策略参数配置:
- 保存模板:设置好参数后点击「保存策略参数」,输入模板名称(如「海龟-保守型」)
- 加载模板:点击「加载策略参数」,从列表中选择已保存的模板
- 删除模板:点击「删除策略模板」,清理不再使用的配置
- 模板存储在
templates/目录,JSON 格式
回测参数设置
- 初始资金:默认 100,000 元
- 回测周期:日线 / 周线 / 分钟线
- 佣金率:默认 0.1%(双向)
- 滑点:默认 0.1%
回测结果
回测完成后显示:
- 净值曲线图(pyqtgraph),支持保存和多曲线对比
- 关键指标:总收益率、年化收益、最大回撤、夏普比率、卡玛比率、胜率、盈亏比
- 交易清单:每笔买卖的日期、价格、盈亏、持仓天数
- 月度收益分布图和滚动夏普比率
- 支持导出 CSV、PNG、PDF、HTML 报告
参数优化
对策略参数进行自动优化:
- 网格搜索:遍历所有参数组合,找到最优解
- 贝叶斯优化:智能搜索,适合参数空间大的情况
- 遗传算法:进化策略,适合非凸优化问题
- 优化结果自动保存到历史记录,支持查看和对比
📑 批量回测
功能说明
同时对多只股票运行同一策略,快速筛选出表现优秀的标的。使用 ThreadPoolExecutor 并行执行,充分利用多核 CPU。
操作步骤
- 在左上输入框粘贴股票代码列表(每行一个,或从自选股批量导入)
- 选择策略和参数(或加载已保存的模板)
- 设置初始资金、佣金、滑点等参数
- 点击「开始批量回测」
- 等待结果表格生成(右上角显示进度和耗时)
结果解读
| 指标 | 说明 | 优秀标准 |
|---|---|---|
| 总收益率 | 回测期间总回报 | > 50% |
| 年化收益 | 折算年化回报率 | > 15% |
| 最大回撤 | 最大资金回落幅度 | < 20% |
| 夏普比率 | 风险调整后收益 | > 1.0 |
| 卡玛比率 | 收益与最大回撤比 | > 2.0 |
| 胜率 | 盈利交易占比 | > 50% |
| 盈亏比 | 平均盈利/平均亏损 | > 1.5 |
导出功能
- 导出 CSV:完整结果表格
- 导出图片:净值曲线对比图
- 导出 PDF:包含图表和指标的报告
- 导出 HTML:交互式报告(含详细交易记录)
📂 组合回测
功能说明
构建多股票组合,测试策略在组合层面的表现。支持等权重或自定义权重分配。
功能特点
- 多策略并行运行,每个股票可配置不同策略
- 组合净值曲线与单股曲线对比
- 组合层面的风险指标:组合波动率、Beta、Alpha
- 支持保存多组组合配置,快速切换对比
组合回测支持等权重分配或自定义权重,可对比不同组合配置的风险收益特征。建议使用「批量回测」先筛选出表现好的股票,再构建组合。
🔬 回测结果对比
功能说明
从回测历史数据库中加载多组回测记录,进行并排指标对比和多维度图表可视化分析。
操作步骤
- 菜单栏 → 工具 → 回测结果对比
- 在左侧历史记录表中勾选 2~8 条需要对比的回测记录
- 可使用顶部「策略」「股票」下拉框筛选记录
- 点击 开始对比分析 按钮
- 右侧图表区切换标签页查看不同维度的对比图表
图表类型
- 雷达图:多组结果的收益率、Sharpe、卡玛比率、胜率、盈亏比五维对比
- 净值曲线对比:归一化净值曲线(初始=100),直观比较各策略的走势和波动
- 收益对比:双柱状图,上半部分对比收益率与最大回撤,下半部分对比 Sharpe 与胜率
其他功能
- 指标对比表:底部表格展示 12 项绩效指标的数值对比
- 导出报告:支持导出 HTML 或 CSV 格式的对比报告
净值曲线数据存储在回测记录的 value_history 列中。旧版本保存的记录可能不含此数据,需要重新运行回测以生成完整对比图表。
💰 实盘交易
功能说明
提供模拟交易和 QMT 实盘交易两种模式。
模拟交易
- 虚拟资金 1,000,000 元(可重置)
- 滑点 0.1%、佣金 0.1%(双向)
- 订单持久化(JSON 存储,data/simulate/ 目录)
- 支持重置账户和清空记录
- 持仓盈亏实时计算(腾讯行情接口)
- A股配色:盈利红色、亏损绿色
- 交易日志持久化:重启后自动恢复历史成交记录
- 盘前预委托:非交易时间下单,开盘自动提交
交易日志导出
将交易记录导出为 CSV 或 Excel 文件:
- 在「当日委托」区域点击「📤 导出日志」按钮
- 选择保存路径和格式(CSV 或 Excel)
- 导出文件包含:订单编号、股票代码、方向、委托价格、成交数量、成交均价、佣金、滑点等
导出功能支持按日期范围和股票代码过滤,方便进行税务申报或交易分析。
QMT 实盘(需开户)
- 在国金证券开通 miniQMT 权限
- 安装 xtquant:
pip install xtquant - 启动国金证券 miniQMT 客户端
- 在交易面板切换模式为「实盘」并点击「连接」
实盘交易涉及真实资金,请确保充分测试策略后再切换实盘模式。首次使用建议先用模拟交易熟悉操作流程。
⚡ 策略运行
功能说明
实时运行策略,自动扫描市场并生成交易信号。
运行模式
| 模式 | 数据源 | 是否下单 | 适用场景 |
|---|---|---|---|
| 回测模式 | 本地历史数据 | 否 | 策略验证 |
| 信号模式 | 实时数据 | 仅提醒 | 观察信号质量 |
| 模拟模式 | 实时数据 | 模拟下单 | 模拟盘验证 |
| 实盘模式 | 实时数据 | 真实下单 | 实盘交易 |
股票池来源
- 自选股分组:从自选股管理中选择分组
- 自定义列表:手动输入股票代码
- 板块筛选:按行业/概念板块筛选
- 因子分析候选股:自动取因子分析 TOP-20 作为股票池(v1.6 新增)
操作步骤
- 选择股票池(全部自选 / 自定义列表 / 板块筛选)
- 选择要运行的策略(可多选并行运行)
- 配置策略参数(或加载模板)
- 设置扫描间隔(默认 60 秒)和资金分配比例
- 点击「开始运行」
- 在信号日志区查看实时信号和持仓变化
风控机制
- 日最大交易次数限制(默认 50 次)
- 同股票交易冷却期(默认 10 秒)
- 总仓位上限(默认 80%)
- 单票仓位上限(默认 30%)
- 日亏损达 5% 自动禁止新开仓
信号去重机制会避免同一股票在同一方向重复发出信号。切换模式时会自动重置信号记录。点击「🔑 SendKey」按钮可配置 Server酱 微信推送,SendKey 自动持久化到 data_storage/user_secrets.json。
🎯 价值投资估值
功能说明
基于价值投资方法,通过五条件筛选优质股票并计算合理估值(估值逻辑参考唐朝先生《价值投资实战手册》)。
五条件筛选
| 条件 | 标准 | 说明 |
|---|---|---|
| 前置条件 | 上市满3年 | 新股IPO招股书财务数据可能美化,必须经历至少3年市场检验(v1.4新增) |
| 条件1 | 经营现金流 > 净利润 > 0 | 利润有现金支撑 |
| 条件2 | 销售商品收到现金 ≥ 营业收入 | 收入真实可靠 |
| 条件3 | 投资现金流出 ≈ 经营现金流入 | 投资规模合理 |
| 条件4 | 有息负债率低 | 财务风险可控 |
| 条件5 | 期末现金及等价物充足 | 偿债能力充足 |
估值计算
- 合理估值 = 净利润 × (1/无风险利率)
- 买点 = 合理估值 × 50%
- 卖点 = 合理估值 × 150%
- 低估幅度 = (合理估值 - 当前市值) / 当前市值
- 低估股票以红色高亮显示
操作步骤
- 确保财务数据已更新(数据管理页)
- 输入单股代码分析,或点击「批量筛选」扫描全市场
- 查看通过五条件的股票列表(代码/名称/市值/合理估值/低估幅度)
- 点击「历史记录」查看过往筛选结果
- 点击「日期对比」对比不同报告期的财务变化
- 可导出 Excel、生成 HTML 报告,或一键加入自选股
财务数据管理
- 资产负债表、利润表、现金流量表三表独立存储
- 支持手动保存当前数据到数据库
- 支持清空财务数据重新下载
- 市值数据通过腾讯接口实时获取(单位:亿元)
批量筛选支持断点续传,中断后可从上次位置继续。结果自动保存到 SQLite 数据库。筛选过程在后台线程执行,可暂停/继续。
📈 趋势选股策略(TESS v2)
功能说明
基于 TESS v2 趋势评估引擎,对全市场股票进行五维量化评分,自动分类为加速期/持续期/蓄力期三个阶段,辅助趋势交易决策。
五维评分体系
| 维度 | 指标 | 说明 |
|---|---|---|
| 持续性 | Hurst 指数 | 衡量趋势记忆性(>0.5 趋势持续) |
| 稳定性 | R²(拟合优度) | 趋势线性度(>0.6 趋势清晰) |
| 方向性 | ADX 趋势强度 | 趋势动力(>20 进入趋势、>30 强趋势) |
| 超额收益 | Alpha 超额 | 相对于市场基准的超额回报 |
| 成长性 | 年化斜率 | 价格增长速度(年化百分比) |
三阶段分类
- 🚀 加速期:各项指标最优,趋势正加速(市场强时出现)
- 📈 持续期:处于稳定上升通道,趋势质量好
- ⏳ 蓄力期:趋势潜在,等待突破确认
新功能
- 悬浮雷达图:鼠标悬停在表格行上,显示五维雷达图详情卡
- 缓存管线:K线数据存入 SQLite 缓存,全市场扫描秒级完成
- 微信推送:按阶段分组推送扫描结果(已配置 SendKey 则一键推送)
- 回测选中:对选中的趋势股批量运行海龟策略回测
- 导出Excel:导出完整评分维度到 Excel
操作步骤
- 选择数据源(全市场 / 自选股分组)
- 点击「🧹 刷新缓存」更新 K 线数据
- 点击「🔍 开始扫描」
- 等待扫描完成(缓存命中约 5-10 秒)
- 查看按评分排名的候选列表
- 悬停查看五维雷达图详情
- 可「加入自选」、「回测选中」、「微信推送」、「导出Excel」
首次扫描建议先「刷新缓存」获取完整 K 线数据。后续扫描直接从缓存读取,速度极快。调试日志区显示详细处理进度和评分分布。
🧬 因子分析
功能说明
多因子量化选股引擎,基于 20 个基本面/技术面/市场面因子,通过 PCA 降维和 IC-IR 加权,生成综合评分和候选股池。
20 因子体系
| 类别 | 因子 | 说明 | 方向 |
|---|---|---|---|
| 技术面 | mom_1m | 1月动量 | + |
| mom_3m | 3月动量 | + | |
| mom_6m | 6月动量 | + | |
| vol_1m | 1月波动率 | -(低波好) | |
| vol_3m | 3月波动率 | -(低波好) | |
| turnover | 换手率 | -(低换手好) | |
| pdi | PDI上升动向 | + | |
| mdi | MDI下降动向 | -(低MDI好) | |
| pdi_mdi | PDI/MDI比 | + | |
| adx | ADX趋势强度 | + | |
| 估值 | pe_ttm | 市盈率TTM | -(低PE好) |
| pb | 市净率 | -(低PB好) | |
| ep_ratio | 盈利收益率 | + | |
| 财务 | roe | 净资产收益率 | + |
| debt_ratio | 负债率 | -(低负债好) | |
| profit_growth | 利润增速 | + | |
| rev_growth | 营收增速 | + | |
| 市场 | market_cap | 市值(亿元) | -(小市值偏好) |
| listed_years | 上市年限 | -(老股更稳) | |
| 复合 | trend_score | 趋势评分(TESS) | + |
核心指标
- IC(信息系数):因子与目标收益的相关性,|IC|>0.03 认为有效
- IR(信息比率):IC 的稳定性,IR = mean(IC) / std(IC),|IR|>0.5 优秀
- PCA 累计方差:主成分解释力,默认阈值 85%
三 Tab 可视化
- IC 时序图:因子 IC 随时间变化,观察稳定性
- IC 热力图:全因子 × 全截面矩阵,直观展示因子失效期
- IC 分布直方图:单因子 IC 分布,判断偏度和峰度
新功能
- Pearson / Spearman 双模式:Pearson 对异常值敏感,Spearman(Rank IC)更稳健
- 滚动窗口可调:4-104 期灵活设置,观察不同时间尺度的因子有效性
- IC 区间筛选:自定义时间范围,分析特定市场环境下的因子表现
- 候选股详情弹窗:双击查看单股因子贡献热力图和权重明细
- 一键加入自选股:TOP-N 批量加入,支持选择预测周期(5d/10d/20d)
- 导出功能:IC 排行榜、因子权重、候选股列表均可导出 Excel
- Walk-Forward 验证:75% 训练 / 25% OOS 测试,防止过拟合
操作步骤
- 首次使用:点击「🚀 构建面板 + 拟合引擎」(约 15-30 分钟,4543 只 × 118 截面)
- 选择「预测周期」(推荐 fwd_ret_20d,信号更稳定)
- 设置「滚动窗口」(默认 26 期 ≈ 半年)
- 查看 IC 排行榜,关注 |IR|>0.5 的有效因子
- 切换「Pearson / Spearman」观察差异
- 查看三 Tab 可视化,判断因子稳定性
- 查看「当期因子权重」和「候选股 TOP30」
- 双击候选股查看详情弹窗
- 点击「⭐ 加入自选股」批量导入
实盘集成
- 策略运行页:股票池下拉框新增「因子分析候选股」,自动取 TOP-20
- 实盘交易页:「👁 预览」查看 TOP-10,「📊 规则选股」一键买入(得分加权)
面板构建完成后数据自动持久化,下次启动直接加载。如需更新数据(如新增财务数据),点击「重建面板」重新拟合。Walk-Forward 验证采用滚动样本外方法检验因子预测力,防范过拟合,结果仅供研究参考,不构成投资建议。
因子分析基于历史数据,不代表未来收益。建议结合趋势选股(TESS)和价值投资估值综合决策,避免单一因子依赖。
⭐ 自选股管理
功能说明
管理关注的股票列表,支持从多个入口添加。
添加方式
- 实时行情页右键「加入自选股」
- 价值投资估值页「⭐ 加入自选」按钮(支持选择分组)
- 趋势选股页「加入自选」按钮
- 批量添加低估股票(估值页控制栏)
功能特点
- 分组管理:自定义分组(如「价值股」、「成长股」、「观察」)
- 实时行情:最新价、涨跌幅、涨跌额、市值实时刷新
- 排序功能:点击列头按任意字段排序
- 快速筛选:输入关键词实时过滤
- 备注编辑:为每只股票添加自定义备注
- 批量操作:多选后批量删除或移动分组
- 导入导出:支持 CSV 导入导出
- 快捷跳转:双击股票自动切换到行情页并填入代码
自选股是策略运行的默认股票池。合理的分组管理可以大大提高策略扫描效率。
📦 打包发布
打包命令
# 方法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 返回 None | SSL 证书问题 | 打包时包含 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 DLL | spec 文件添加 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