A
A股量化回测系统
作者:鹿Sir金融投资v1
本地运行的 A 股量化平台使用助手,覆盖策略回测(MA/RSI/MACD)、量化选股(涨停/金叉/超卖)、模拟交易、风控管理、K线分析与数据导出,支持 Web 界面、REST API、CLI、批量脚本、Docker 五种调用方式与 AkShare/JQData/RQData 数据源切换。当用户提到「回测策略」「量化选股」「筛选涨停股」「模拟交易」「止损止盈配置」「导出交易记录」等场景时触发。
下载量
388
点赞
93
价格
免费
技能文档
---
name: quant-backtest-strategy
title: A股量化回测系统
category: 金融投资
description: 本地运行的 A 股量化平台使用助手,覆盖策略回测(MA/RSI/MACD)、量化选股(涨停/金叉/超卖)、模拟交易、风控管理、K线分析与数据导出,支持 Web 界面、REST API、CLI、批量脚本、Docker 五种调用方式与 AkShare/JQData/RQData 数据源切换。当用户提到「回测策略」「量化选股」「筛选涨停股」「模拟交易」「止损止盈配置」「导出交易记录」等场景时触发。
---
# OneQuant 4.0 量化交易系统
OneQuant 4.0 是一个**本地运行的 Flask 单页应用**,面向 A 股个人投资者和量化学习者。它把策略回测、技术分析、模拟交易、风控管理整合在一个 Web 界面里,同时对所有功能暴露 REST API 供程序化调用。
## 技能工作流
1. **环境确认**:确认本地量化平台已启动(默认 `http://127.0.0.1:5001`),必要时先做健康检查
2. **需求识别**:判断用户目标属于回测、选股、模拟交易、风控、K线分析还是数据导出
3. **方式选择**:按用户技术背景选择 Web 界面 / REST API / CLI / 批量脚本 / Docker 调用方式
4. **执行调用**:通过实际 API 调用获取行情与回测数据,禁止编造数据
5. **结果解读**:解读资金曲线、绩效指标与风险信息,注明数据来源与获取时间
6. **边界说明**:不承诺收益;遇不支持功能(高频交易、实盘下单、期货期权)明确告知边界
详细 API 索引见 `references/api-index.md`,程序化调用与故障排查见 `references/usage-and-troubleshooting.md`,完整 FAQ 见 `references/faq.md`,调用示例见 `references/api_examples.md`。
### AI 使用约束
**禁止事项**(违反将导致输出不可信):
1. ❌ **禁止编造数据**:所有行情/回测/K线数据必须通过实际 API 调用获取,绝对不能凭空生成
2. ❌ **禁止声称实时连接**:系统通过 REST API 轮询获取数据,非事件驱动/毫秒级推送,不可声称"实时"
3. ❌ **禁止保证投资收益**:回测结果仅供参考,不可暗示或保证任何策略能产生盈利
4. ❌ **禁止操作真实券商**:默认 `mock_broker` 是模拟环境,不可绕过用户确认直接操作实盘
5. ❌ **禁止猜测 API 参数**:如果用户提供的股票代码/参数不在支持的范围内,必须明确告知不支持
**强制规则**:
- 每个数据输出必须注明数据来源(AkShare/JQData/RQData)和获取时间
- 回测结果必须附带"过去表现不代表未来收益"的免责声明
- 遇到不支持的功能/数据,直接告知用户边界,不要尝试绕过替代
---
## 适用边界
### ✅ 适用场景
| 场景 | 说明 |
|------|------|
| 策略回测验证 | 对单只 A 股运行 MA/RSI/MACD 策略回测,查看资金曲线和绩效指标 |
| 技术指标选股 | 按涨停板、均线金叉、RSI 超卖等条件筛选 A 股标的 |
| 模拟盘交易练习 | 在本地账户中模拟买入/卖出,跟踪持仓盈亏和交易记录 |
| 大盘行情监控 | 查看三大指数实时行情、行业板块排名、北向资金流向 |
| 持仓风控管理 | 设置止损止盈价、查看风险概览、监控单只最大持仓比例 |
| K 线技术分析 | 日/周/月/分钟级别 K 线图 + MACD/KDJ/RSI 指标叠加 |
| 数据导出 | 交易记录、回测报告、持仓清单导出为 Excel |
### ❌ 不适用场景
| 场景 | 原因 | 推荐替代方案 |
|------|------|-------------|
| 高频交易 / 毫秒级延迟 | 基于 HTTP REST API,非事件驱动架构 | 使用华泰 XTP 极速交易 API 或 CTP 期货接口 |
| 实盘自动下单 | 券商接口为模拟实现,需自行对接 | 对接华泰 miniQMT / 同花顺 iFinD / 东方财富掘金 adapter |
| 期货 / 期权交易 | 数据源主要覆盖 A 股 | 使用专门的期货量化平台(如天勤量化、VNPY 期货模块) |
| 港美股深度分析 | AkShare 对港美股数据支持有限 | 使用富途 OpenAPI / 老虎证券 API / Yahoo Finance |
| 多因子选股模型 | 当前选股模块为条件式筛选 | 使用 Alphalens + 自定义因子库 |
| 机器学习策略 | 回测引擎不支持自定义 ML 模型 | 使用 Backtrader + scikit-learn 自行集成 |
### ⚠️ 数据质量说明
- **AkShare(免费)**:数据源来自公开网络接口,盘中实时性约 3-5 秒延迟,历史数据覆盖约 5 年。极端行情下可能存在数据点缺失。
- **JQData(付费)**:需要聚宽账号和有效 license,数据质量较高,覆盖 10 年以上。
- **RQData(付费)**:需要米筐账号和有效 token,数据质量较高,覆盖 10 年以上。
- **分钟级 K 线**:120 分钟线由 5 分钟线聚合生成,非交易所原生数据。
- **盘口数据**:当前支持五档盘口,十档为预留接口。
### ⚠️ 精度保证矩阵
| 功能 | AkShare(免费)| JQData/RQData(付费)| 备注 |
|------|----------------|---------------------|------|
| **日线K线价格** | ✅ 精确(交易所收盘价) | ✅ 精确 | 两种数据源一致 |
| **分钟K线** | ⚠️ 仅近5个交易日 | ✅ 全量历史 | AkShare分钟线由5min聚合 |
| **实时行情延迟** | ~3-5秒 | ~1-2秒 | 均非毫秒级实时 |
| **买卖点信号** | ⚠️ 基于日收盘价计算 | ✅ 更及时 | 信号以收盘后确认为准 |
| **回测收益** | ⚠️ 不含佣金/滑点/印花税 | 同左 | 实盘需额外扣除~0.3-0.6%成本 |
| **选股结果准确性** | ✅ 涨停板数据准确 | ✅ 一致 | 基于`stock_zh_a_spot_em`全市场快照 |
| **财务指标** | ⚠️ 季报更新有滞后 | ✅ 更及时 | 年报/一季报时差异最明显 |
| **北向资金** | ✅ 日级别准确 | ✅ 一致 | 盘中为估算值,收盘后修正 |
| **龙虎榜/大宗交易** | ✅ T+1日数据 | ✅ 一致 | 当日数据需收盘后更新 |
### 📉 已知精度限制与降级场景
| 场景 | 表现 | 建议 |
|------|------|------|
| **刚上市的新股(<3个月)** | 历史数据少,回测参考价值低 | 建议至少等待60个交易日后再回测 |
| **停牌股票** | 选股可能包含停牌股 | 用`/api/stock/info`检查status字段过滤 |
| **ST/*ST股票** | 波动剧烈,策略信号失真 | 回测时可选择排除ST板块 |
| **极端行情(涨跌停)** | 限价单可能无法成交模拟 | 市价单可成交但滑点更大 |
| **非交易时段(周末/节假日)** | 实时行情不更新,选股返回空 | 使用历史回测模式代替 |
| **牛市急涨阶段** | MA追涨策略可能频繁假突破 | 结合成交量确认信号 |
| **熊市阴跌阶段** | RSI超卖信号可能反复触发 | 加趋势过滤器避免"接飞刀" |
| **AkShare接口限流** | 高频调用可能被临时封禁 | 单API调用间隔>0.5s,或换付费数据源 |
| **长时间运行(>7天)** | JSON文件膨胀,内存占用增长 | 每周重启Flask + 导出备份清理 |
### ⚙️ 性能与并发限制
| 项目 | 说明 |
|------|------|
| **Web 服务器** | Flask dev server(`threaded=True`),适合单用户本地使用;多用户并发场景建议部署到生产服务器(如 Waitress) |
| **API 并发** | 单用户顺序调用无压力;同时发起 10+ 个 API 请求可能出现延迟(GIL 限制) |
| **数据超时** | AkShare 请求超过 8 秒自动返回 Mock 数据,前端不崩溃但显示降级数据 |
| **回测计算** | 纯 Python 计算,回测 5 年日线约 2-5 秒;分钟级回测 5 天约 1-2 秒 |
| **数据文件大小** | `strategies.json` / `trades.json` 随使用增长,建议定期导出备份并清理 |
| **长时间运行** | 建议每天重启一次 Flask(清理内存),或配置为 Windows 服务 |
### 🔄 数据更新频率
| 数据源 | 实时延迟 | 历史数据覆盖 | 说明 |
|--------|-----------|----------------|------|
| AkShare(免费) | 约 3-5 秒 | ~5 年 | 盘中延迟可接受;盘后数据次日更新 |
| JQData(付费) | 约 1-2 秒 | 10 年+ | 需要有效 license |
| RQData(付费) | 约 1-2 秒 | 10 年+ | 需要有效 token |
---
## 目标用户
### 🎯 主要用户(为以下人群设计)
| 用户类型 | 典型需求 | 推荐使用方式 |
|----------|---------|-------------|
| A 股个人投资者 | 验证交易策略、监控持仓风险 | Web 界面 → 策略回测 + 模拟交易 |
| 量化学习/初学者 | 理解策略逻辑、学习回测流程 | CLI + Web → 从 MA 策略开始逐步深入 |
| Python 数据分析师 | 批量获取行情数据、程序化回测 | REST API + Python requests |
### 👍 可用用户(可以良好运作)
| 用户类型 | 典型需求 | 推荐使用方式 |
|----------|---------|-------------|
| 财经内容创作者 | 获取行情数据制作图表 | API 调用 + 数据导出 |
| 独立研究员 | 多策略对比验证 | 批量回测脚本 + Excel 导出 |
### 💡 可扩展场景(需额外配置)
| 用户类型 | 需求 | 需要额外做的工作 |
|----------|------|-----------------|
| 机构交易员 | 接入实盘交易 | 对接华泰 miniQMT / 同花顺 iFinD / 东方财富掘金 |
| 港股/美股投资者 | 境外市场分析 | 自行添加对应数据源适配器 |
---
## 数据隐私声明
### 数据存储与安全
| 问题 | 说明 |
|------|------|
| **我的数据存在哪里?** | 所有交易记录、策略参数、持仓数据均存储在本地 JSON 文件(`F:\OneQuant_4.0\*.json`),不上传任何远程服务器 |
| **谁可以访问我的数据?** | 仅本机运行的 Flask 服务可读写,无外部网络暴露 |
| **数据源凭据怎么处理?** | JQData/RQData 的账号密码存储在本地 `config.json`,建议将该文件加入 `.gitignore`,避免提交到版本控制 |
| **如何防止数据泄露?** | 1) 不要将 `config.json` 分享给他人 2) 退出系统前导出并加密敏感数据 3) 更换设备时删除旧数据文件 |
| **导出数据安全吗?** | 导出操作由用户主动触发(Web界面/CLI),系统不会自动外发数据。导出的 Excel 文件建议本地保存 |
| **如何彻底删除数据?** | 删除 `strategies.json` / `trades.json` / `watchlist.json` 及 `backend/data/` 下的缓存文件即可 |
---
## 系统架构
```
OneQuant 4.0
├── run.py # Flask 主入口 (1900+ 行, 102 个 API)
├── frontend/
│ ├── index.html # SPA 单页应用 (14 个功能 Tab)
│ ├── js/main.js # 前端逻辑 + ECharts 图表
│ └── css/style.css # 涨红跌绿中国股市配色
├── backend/
│ ├── data/ # 6 个数据源适配器
│ │ ├── akshare_adapter.py # AkShare (免费, 默认)
│ │ ├── jq_adapter.py # JQData (聚宽, 付费)
│ │ ├── rq_adapter.py # RQData (米筐, 付费)
│ │ ├── ths_adapter.py # 同花顺 iFinD (预留)
│ │ ├── itick_adapter.py # iTick WebSocket 实时行情
│ │ └── dual_adapter.py # 双数据源融合/降级
│ ├── broker/ # 券商对接 (工厂模式)
│ │ ├── mock_broker.py # 模拟券商 (默认)
│ │ ├── mini_qmt_adapter.py # 华泰 miniQMT
│ │ ├── ifind_adapter.py # 同花顺 iFinD
│ │ └── eastmoney_adapter.py# 东方财富掘金
│ ├── risk_manager.py # 风控引擎
│ ├── conditional_order.py # 条件单引擎
│ └── data_store.py # JSON 文件持久化
└── scripts/ # CLI + 批量工具
```
---
## 🚀 调用方式总览(5种)
| # | 方式 | 适用人群 | 难度 | 典型场景 | 响应形式 |
|---|------|---------|------|---------|---------|
| ① | **Web 界面** | 所有人 | ⭐ | 看行情、分析K线、手动交易 | 浏览器 GUI |
| ② | **REST API** | Python 开发者 | ⭐⭐ | 批量回测、策略研究、系统集成 | JSON |
| ③ | **CLI 命令行** | 终端用户 | ⭐⭐ | 快速查询、脚本自动化 | 终端文本 |
| ④ | **批量脚本** | 量化研究员 | ⭐⭐⭐ | 多股票并行回测、定时任务 | Excel/Markdown 报告 |
| ⑤ | **Docker 容器** | DevOps/服务器 | ⭐⭐⭐ | 部署到云服务器、多环境隔离 | Web API |
### 触发词与预期行为
当你说以下内容时,系统会自动选择最合适的调用方式:
| 你说的话 | 系统行为 | 调用方式 |
|---------|---------|---------|
| "帮我分析贵州茅台" / "看一下五粮液的K线" | 打开Web界面,加载K线图+技术指标+买卖信号 | 方式① Web |
| "用MA策略回测000858" / "回测贵州茅台RSI策略" | 调用回测API,返回资金曲线+绩效指标 | 方式② API |
| "筛选涨停股" / "找出均线金叉的股票" | 调用选股API,返回符合条件的列表 | 方式② API |
| "导出我的交易记录" / "生成Excel报告" | 调用导出API,生成Excel文件下载 | 方式② API |
| "查看风险概览" / "我的持仓安全吗" | 调用风控API,返回仓位/预警信息 | 方式② API |
| "批量回测我的自选股" | 运行批量脚本,对每只股票逐一回测并排名 | 方式④ 批量 |
| "每天收盘后自动跑回测" | 配置 Windows 计划任务 + CLI 脚本 | 方式④ 定时 |
### 批量调用示例(程序化/自动化场景)
```python
# 场景A:每天15:30自动回测自选股 → 发送邮件报告
# 配合Windows计划任务或cron使用
import requests, smtplib
from datetime import datetime
BASE = "http://127.0.0.1:5001"
WATCHLIST = ["600519", "000858", "601318", "300750", "002594"]
def daily_report():
results = []
for code in WATCHLIST:
r = requests.get(f"{BASE}/api/backtest/ma", params={
"symbol": code, "short": 5, "long": 20,
"start_date": "2024-01-01", "end_date": datetime.now().strftime("%Y-%m-%d")
}, timeout=15)
if r.json().get("success"):
d = r.json()["data"]
results.append(f"{code}: 收益{d.get('total_return','?')}% 夏普{d.get('sharpe','?')}")
return "\n".join(results)
# 输出:
# 600519: 收益12.3% 夏普0.89
# 000858: 收益-3.2% 夏普-0.21
# ...
```
---
## 快速开始
### 方式一:一键启动(推荐)
```bash
# Windows:双击 start.bat
# 自动检查端口、启动 Flask、打开浏览器
```
### 方式二:命令行启动
```bash
cd F:\OneQuant_4.0
pip install flask flask-cors pandas akshare openpyxl
python run.py
# 访问 http://127.0.0.1:5001
```
### 方式三:Docker 部署
```bash
cd F:\OneQuant_4.0
docker build -t onequant .
docker run -d -p 5001:5001 --name onequant onequant
```
### 安装验证清单
启动后,依次验证以下端点:
```bash
# 1. 健康检查
curl http://127.0.0.1:5001/health
# 2. 系统版本
curl http://127.0.0.1:5001/api/system/version
# 3. 获取股票信息
curl "http://127.0.0.1:5001/api/stock/info?code=600519"
# 4. 获取日K线
curl "http://127.0.0.1:5001/api/market/kline?symbol=600519&frequency=daily"
```
四项全部返回 `"success": true` 即安装成功。
### 🔄 一键验证所有 API(推荐)
```bash
# 运行全量 API 测试(102 个端点)
python scripts/full_api_test.py
```
测试脚本会输出每个 API 的 HTTP 状态码和 `success` 字段,最终给出通过率。当前版本 102/102 全部通过。
### 快速上手模板(可直接复制使用)
**模板 1:分析个股**
> "请帮我用 OneQuant 分析贵州茅台(600519)的技术指标,包括 MACD、KDJ、RSI,并给出当前买卖信号"
**模板 2:运行策略回测**
> "用 MA 金叉死叉策略回测 000858 五粮液,回测区间 2019-01-01 到 2024-12-31,短周期5日长周期20日"
**模板 3:量化选股**
> "帮我筛选今天涨停的股票,列出前 10 只,并给出每只的封板时间和封单量"
**模板 4:风险评估**
> "查看我的模拟账户风险概览,如果单只持仓超过 20% 请提醒我"
**模板 5:数据导出**
> "导出我的交易记录为 Excel,文件路径 D:\trades.xlsx"
---
## 数据源
### 支持的数据源
| 数据源 | 类型 | 费用 | 数据覆盖 | 安装复杂度 |
|--------|------|------|----------|-----------|
| **AkShare** | 开源 | 免费 | A 股 ~5 年 | 零配置 |
| **JQData** | 聚宽 | 付费(试用期可用) | A 股 10 年+ | 需账号 + license |
| **RQData** | 米筐 | 付费(试用期可用) | A 股 10 年+ | 需账号 + token |
| **同花顺 iFinD** | 商业 | 付费 | A 股 + 港美股 | 需客户端 |
| **iTick** | WebSocket | 免费 | 实时 Tick | 需注册 |
### 数据源切换
在 Web 界面「系统设置」→「数据源选择」下拉框中切换,或在 `config.json` 中修改:
```json
{
"data_source": "akshare",
"jqdata": {"username": "", "password": ""},
"rqdata": {"username": "", "password": ""}
}
```
> **建议**:日常使用 AkShare(免费无门槛),策略正式回测前用 JQData/RQData 验证数据一致性。
---
## 调用方式
### 快速决策:我该用哪种方式?
| 我想做什么 | 推荐方式 | 具体操作 |
|-----------|---------|---------|
| 看看大盘行情 | Web 界面 | 浏览器打开 → 大盘分析 Tab |
| 分析某只股票 K 线 | Web 界面 | K线分析 → 输入代码 → 选周期 |
| 验证一个策略想法 | CLI 命令 | `python scripts/cli.py backtest SH600519 --strategy ma` |
| 批量测试 20 只股票 | 批量脚本 | `python scripts/batch_backtest.py --input watchlist --output report.md` |
| 接入自己的 Python 程序 | REST API | `requests.get("http://127.0.0.1:5001/api/market/kline?symbol=600519")` |
| 部署到服务器 | Docker | `docker run -d -p 5001:5001 onequant:4.0` |
| 定时每天跑回测 | 批量脚本+Cron | `batch_backtest.py` + Windows计划任务 |
| 导出交易记录 | Web 界面 | 数据导出 Tab → 一键导出 Excel |
### 方式 1:Web 界面
启动 Flask 后浏览器访问 `http://127.0.0.1:5001`,14 个功能模块通过左侧导航栏切换。
### 方式 2:REST API
所有 102 个 API 均返回标准 JSON 格式:
```json
{"success": true, "data": {...}, "message": "ok"}
```
**调用示例**:
```bash
# 获取贵州茅台 K 线
curl "http://127.0.0.1:5001/api/market/kline?symbol=600519&frequency=daily"
# 运行均线策略回测
curl "http://127.0.0.1:5001/api/backtest/ma?symbol=600519&short=5&long=20"
# 获取行业板块排名
curl "http://127.0.0.1:5001/api/market/industry_rank"
```
**Python 调用示例**:
```python
import requests
BASE = "http://127.0.0.1:5001"
# 获取行情
r = requests.get(f"{BASE}/api/market/overview")
data = r.json()
# 运行回测
r = requests.get(f"{BASE}/api/backtest/ma", params={
"symbol": "600519", "short": 5, "long": 20
})
result = r.json()
print(f"收益率: {result['data']['total_return']}%")
```
### 方式 3:CLI 命令行
```bash
# 健康检查
python scripts/cli.py health
# 查股票信息
python scripts/cli.py stock 600519
# 获取 K 线数据
python scripts/cli.py kline 600519 --freq daily --count 30
# 运行回测
python scripts/cli.py backtest 600519 --strategy ma --short 5 --long 20
# 批量选股
python scripts/cli.py select --strategy limit_up --limit 20
# 导出交易记录
python scripts/cli.py export trades
```
### 方式 4:批量回测
```bash
# 对自选股列表批量运行 MA 策略回测
python scripts/batch_backtest.py --input watchlist --strategy ma --output report.md
# 对自定义股票列表批量回测,输出 JSON
python scripts/batch_backtest.py --input 600519,000858,601012 --strategy rsi --output results.json
```
> **定时任务集成**:配合 Windows 计划任务或 Linux cron,可实现每日自动批量回测并生成报告。
### 方式 5:Docker 容器化部署
```bash
docker run -d -p 5001:5001 \
-v ~/onequant_data:/app/data \
--name onequant \
onequant:4.0
```
---使用说明
# A股量化回测系统 本地运行的 A 股量化平台使用助手:策略回测、量化选股、模拟交易、风控管理、K线分析一站覆盖。 ## 功能 - 策略回测:MA / RSI / MACD,输出资金曲线与绩效指标 - 量化选股:涨停板、均线金叉、RSI 超卖条件筛选 - 模拟交易与风控:限价/市价/条件单,止损止盈与仓位预警 - K线分析:日/周/月/分钟 9 周期,指标叠加 - 数据导出:交易记录、回测报告、持仓清单导出 Excel ## 快速上手 ```text 用 MA 金叉死叉策略回测 600519,区间 2021-01-01 到 2024-12-31 ``` ```text 帮我筛选今天涨停的股票,列出前 10 只 ``` ## 说明 - 支持五种调用方式:Web 界面 / REST API / CLI / 批量脚本 / Docker - 数据源支持 AkShare(免费)、JQData、RQData 热切换 - 回测结果仅供参考,不构成投资建议
支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手