Files
sanguo_vnpy_v2/docs/superpowers/specs/2026-07-05-vnpy-quant-platform-prd.md
T
claude_dev 3d20489761 docs: 新增 vnpy 量化平台第一阶段 PRD
沉淀 superpowers brainstorming 多轮讨论:
- 项目初衷、核心原则(不改 vnpy/面向未来/复用 v1 数据)
- 第一阶段范围(A 股回测+策略开发闭环)与后续 spec 规划
- 8 条架构决策(ADR):不引 Qlib/不用 Celery/vnpy 零改造/
  复用 v1 数据丢弃 v1 回测/国金模拟独立/弃内嵌架构/
  webtrader 按需启用/因子层可插拔
- v1 数据资产继承清单 + 数据源踩坑黑名单
- 风险与待决策项
2026-07-05 10:54:15 +08:00

231 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sanguo VeighNa 量化平台 PRD
> **文档信息**
> - 日期:2026-07-05
> - 状态:Draft(待用户确认)
> - 范围:vnpy 服务端 + Web 适配量化平台 · **第一阶段(A 股回测 + 策略开发闭环)**
> - 来源:superpowers brainstorming 多轮澄清(含 8 份调研报告)
---
## 1. 项目背景与目标
### 1.1 初衷(用户原话)
> "我希望把 vnpy 作为服务端部署在 nas docker 上,利用其完整的量化能力,我们构建我们自己的 web 应用来完成量化的投研、回测、策略开发、模拟交易,甚至实盘。这里边我不想对 vnpy 做改造,还是希望通过适配来利用其完整的能力。"
### 1.2 核心原则(用户约束,逐条记录,不可违背)
- **不改造 vnpy**:通过适配层利用其完整能力,不打补丁、不改 vnpy 核心
- **面向未来**:架构要支撑多因子策略研究的海量回测
- **复用 v1 数据资产**v1sanguo_vnpy)已下载的数据 + 数据源踩坑经验必须继承
- **批判性参考 v1**:v1 有不合理设计,**v1 回测代码从未成功**;仅继承数据层,回测代码不参考
- **NAS Docker 分层部署**:应用层/镜像层分离,**不动外网链路**frpc/socat/Caddy/vnpy.mysanguo.top
### 1.3 优先级(用户明确)
1. 回测(最高)
2. 策略开发
3. 模拟验证
4. 实盘(不急)
### 1.4 市场侧重
- **A 股各种金融产品**(股票/ETF/可转债/期权):主线
- 美股港股:其次
- 期货:不急
---
## 2. 范围定义
### 2.1 第一阶段(当前 spec 范围)
**A 股回测 + 策略开发闭环**,含:
- 数据层(继承 v1
- 因子/研究层(vnpy.alpha + Alphalens 补 IC/IR
- 回测层(vnpy BacktestingEngine + 多进程优化)
- Web API 层(FastAPI 自建适配)
- Web 前端(因子研究 / 回测配置 / 多进程优化 / 结果展示)
- NAS Docker 部署
**成功标准**:在 Web 上配置因子 + 策略 + 参数 → 触发海量回测(多进程)→ 展示回测报告(统计 / 净值曲线 / 成交明细)。
### 2.2 后续阶段(独立 spec,不在本 PRD 范围)
| 阶段 | 内容 | 触发条件 |
|------|------|---------|
| Spec 2 | **国金客户端模拟环境**(实时模拟盘) | 用户提供国金客户端 |
| Spec 3 | 实盘(A 股 gatewaytora/xtp | 模拟验证通过 |
| Spec 4 | 美股港股 / 期货扩展 | 业务需要 |
> 用户原话:"我会提供你国金客户端进行模拟环境搭建,这个需要作为一个单独的 topic"
### 2.3 非目标(第一阶段明确不做)
- 实时模拟盘(国金,独立 spec
- 实盘交易
- 期货为主的产品
- 多用户 / 权限模型(先单用户)
---
## 3. 关键架构决策(ADR
### ADR-1: 不引入 Qlib,使用 vnpy.alpha
- **决策**:多因子研究用 vnpy 4.4.0+ 内置 `vnpy.alpha` 模块,**不引入 Qlib**
- **依据**(源码核实):`vnpy/alpha/` 含 Alpha158(源自 Qlib/ Alpha101 因子库、横截面算子(cs_rank/mean/std)、ML 模型(Lasso/LightGBM/MLP)、多标的回测引擎、实盘 AlphaStrategy
- **理由**vnpy.alpha 已受 Qlib 启发且功能完备,保持 vnpy 单一生态,避免多系统集成
- **修正记录**:多因子框架调研曾建议引 Qlib,源码核实后推翻
### ADR-2: 回测并发用 multiprocessing + Ray,不用 Celery
- **决策**:海量回测用 vnpy 官方 `run_optimization`multiprocessing)起步,需要跨机分布式时上 Ray
- **依据**(源码核实):`run_optimization` 支持 `max_workers` 多进程 + `output=False` headlessvnpy 社区分布式主流是 Ray
- **理由**:回测是计算密集,Celery 偏 IO 任务队列;vnpy 社区无 Celery 回测案例;multiprocessing 是官方原生
- **修正记录**:曾推荐 Celery+Redis,调研后推翻
### ADR-3: vnpy 引擎层零改造
- **决策**:vnpy 核心/官方组件不改动,只做 FastAPI + 前端适配层
- **依据**:用户多次强调"不改造 vnpy 通过适配"vnpy 官方组件(alpha/ctabacktester)能力完备
### ADR-4: 复用 v1 数据层,丢弃 v1 回测代码
- **决策**v1 的 data_platform(数据源/fallback/validator/增量更新/已下载数据)完整继承;v1 回测代码(src/backtest-service**完全不参考**
- **依据**:用户明确"v1 回测没成功过""v1 有很多设计不合理,不要被误导"
- **继承清单**
- ✅ 直接 copy`validator.py``fallback.py``docs/data-platform/`
- 🟡 适配 vnpy 4.4.0`daily_all_update.py``import_vnpy_*``vnpy_local_data_adapter.py`
- ❌ 丢弃:v1 所有回测代码
### ADR-5: 模拟环境(国金)作为独立 spec
- **决策**:国金客户端模拟环境不混入第一阶段
- **依据**:用户明确"单独 topic";模拟需用户提供客户端
### ADR-6: 不用当前 sanguo_web 的内嵌架构
- **决策**:当前 sanguo_webFastAPI 进程直接持有 MainEngine)重构为分离架构
- **依据**:内嵌架构导致 mock 补丁、uvicorn fork 崩溃(`threads can only be started once`)、Web 与引擎耦合
- **新架构**:vnpy 引擎调用封装为独立服务/模块,Web 层只做适配
### ADR-7: vnpy_webtrader 按需启用 + 模式参考(不融合不抛弃)
- **决策**:第一阶段(回测/因子)暂不启用 webtrader;后续实盘/行情阶段候选启用;自建 Web 层**不基于 webtrader 的 web.py**,但**参考其「FastAPI + register MainEngine 方法」范式**
- **依据**webtrader 只覆盖交易+行情,第一阶段用不上;扩展 webtrader web.py = 改造 vnpy(违背初衷);它是 vnpy 官方组件,实盘阶段 `add_app(WebTraderApp)` 零改造即用
- **定位**:留作工具箱,按需启用(非融合、非抛弃)
### ADR-8: 因子层可插拔扩展
- **决策**:因子定义、因子库、因子分析器三层均设计为可插拔扩展点,支持未来引入更多因子
- **扩展点**
- **因子定义统一接口**:遵循 `vnpy.alpha``DataProxy` + `cs_function` 范式,自定义因子按此接口注册
- **因子库可插拔**Alpha158/101vnpy 内置)+ 自定义因子 + 未来因子,统一注册机制
- **因子分析器可插拔**Alphalens 作为**首个 analyzer**IC/IR),预留接口,未来加其他 analyzer 不改架构
- **依据**:用户明确"未来会引入更多因子,扩展性希望要有";Alphalens 不写死
---
## 4. 技术栈选型(分层)
| 层 | 选型 | 依据 |
|----|------|------|
| 数据层 | 继承 v1NAS parquet/SQLite + 多源 fallback + validator + 增量更新) | v1 资产调研 |
| 因子/研究层 | **vnpy.alpha**Alpha158/101 + 横截面 + ML+ Alphalens(补 IC/IR | 源码核实 |
| 回测层 | vnpy `BacktestingEngine` + `run_optimization`multiprocessing | 源码核实 headless |
| 海量回测扩展 | multiprocessing 起步 → **Ray**(分布式,未来) | 社区主流 |
| Web API | 自建 FastAPI | — |
| 前端 | **待定**(当前原生 HTML+JS,多因子 UI 复杂,考虑 Vue/React | design 阶段决策 |
| 部署 | NAS Docker(应用层/镜像层分离,容器本地读数据) | 部署文档 |
---
## 5. 数据资产(v1 继承,已确认)
### 5.1 NAS 数据实况(`/volume1/stock/`
| 数据 | 量级 | 跨度 |
|------|------|------|
| 日线 parquet | 59985 文件 / 1.1GB | 20102026~5000 只/年 |
| 15min parquet | 10457 文件 / 1.5GB | 2025-09 ~ 2026-045193 只 |
| vnpy SQLite `quant_trading.db` | 1.4GB / 1281 万行 | DbBarData 表(vnpy 原生格式) |
### 5.2 数据源踩坑黑名单(必须继承,v1 血泪)
| 数据源 | 坑 | v2 策略 |
|--------|-----|---------|
| 新浪 | datalen 800 硬限 + 已失效(返回 Error/2条) | 暂禁 |
| 腾讯 | amount 经常返回 0 | 保底备源 |
| 东方财富 | Mac 直连被拒 + 需 Windows UA + 4s 限频 | 当天实时主源 |
| BaoStock | **无超时会卡死进程** + T+1 延迟 | 加超时后作全量历史主源(唯一无反爬) |
### 5.3 关键利好
v1 的 SMB 坑(1.4GB SQLite 读超时、写被 SIGKILL)在 v2 NAS Docker 容器本地读下**自动消失**(容器直读 `/volume1/stock/`,不走网络)。
### 5.4 数据校验(继承 validator.py7 条 fatal 规则)
- D1: 价格 > 0
- D2: OHLC 一致性(high ≥ max(O,C)low ≤ min(O,C)
- D3: volume ≥ 0
- D6: 日期不重复(保留最新)
- D7: 非未来日期
- R1/R7: 实时行情字段完整性
---
## 6. 调研发现摘要
### 6.1 vnpy 组件能力(源码核实)
| 组件 | 能力 | 备注 |
|------|------|------|
| `vnpy.alpha` | 多因子(Alpha158/101 + 横截面 + ML + 回测 + 实盘) | 生产级,第一阶段核心 |
| `vnpy_ctabacktester` | CTA 回测 + `run_optimization`(多进程,headless) | 参数优化用 |
| `vnpy_portfoliostrategy` | 跨期套利 / 期权组合 | **非横截面选股**(曾误解) |
| `vnpy_webtrader` | FastAPI REST + WS,交易+行情 | 不含策略/回测 |
| `vnpy_rpcservice` | 通用 RPC 通道 | 论坛称 demo,非首选 |
### 6.2 v1 架构教训(v2 必须避免)
- v1 的 sanguo_web 是内嵌架构(FastAPI 直接持有 MainEngine)→ mock 补丁 + uvicorn fork 崩溃(`threads can only be started once`
- v1 回测代码从未跑通
- v2 必须分离:vnpy 引擎层(独立)+ Web 适配层
---
## 7. 约束与风险
### 7.1 约束
- 不改造 vnpy 核心
- NAS Docker 部署,不动外网链路
- 面向未来(海量回测可水平扩展)
- 复用 v1 数据资产
### 7.2 风险
| 风险 | 等级 | 缓解 |
|------|------|------|
| vnpy.alpha 是 4.4.0+ 新模块,A 股适配(T+1/100股/涨跌停/停牌)未验证 | 中 | 第一阶段早期做 spike 验证 |
| vnpy 4.x → 4.4.0 数据接口适配 | 中 | 继承 v1 适配器时测试 |
| BaoStock 无超时卡死 | 中 | 加超时机制 |
| run_optimization 多进程在 Docker 内资源限制 | 低 | 配置 max_workers |
| 前端技术栈未定 | 低 | design 阶段定 |
---
## 8. 待决策项(design 阶段敲定)
- [ ] Web 前端技术栈(原生 JS / Vue / React
- [ ] 用户模型(单用户 / 多用户)
- [ ] 回测结果存储(SQLite / PostgreSQL / 文件)
- [ ] Alphalens 集成方式(独立服务 / 嵌入)
- [ ] 参数扫描 UI 形态
- [ ] 回测任务的提交/查询/取消 API 设计
---
## 9. 后续 spec 规划
1. **当前**:第一阶段回测+策略开发闭环 → design → plan → 实现
2. **Spec 2**:国金客户端模拟环境(待客户端)
3. **Spec 3**:实盘(A 股 gateway
4. **Spec 4**:美股港股 / 期货扩展
---
## 10. 参考调研报告(本 PRD 的事实基础)
1. vnpy 服务端暴露组件调研(webtrader / rpcservice / scripttrader
2. vnpy 量化能力栈程序化可行性
3. webtrader / rpcservice 源码核实(主线 clone
4. SANGUO_VNPY 数据资产调研
5. v1 数据接入层深挖(含踩坑黑名单 + 继承清单)
6. vnpy 二开回测实践调研(multiprocessing + Ray
7. 多因子框架对比调研(Qlib / alphalens / vnpy
8. vnpy.alpha / portfoliostrategy / ctabacktester 源码核实
---
## 变更记录
| 日期 | 变更 | 来源 |
|------|------|------|
| 2026-07-05 | 初稿,沉淀 brainstorming 全部讨论 | superpowers brainstorming |