5.4 KiB
5.4 KiB
02 - 系统架构设计
版本: v1.0 日期: 2026-04-29
1. 架构总览
┌─────────────────────────────────────────────────────────────┐
│ 三国量化团队(7个Agent) │
│ 诸葛亮 · 庞统 · 张飞 · 关羽 · 赵云 · 司马懿 · 姜维 │
└───────────┬─────────────────────────────────┬───────────────┘
│ 提交策略 │ 查看结果
▼ ▼
┌───────────────────────┐ ┌───────────────────┐
│ 回测API服务 │ │ OpenClaw Gateway │
│ FastAPI :8088 │ │ 任务调度/通信 │
│ /api/backtest/* │ └───────────────────┘
└───────────┬───────────┘
│ 调用
▼
┌───────────────────────┐
│ vnpy BacktestingEngine │ ← vnpy 4.x原生回测引擎
│ CTA策略回测 │
└───────────┬───────────┘
│ 读取数据
▼
┌───────────────────────┐
│ 数据层 │
│ SQLite / akshare │ ← 本地数据 + 实时数据
└───────────────────────┘
所有服务运行在:
┌─────────────────────────────────────┐
│ 群晖 NAS Docker 容器 │
│ 192.168.2.154 │
│ sanguo_vnpy:with-scripts 镜像 │
│ restart: unless-stopped │
└─────────────────────────────────────┘
2. 分层架构
┌────────────────────────────────────┐
│ 适配层 (src/) │ ← 我们的代码
│ ├── backtest-service/ 回测API服务 │
│ ├── adapters/ 数据适配器 │
│ └── scripts/ 启动脚本 │
├────────────────────────────────────┤
│ vnpy框架层 (pip install vnpy) │ ← 开源框架,不修改
│ ├── BacktestingEngine 回测引擎 │
│ ├── CtaTemplate 策略基类 │
│ ├── BaseDatafeed 数据接口 │
│ └── BaseGateway 交易网关 │
├────────────────────────────────────┤
│ 基础设施层 (docker/) │
│ ├── Dockerfile 镜像构建 │
│ ├── entrypoint.sh 容器启动 │
│ └── requirements/ 依赖管理 │
└────────────────────────────────────┘
3. 核心设计决策
3.1 适配层 vs Fork
| 方案 | 适用场景 | 当前选择 |
|---|---|---|
| 适配层(继承/封装) | 新策略、新数据源、新网关 | ✅ 当前采用 |
| Fork vnpy | 修改回测引擎核心、修改事件机制 | 🔜 预留 |
原则:优先通过继承和封装实现需求,vnpy接口不满足时再考虑fork。
3.2 数据架构
数据获取层(赵云负责)
│
├── akshare(实时行情)
├── tushare(历史数据)
└── 本地CSV/Parquet
│
▼
数据适配层(src/adapters/)
│
├── vnpy_local_data_adapter.py ← 实现BaseDatafeed接口
│
▼
数据存储层
│
└── SQLite(vnpy标准数据库)
3.3 多用户隔离
每个用户独立进程对,通过Nginx反向代理统一入口:
用户 RPC端口 Web端口 Nginx路径
诸葛亮 2010 8001 /zhugeliang/
庞统 2020 8002 /pangtong/
司马懿 2030 8003 /simayi/
张飞 2040 8004 /zhangfei/
关羽 2050 8005 /guanyu/
赵云 2060 8006 /zhaoyun/
姜维 2070 8007 /jiangwei/
3.4 容器化部署
sanguo_vnpy 容器
├── 8888 Jupyter Lab(开发环境)
├── 8088 回测API服务(FastAPI)
├── 8000 WebTrader(预留)
├── 2222 SSH(运维通道)
└── /app/scripts/backtest_service ← volume挂载代码
4. 技术选型
| 组件 | 选型 | 理由 |
|---|---|---|
| 量化框架 | vn.py 4.x | 开源、社区活跃、架构成熟 |
| API服务 | FastAPI + uvicorn | 异步高性能、自动文档 |
| 数据库 | SQLite | 轻量、vnpy原生支持 |
| 数据源 | akshare + tushare | 免费A股数据 |
| 容器 | Docker | 环境隔离、可移植 |
| 部署 | 群晖NAS | 团队已有硬件、7×24运行 |