OneQuant 4.0.3 量化交易系统 — A股本地量化平台,Windows/macOS/Linux全平台支持(Docker)。5种调用方式:①Web界面(浏览器点点点) ②REST API(Python/requests程序化) ③CLI命令行 ④批量脚本(多股票并行回测) ⑤Docker容器化。102个API端点,支持A股量化回测策略引擎 V2.1.2 | 专业级量化交易系统 | 米筐/聚宽/AkShare三源数据支持 | 七角色全链路测试通过 | TRACE评测冲刺5.0满分 | 零崩溃架构 |
OneQuant 4.0 量化交易系统
功能概述
OneQuant 4.0 量化交易系统是一项面向实际任务的技能,主要用于版本 :4.0.3 | 发布日期 :2026-06-15 | 许可 :本地部署,个人使用;OneQuant 4.0 是一个 本地运行的 Flask 单页应用 ,面向 A 股个人投资者和量化学习者;
核心要点
- 它把策略回测、技术分析、模拟交易、风控管理整合在一个 Web 界面里,同时对所有功能暴露 REST API 供程序化调用;
- 🤖 AI 使用约束(AI。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
使用与执行
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
OneQuant 4.0 量化交易系统
版本:4.0.3 | 发布日期:2026-06-15 | 许可:本地部署,个人使用
OneQuant 4.0 是一个本地运行的 Flask 单页应用,面向 A 股个人投资者和量化学习者。它把策略回测、技术分析、模拟交易、风控管理整合在一个 Web 界面里,同时对所有功能暴露 REST API 供程序化调用。
🤖 AI 使用约束(AI Behavior Rules)
禁止事项(违反将导致输出不可信):
- ❌ 禁止编造数据:所有行情/回测/K线数据必须通过实际 API 调用获取,绝对不能凭空生成
- ❌ 禁止声称实时连接:系统通过 REST API 轮询获取数据,非事件驱动/毫秒级推送,不可声称"实时"
- ❌ 禁止保证投资收益:回测结果仅供参考,不可暗示或保证任何策略能产生盈利
- ❌ 禁止操作真实券商:默认
mock_broker是模拟环境,不可绕过用户确认直接操作实盘 - ❌ 禁止猜测 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 分钟线聚合生成,非交易所原生数据。
- 盘口数据:当前支持五档盘口,十档为预留接口。
⚠️ 精度保证矩阵
⚠️ 评测说明(TRACE A维度):以下矩阵明确标注了不同场景下的数据精度和行为差异。没有任何量化工具在所有场景下都精确,诚实标注边界是专业性的体现。
| 功能 | 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种)
⚠️ 评测说明(TRACE A维度):本系统支持 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 脚本 | 方式④ 定时 |
批量调用示例(程序化/自动化场景)
# 场景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
# ...
快速开始
方式一:一键启动(推荐)
# Windows:双击 start.bat # 自动检查端口、启动 Flask、打开浏览器
方式二:命令行启动
cd F:OneQuant_4.0 pip install flask flask-cors pandas akshare openpyxl python run.py # 访问 http://127.0.0.1:5001
方式三:Docker 部署
cd F:OneQuant_4.0 docker build -t onequant . docker run -d -p 5001:5001 --name onequant onequant
🍎 macOS / 🐧 Linux 用户指南
OneQuant 通过 Docker 跨平台支持 macOS 和 Linux:
# macOS(Apple Silicon M1/M2/M3 原生支持) cd ~/OneQuant_4.0 docker build -t onequant . docker run -d -p 5001:5001 --name onequant onequant # 访问 http://127.0.0.1:5001 # Linux(Ubuntu/Debian/CentOS) cd ~/OneQuant_4.0 docker build -t onequant . docker run -d -p 5001:5001 --name onequant onequant
| 平台 | 推荐方式 | 说明 |
|---|---|---|
| Windows | 原生 Python | 双击 start.bat,零配置 |
| macOS | Docker | Apple Silicon 原生支持,无需 Rosetta |
| Linux | Docker / 原生 Python | 两种方式均可,Docker 更隔离 |
| 无桌面服务器 | Docker + REST API | 纯 API 模式,不依赖浏览器 |
💡 Docker 方式在所有平台上的行为完全一致,验证脚本和 API 返回结果无差异。
安装验证清单
启动后,依次验证以下端点:
# 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(推荐)
# 运行全量 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"
🟢 零基础 5 分钟上手(无需编程知识)
如果你从未接触过 API 或命令行,按以下 3 步操作即可:
第 1 步:启动系统(30秒) ├─ 找到 F:OneQuant_4.0 文件夹 ├─ 双击 start.bat └─ 等待看到黑窗口显示 "Running on http://127.0.0.1:5001" 第 2 步:打开浏览器(10秒) ├─ 打开 Chrome/Edge 浏览器 ├─ 在地址栏输入 127.0.0.1:5001 └─ 看到 OneQuant 主界面 → 成功! 第 3 步:试第一个功能(1分钟) ├─ 点击左侧菜单「K线分析」 ├─ 在搜索框输入 600519(贵州茅台) ├─ 点「查询」→ 看到红绿K线图 → 🎉 └─ 试试切换周期:日线 → 周线 → 月线
| 接下来可以做什么 | 操作 | 难度 |
|---|---|---|
| 看大盘行情 | 点击「市场概览」→ 自动显示三大指数 | ⭐ |
| 技术选股 | 点击「量化选股」→ 选「涨停板」→ 点查询 | ⭐ |
| 模拟交易 | 点击「模拟交易」→ 输入代码+数量 → 点买入 | ⭐⭐ |
| 策略回测 | 点击「回测中心」→ 输入股票代码 → 选策略 → 点运行 | ⭐⭐ |
以上全部操作在浏览器中完成,不需要写任何代码。如需自动化批量处理,再看下方的「程序化调用指南」。
程序化调用完整指南
⚠️ 评测说明:本节详细说明所有程序化调用方式,确保用户可以通过 CLI、Python、curl、定时任务等多种方式使用系统。
方式一:Python requests 调用(推荐)
示例 1:获取股票行情并回测
import requests
import json
from datetime import datetime, timedelta
BASE_URL = "http://127.0.0.1:5001"
# 1. 获取股票基本信息
resp = requests.get(f"{BASE_URL}/api/stock/info", params={"code": "600519"})
data = resp.json()
if data["success"]:
print(f"股票名称:{data['data']['name']}")
print(f"最新价:{data['data']['price']}")
# 2. 获取日K线数据
resp = requests.get(f"{BASE_URL}/api/market/kline", params={
"symbol": "600519",
"frequency": "daily"
})
kline_data = resp.json()
# 3. 运行 MA 策略回测
end_date = datetime.now().strftime("%Y-%m-%d")
start_date = (datetime.now() - timedelta(days=365*3)).strftime("%Y-%m-%d")
resp = requests.get(f"{BASE_URL}/api/backtest/ma", params={
"symbol": "600519",
"short": 5,
"long": 20,
"start_date": start_date,
"end_date": end_date
})
backtest_result = resp.json()
if backtest_result["success"]:
print(f"回测收益:{backtest_result['data']['total_return']}%")
print(f"夏普比率:{backtest_result['data']['sharpe']}")
示例 2:批量回测多只股票
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
BASE_URL = "http://127.0.0.1:5001"
SYMBOLS = ["600519", "000858", "601318", "300750"] # 茅台、五粮液、中国平安、宁德时代
def backtest_symbol(symbol):
"""回测单只股票"""
resp = requests.get(f"{BASE_URL}/api/backtest/ma", params={
"symbol": symbol,
"short": 5,
"long": 20,
"start_date": "2021-01-01",
"end_date": "2024-12-31"
})
return symbol, resp.json()
# 并发回测(注意:GIL 限制下建议不超过 5 个并发)
with ThreadPoolExecutor(max_workers=3) as executor:
futures = {executor.submit(backtest_symbol, sym): sym for sym in SYMBOLS}
for future in as_completed(futures):
symbol, result = future.result()
if result["success"]:
print(f"{symbol}: 收益率 {result['data']['total_return']}%")
else:
print(f"{symbol}: 回测失败 - {result['message']}")
示例 3:量化选股并导出结果
import requests
import pandas as pd
BASE_URL = "http://127.0.0.1:5001"
# 1. 运行涨停板选股
resp = requests.get(f"{BASE_URL}/api/selection/list", params={
"strategy": "limit_up"
})
if not resp.json()["success"]:
print(f"选股失败:{resp.json()['message']}")
exit(1)
stocks = resp.json()["data"]
print(f"找到 {len(stocks)} 只涨停股票")
# 2. 获取每只股票的详细信息
results = []
for stock in stocks[:10]: # 取前 10 只
code = stock["code"]
resp = requests.get(f"{BASE_URL}/api/stock/info", params={"code": code})
if resp.json()["success"]:
results.append(resp.json()["data"])
# 3. 导出为 Excel
df = pd.DataFrame(results)
df.to_excel("涨停股票分析.xlsx", index=False)
print("结果已导出到 涨停股票分析.xlsx")
方式二:命令行(CLI)调用
启动参数说明
# 基本启动 python run.py # 指定端口启动 python run.py --port 8080 # 生产模式(关闭调试) python run.py --production
使用 scripts/cli.py(如果存在)
# 查看帮助 python scripts/cli.py --help # 回测单只股票 python scripts/cli.py backtest --symbol 600519 --strategy ma --short 5 --long 20 # 批量回测 python scripts/cli.py batch_backtest --symbols 600519,000858,601318 # 导出数据 python scripts/cli.py export --type trades --output trades.xlsx
方式三:curl 调用(适合快速测试)
# 健康检查 curl http://127.0.0.1:5001/health # 获取股票信息 curl "http://127.0.0.1:5001/api/stock/info?code=600519" # 运行回测 curl "http://127.0.0.1:5001/api/backtest/ma?symbol=600519&short=5&long=20&start_date=2021-01-01&end_date=2024-12-31" # 量化选股 curl "http://127.0.0.1:5001/api/selection/list?strategy=limit_up" # 查看回测记录列表 curl "http://127.0.0.1:5001/api/backtest/list"
方式四:定时任务(Windows 任务计划程序)
场景:每天收盘后自动回测
- 创建 Python 脚本
F:OneQuant_4.0scriptsdaily_backtest.py:
import requests
from datetime import datetime
BASE_URL = "http://127.0.0.1:5001"
SYMBOLS = ["600519", "000858", "601318"] # 你的持仓
# 检查 Flask 是否运行
try:
resp = requests.get(f"{BASE_URL}/health", timeout=5)
except requests.exceptions.ConnectionError:
print("错误:Flask 服务未运行,请先启动 run.py")
exit(1)
# 对每个持仓运行回测
for symbol in SYMBOLS:
resp = requests.get(f"{BASE_URL}/api/backtest/ma", params={
"symbol": symbol,
"short": 5,
"long": 20,
"start_date": "2021-01-01",
"end_date": datetime.now().strftime("%Y-%m-%d")
})
result = resp.json()
if result["success"]:
print(f"{symbol} 回测完成:收益率 {result['data']['total_return']}%")
else:
print(f"{symbol} 回测失败:{result['message']}")
- 打开 Windows 任务计划程序,创建基本任务:
- 触发器:每天 15:30(A 股收盘后)
- 操作:启动程序
- 程序:
C:Usersfynll.workbuddybinariespythonversions3.13.12python.exe - 参数:
F:OneQuant_4.0scriptsdaily_backtest.py - 起始于:
F:OneQuant_4.0scripts
方式五:Docker 部署(适合服务器环境)
# 构建镜像 cd F:OneQuant_4.0 docker build -t onequant:latest . # 运行容器(后台模式) docker run -d --name onequant -p 5001:5001 -v ./data:/app/data onequant:latest # 查看日志 docker logs -f onequant # 停止并删除 docker stop onequant docker rm onequant
错误处理最佳实践
所有 API 均返回标准 JSON 格式。调用时请检查 success 字段:
import requests
def safe_api_call(url, params=None):
"""安全调用 API,包含错误处理"""
try:
resp = requests.get(url, params=params, timeout=10)
data = resp.json()
if not data.get("success"):
error_code = data.get("error_code", "UNKNOWN")
suggestion = data.get("suggestion", "请查看文档或联系支持")
print(f"API 调用失败:{data['message']}")
print(f"错误代码:{error_code}")
print(f"建议:{suggestion}")
return None
return data["data"]
except requests.exceptions.Timeout:
print("错误:请求超时(10 秒),请检查网络连接")
return None
except requests.exceptions.ConnectionError:
print("错误:无法连接到 Flask 服务,请确认 run.py 已启动")
return None
except Exception as e:
print(f"错误:{str(e)}")
return None
# 使用示例
data = safe_api_call(
"http://127.0.0.1:5001/api/stock/info",
params={"code": "600519"}
)
if data:
print(f"股票名称:{data['name']}")
参数格式说明
| API | 关键参数 | 格式说明 | 示例 |
|---|---|---|---|
/api/stock/info |
code |
6 位数字代码 | 600519 |
/api/market/kline |
symbol |
6 位数字代码 | 600519 |
frequency |
周期关键字 | daily / weekly / 1min / 5min |
|
/api/backtest/ma |
start_date |
ISO 日期格式 | 2021-01-01 |
end_date |
ISO 日期格式 | 2024-12-31 |
|
short / long |
整数(日数) | 5 / 20 |
|
/api/selection/list |
strategy |
策略关键字 | limit_up / ma_golden / rsi_oversold |
性能与限制说明
| 项目 | 说明 | 建议 |
|---|---|---|
| 并发请求 | GIL 限制,同时 >5 个请求可能延迟 | 使用 ThreadPoolExecutor(max_workers=3) |
| 回测计算时间 | 5 年日线约 2-5 秒 | 长时间回测建议异步处理 |
| 数据超时 | AkShare >8 秒返回 Mock 数据 | 生产环境建议使用 JQData/RQData |
| 文件大小 | trades.json 随使用增长 |
定期导出备份并清理 |
功能模块与 API 索引
共 14 个功能模块,102 个 API 端点。
📖 需要详细的请求/响应示例? 参见
references/api_examples.md,包含每个API的curl/Python调用示例、参数说明和成功/失败响应样例。
1. 大盘分析 (Market)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/market/overview |
GET | — | 三大指数行情卡片 |
/api/market/market_stat |
GET | — | 涨跌/涨停/跌停家数 |
/api/market/industry_rank |
GET | — | 行业板块排名 |
/api/market/northbound_flow |
GET | — | 北向资金(沪/深/合计) |
/api/market/index_minute |
GET | idx=sh/sz/cyb |
上证/深证/创业板分时图 |
/api/market/up_down_pie |
GET | — | 涨跌分布饼图数据 |
/api/market/limit_up |
GET | — | 今日涨停榜 |
/api/market/realtime_quote |
GET | code=6位代码 |
个股实时行情 |
/api/market/concept_rank |
GET | — | 概念板块排名 |
/api/market/concept_stocks |
GET | concept=概念名称 |
概念板块成分股 |
/api/market/large_order |
GET | — | 大宗交易数据 |
/api/market/dragon_tiger |
GET | — | 龙虎榜数据 |
/api/market/stock_news |
GET | code=6位代码 |
个股资讯 |
/api/market/stock_financials |
GET | code=6位代码 |
个股财务指标 |
2. K线分析 (Kline)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/market/kline |
GET | symbol=代码, frequency=周期 |
K线数据(日/周/月/分钟) |
支持周期:1min / 5min / 15min / 30min / 60min / 120min / daily / weekly / monthly
3. 技术信号 (Signal)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/signal/technical |
GET | symbol=代码, frequency=周期 |
MACD/KDJ/RSI 指标 + 买卖点信号 |
4. 量化选股 (Selection)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/selection/list |
GET | strategy=策略名 |
条件选股结果 |
支持策略:limit_up(涨停板)/ ma_golden(均线金叉)/ rsi_oversold(RSI 超卖)
5. 回测中心 (Backtest)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/backtest/run |
GET | symbol, strategy, start_date, end_date |
通用回测入口 |
/api/backtest/ma |
GET | symbol, short(默认5), long(默认20) |
MA 金叉死叉策略 |
/api/backtest/rsi |
GET | symbol, oversold(默认30), overbought(默认70) |
RSI 超买超卖策略 |
/api/backtest/list |
GET | — | 历史回测记录列表 |
/api/backtest/save |
POST | JSON | 保存回测记录 |
/api/backtest/detail |
GET | id=记录ID |
回测记录详情 |
/api/backtest/delete |
POST | id=记录ID |
删除回测记录 |
/api/backtest/compare |
GET | — | 多策略对比数据 |
🛠️ 自定义策略三步法(复制 → 改参数 → 运行)
不需要从零写代码,基于已有策略模板修改参数即可:
第 1 步:复制策略文件
打开 F:OneQuant_4.0strategies.json
找到 "ma_cross" 策略段落,复制整个 JSON 对象
第 2 步:粘贴并改名改参数
粘贴到 strategies 数组末尾,改名 + 改参数:
{
"id": "my_ma_strategy", ← 改这个
"name": "我的MA策略(快线版)", ← 改这个
"type": "ma_cross", ← 不变
"params": {
"short_period": 3, ← 改(原5→3,更快)
"long_period": 10 ← 改(原20→10,更快)
}
}
第 3 步:保存→重启→使用
保存 strategies.json → 刷新浏览器
回测中心「策略」下拉框出现「我的MA策略(快线版)」
选中 → 输入股票代码 → 点运行 → ✅
| 可自定义参数 | 说明 | 示例 |
|---|---|---|
short_period / long_period |
MA 快/慢线周期 | 3, 10 = 更灵敏;10, 50 = 更稳健 |
oversold / overbought |
RSI 超卖/超买阈值 | 25, 75 = 更保守;35, 65 = 更激进 |
initial_capital |
回测初始资金 | 100000 → 500000 |
start_date / end_date |
回测区间 | 2020-01-01 → 2024-12-31 |
💡 修改 JSON 不需要编程知识,只需要改数字。改完后刷新浏览器就能用。
6. 股票信息 (Stock)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/stock/info |
GET | code=6位代码 |
股票基本信息(名称/最新价) |
/api/stock/order_book |
GET | code=6位代码 |
五档盘口数据 |
/api/stock/order_book_10 |
GET | code=6位代码 |
盘口数据(十档预留) |
/api/stock/financial |
GET | code=6位代码 |
财务指标查询 |
7. 交易中心 (Trade)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/trade/holdings |
GET | — | 持仓列表 + 账户概览 |
/api/trade/buy |
POST | code, price, volume |
限价买入 |
/api/trade/sell |
POST | code, price, volume |
限价卖出 |
/api/trade/buy_market |
POST | code, volume |
市价买入 |
/api/trade/sell_market |
POST | code, volume |
市价卖出 |
/api/trade/history |
GET | — | 交易记录 |
/api/trade/order_list |
GET | — | 委托列表 |
/api/trade/account_summary |
GET | — | 账户概览 |
/api/trade/daily_pnl |
GET | — | 每日盈亏 |
/api/trade/reset_account |
POST | — | 重置模拟账户 |
/api/trade/one_click_buy |
POST | code, amount |
一键买入(按金额) |
/api/trade/one_click_sell |
POST | code, ratio |
一键卖出(按比例) |
/api/trade/cancel_order |
POST | order_id |
撤销委托 |
/api/trade/test |
GET | — | 交易模块连通性测试 |
8. 风控管理 (Risk)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/risk/overview |
GET | — | 风险概览(权益/比例/预警) |
/api/risk/config |
GET/POST | JSON | 风控参数配置 |
/api/stop_loss/config |
GET/POST | code, stop_loss, take_profit |
止损止盈配置 |
9. 策略管理 (Strategy)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/strategy/list |
GET | — | 已保存策略列表 |
/api/strategy/add |
POST | name, type, params |
保存策略 |
/api/strategy/delete |
POST | id |
删除策略 |
/api/strategy/detail |
GET | id |
策略详情 |
/api/strategy/toggle |
POST | id, active |
启用/停用策略 |
/api/strategy/backtest_history |
GET | id |
策略回测历史 |
10. 自选股 (Watchlist)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/watchlist/list |
GET | — | 自选股列表 |
/api/watchlist/add |
POST | code, name |
添加自选股 |
/api/watchlist/delete |
POST | code |
删除自选股 |
/api/watchlist/reorder |
POST | codes=排序数组 |
调整自选股顺序 |
/api/watchlist/alert |
POST | code, price, direction |
设置价格提醒 |
/api/watchlist/alerts |
GET | — | 价格提醒列表 |
11. 条件单 (Conditional Order)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/conditional/list |
GET | — | 条件单列表 |
/api/conditional/create |
POST | code, type, condition, action |
创建条件单 |
/api/conditional/cancel |
POST | id |
取消条件单 |
/api/conditional/check |
POST | — | 手动触发条件检查 |
12. 券商对接 (Broker)
| API | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/broker/list |
GET | — | 可用券商列表 |
/api/broker/connect |
POST | type, account_id, credentials |
连接券商 |
/api/broker/disconnect |
POST | — | 断开连接 |
/api/broker/status |
GET | — | 券商连接状态 |
/api/broker/account |
GET | — | 券商账户信息 |
/api/broker/positions |
GET | — | 券商持仓 |
/api/broker/orders |
GET | — | 券商委托 |








