Sanguo VeighNa 量化平台 Design(架构设计)
对应 PRD:docs/superpowers/specs/2026-07-05-vnpy-quant-platform-prd.md
范围:第一阶段(A 股回测 + 策略开发闭环)
日期:2026-07-05
状态:Draft(待用户 review)
1. 整体架构
核心原则:vnpy 引擎层零改造;适配层(FastAPI + 前端)只做封装和编排;数据层完整继承 v1。
2. 数据层
2.1 组件(4 个单一职责,继承 v1 重组)
| 组件 |
职责 |
来源 |
| DataFeed |
多源接入(东财主 / BaoStock+超时 / 腾讯备),限流、重试、降级 |
继承 v1 fallback.py |
| Validator |
7 条 fatal 校验(D1-D7/R1/R7) |
直接 copy v1 validator.py |
| DataWriter / DataReader |
双存储读写:parquet(年分区)+ SQLite DbBarData |
继承 v1,适配 vnpy 4.4.0 |
| UpdateScheduler |
每日增量 + 断点续传 + 失败告警 |
继承 v1 增量逻辑 |
2.2 数据流
2.3 决策
- 2.1 双存储保留:parquet 利 pandas 批量研究(多因子),SQLite DbBarData 利 vnpy 引擎原生读取
- 2.2 cron 自动 + Web 手动补
- BaoStock 加超时(修 v1 卡死坑)
- 配置集中 YAML(v1 散落代码 → v2
config/data_platform.yaml)
3. 因子 / 回测层
3.1 因子层(vnpy.alpha + 可插拔扩展,落实 ADR-8)
| 子层 |
实现 |
扩展点 |
| 因子定义 |
遵循 vnpy.alpha 的 DataProxy + cs_function 范式 |
自定义因子按此接口注册 |
| 因子库 |
Alpha158/101(vnpy 内置) |
自定义因子库 + 未来因子,统一注册机制 |
| 因子分析器 |
Alphalens(IC/IR/分层回测) |
analyzer 接口可插拔,未来加其他不改架构 |
3.2 回测层
- 引擎:vnpy
BacktestingEngine(不改造)
- 多进程优化:
run_optimization / run_ga_optimization(max_workers,output=False headless)
- 海量扩展:multiprocessing 起步 → Ray 分布式(未来,按需)
3.3 回测任务编排
4. Web API 层
4.1 框架
- FastAPI 自建(参考 webtrader 的「FastAPI + register 引擎方法」模式,不用 webtrader web.py)
- uvicorn 单进程(避开 fork 崩溃坑),回测用独立 multiprocessing pool
4.2 路由(REST + WS)
| 模块 |
路由 |
功能 |
| 认证 |
/api/v1/auth/* |
JWT 登录/校验(单用户起步) |
| 因子 |
/api/v1/factor/* |
因子查询/注册/分析(接 Alphalens) |
| 回测 |
/api/v1/backtest/* |
提交/查询/取消/结果 |
| 数据 |
/api/v1/data/* |
数据查询/手动补数据 |
| WS |
/ws/ |
回测进度/(未来)行情成交推送 |
4.3 回测结果存储
- SQLite:回测统计指标(收益/夏普/回撤等)+ 任务状态
- 文件(JSON/parquet):净值曲线 + 成交明细(大数据,不入库)
5. 前端
5.1 技术栈(推荐)
- Vue 3 + Vite + Naive UI(或 Element Plus)
- 理由:多因子/回测是中后台型应用,Vue 生态成熟、学习曲线低于 React、表格/图表组件齐全
- 替换当前原生 HTML+JS(当前 sanguo_web/static 前端)
5.2 页面
| 页面 |
功能 |
| 因子研究 |
因子查询/注册/IC-IR 分析(Alphalens 可视化) |
| 回测配置 |
选因子/策略/参数/标的/区间,提交回测 |
| 回测结果 |
统计指标 + 净值曲线 + 成交明细 |
| 数据管理 |
数据覆盖范围 + 手动补数据 + 更新日志 |
| (未来)交易 |
实盘/模拟(后续 spec) |
6. 部署
6.1 NAS Docker(应用层/镜像层分离,沿用现有方案)
- 容器挂载
/volume1/stock → /app/data(本地读,无 SMB)
- 镜像:Python 3.10 + vnpy 4.4.0 +
vnpy.alpha + vnpy_ctabacktester + Alphalens
- 代码 bind-mount,迭代 rsync +
docker restart
6.2 进程模型
- uvicorn 单进程(Web API),避开多 worker fork 的
threads can only be started once 坑
- 回测任务用 multiprocessing pool(独立于 uvicorn 进程)
- 不动外网链路(frpc/socat/Caddy/vnpy.mysanguo.top)
7. 早期 Spike(风险验证,落地前必做)
| Spike |
验证内容 |
风险等级 |
| vnpy.alpha A 股适配 |
T+1/100股/涨跌停/停牌 在 alpha 模块的支撑度 |
中 |
| vnpy 4.4.0 数据接口 |
v1 适配器升级到 4.4.0(Interval/DbBarData) |
中 |
| run_optimization Docker 多进程 |
容器内 max_workers 行为与资源占用 |
低 |
Spike 在实施初期(数据层/因子层)穿插进行,发现问题立即停下确认。
8. 实施顺序(概要,详细 plan 由 writing-plans 出)
- 数据层:移植 v1(DataFeed/Validator/Writer/Reader/Scheduler)+ 适配 4.4.0 + BaoStock 超时 + YAML 配置
- 因子/回测层:vnpy.alpha 集成 + 自定义因子注册接口 + analyzer 接口(Alphalens)+ 回测任务编排
- Web API 层:FastAPI 路由 + JWT + 回测任务 pool + WS
- 前端:Vue 3 脚手架 + 各页面
- 部署:Docker 镜像 + 挂载 + 单进程 uvicorn + spike 验证
9. 与 PRD ADR 的对应
| ADR |
Design 落点 |
| ADR-1 不引 Qlib(用 vnpy.alpha) |
§3.1 |
| ADR-2 multiprocessing + Ray(不用 Celery) |
§3.2 / §3.3 |
| ADR-3 vnpy 引擎零改造 |
§1 核心原则 |
| ADR-4 复用 v1 数据丢弃 v1 回测 |
§2 |
| ADR-5 国金模拟独立 spec |
不在本 design 范围 |
| ADR-6 弃内嵌架构 |
§1 / §4.1(uvicorn 单进程) |
| ADR-7 webtrader 按需启用 |
§4.1(参考模式,不用 web.py) |
| ADR-8 因子层可插拔 |
§3.1 扩展点 |
变更记录
| 日期 |
变更 |
来源 |
| 2026-07-05 |
初稿,基于 PRD + 多轮 brainstorming |
superpowers brainstorming |