auto-sync: 2026-04-09 15:00:02
This commit is contained in:
+253
@@ -0,0 +1,253 @@
|
||||
# vnpy官方组件架构研究报告
|
||||
|
||||
## 一、研究背景
|
||||
|
||||
在sanguo_quant_live项目中,我们需要构建一个稳定、高效的量化交易系统。为了确保系统的可维护性和可扩展性,我们决定使用vnpy官方提供的组件,而不是重新实现功能。
|
||||
|
||||
## 二、架构方案设计
|
||||
|
||||
### 2.1 团队职责与架构对应关系
|
||||
|
||||
| 团队成员 | 角色 | 职责 | 对应架构组件 |
|
||||
|---------|------|------|------------|
|
||||
| **诸葛亮** | 总军师 | 任务分配、进度监控、结果汇总、系统修复 | - |
|
||||
| **庞统** | 副军师 | 策略设计、任务拆分、代码整合 | - |
|
||||
| **司马懿** | 质量总监 | 代码审计、质量复核、最终验收 | - |
|
||||
| **张飞** | 右路先锋 | vnpy框架改造设计,支持聚宽/QMT多风格兼容,多回测引擎,更好结果展示 | vnpy_ctastrategy、vnpy_ctabacktester |
|
||||
| **关羽** | 左路先锋 | 风控模块开发、风险控制、安全防护 | - |
|
||||
| **赵云** | 数据护军 | 数据获取、清洗验证、质量检查 | 数据源适配层、vnpy_sqlite |
|
||||
| **姜维** | 平台总督 | 基础设施选型,开发/测试/生产环境搭建和运维,平台工具链搭建和运维 | Docker容器、RPC服务、Web服务 |
|
||||
|
||||
### 2.2 项目目录结构与架构组件对应关系
|
||||
|
||||
```
|
||||
sanguo_quant_live/ (根目录)
|
||||
├── strategies/ # 最终成果物:开发好的策略脚本
|
||||
│ └── 策略文件.py # 继承CtaTemplate的策略类
|
||||
├── zhaoyun-data/ # 赵云:所有数据相关
|
||||
│ ├── data/
|
||||
│ │ ├── raw/ # 原始数据
|
||||
│ │ ├── processed/ # 处理后的数据(SQLite、CSV)
|
||||
│ │ └── running_data/ # 运行数据
|
||||
│ └── scripts/ # 数据处理脚本
|
||||
├── jiangwei-platform/ # 姜维:所有平台相关
|
||||
│ ├── scripts/ # 平台脚本
|
||||
│ │ ├── rpc/ # RPC服务脚本
|
||||
│ │ ├── api/ # API服务脚本
|
||||
│ │ └── docker/ # Docker相关配置
|
||||
│ └── research/ # 调研报告
|
||||
├── guanyu-risk/ # 关羽:所有风控相关
|
||||
├── zhangfei-technical/ # 张飞:技术策略开发
|
||||
├── pangtong-value/ # 庞统:价值投资(基本面策略)
|
||||
└── simayi-quality/ # 司马懿:所有质量保证相关
|
||||
```
|
||||
|
||||
### 2.3 核心架构组件
|
||||
|
||||
#### 2.3.1 vnpy原始策略加载机制
|
||||
|
||||
vnpy原始策略加载流程:
|
||||
```
|
||||
1. 程序启动 → 初始化CtaStrategyEngine
|
||||
2. 读取策略配置 → strategy_setting.json
|
||||
3. 加载策略模块 → importlib.import_module()
|
||||
4. 初始化策略实例 → 创建CtaTemplate子类实例
|
||||
5. 加载策略配置 → 应用策略参数
|
||||
6. 策略就绪 → 可进行回测或实盘交易
|
||||
```
|
||||
|
||||
#### 2.3.2 数据源适配层
|
||||
|
||||
```python
|
||||
class DataSourceAdapter:
|
||||
"""数据源适配类,支持多种数据源"""
|
||||
|
||||
@staticmethod
|
||||
def load_bars(
|
||||
symbol: str,
|
||||
exchange: Exchange,
|
||||
interval: Interval,
|
||||
start_date: pd.Timestamp,
|
||||
end_date: pd.Timestamp
|
||||
):
|
||||
"""加载bar数据,支持SQLite、CSV文件、网络API"""
|
||||
# 首先尝试从SQLite数据库加载
|
||||
# 尝试从本地CSV文件加载
|
||||
# 尝试从网络API加载
|
||||
return bars
|
||||
```
|
||||
|
||||
#### 2.3.3 回测参数适配层
|
||||
|
||||
```python
|
||||
class BacktestParameterAdapter:
|
||||
"""回测参数适配类"""
|
||||
|
||||
@staticmethod
|
||||
def parse_parameters(params: dict):
|
||||
"""解析回测参数"""
|
||||
return {
|
||||
"symbol": params.get("symbol", "510300"),
|
||||
"exchange": params.get("exchange", Exchange.SSE),
|
||||
"interval": params.get("interval", Interval.DAILY),
|
||||
"start_date": pd.to_datetime(params.get("start_date", "2021-01-01")),
|
||||
"end_date": pd.to_datetime(params.get("end_date", "2023-12-31")),
|
||||
"strategy_params": params.get("strategy_params", {})
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def run_backtest(strategy_class: type, parameters: dict):
|
||||
"""运行回测,传递参数"""
|
||||
engine = BacktesterEngine()
|
||||
result = engine.run_backtesting(
|
||||
strategy_class,
|
||||
parameters["symbol"],
|
||||
parameters["exchange"],
|
||||
parameters["interval"],
|
||||
parameters["start_date"],
|
||||
parameters["end_date"],
|
||||
0.0003, # 手续费
|
||||
0.2, # 滑点
|
||||
1, # 合约乘数
|
||||
0.2, # 最小变动价位
|
||||
1000000, # 初始资金
|
||||
parameters["strategy_params"]
|
||||
)
|
||||
return result
|
||||
```
|
||||
|
||||
#### 2.3.4 策略加载方式(保持vnpy原始机制)
|
||||
|
||||
```python
|
||||
from vnpy_ctastrategy import CtaStrategyEngine
|
||||
|
||||
class StrategyLoader:
|
||||
"""策略加载器,保持vnpy原始机制"""
|
||||
|
||||
@staticmethod
|
||||
def load_strategies(engine: CtaStrategyEngine):
|
||||
"""加载策略配置"""
|
||||
engine.load_strategy_setting()
|
||||
|
||||
@staticmethod
|
||||
def reload_strategies(engine: CtaStrategyEngine):
|
||||
"""热加载策略配置"""
|
||||
engine.reload_strategy()
|
||||
```
|
||||
|
||||
## 三、部署方案
|
||||
|
||||
### 3.1 Docker容器部署方案
|
||||
|
||||
#### 3.1.1 Dockerfile
|
||||
|
||||
```dockerfile
|
||||
FROM python:3.10-slim-bookworm
|
||||
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
TZ=Asia/Shanghai
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 安装系统依赖
|
||||
RUN apt-get update && apt-get install -y \
|
||||
--no-install-recommends \
|
||||
build-essential \
|
||||
git \
|
||||
curl \
|
||||
wget \
|
||||
vim \
|
||||
tzdata \
|
||||
libgl1-mesa-glx \
|
||||
libglib2.0-0 \
|
||||
libsm6 \
|
||||
libxext6 \
|
||||
libxrender-dev \
|
||||
libgomp1 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 设置时区
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
# 升级pip
|
||||
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
|
||||
|
||||
# 安装vnpy官方组件
|
||||
COPY requirements.txt /app/
|
||||
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
# 复制项目文件
|
||||
COPY ./strategies /app/strategies
|
||||
COPY ./zhaoyun-data /app/zhaoyun-data
|
||||
COPY ./jiangwei-platform /app/jiangwei-platform
|
||||
COPY ./guanyu-risk /app/guanyu-risk
|
||||
COPY ./zhangfei-technical /app/zhangfei-technical
|
||||
COPY ./pangtong-value /app/pangtong-value
|
||||
COPY ./simayi-quality /app/simayi-quality
|
||||
|
||||
# 创建日志目录
|
||||
RUN mkdir -p /app/logs
|
||||
|
||||
# 复制启动脚本
|
||||
COPY ./main.py /app/main.py
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8000 2014 4102
|
||||
|
||||
# 启动命令
|
||||
CMD ["python", "/app/main.py"]
|
||||
```
|
||||
|
||||
#### 3.1.2 docker-compose.yml
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
sanguo_vnpy:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: sanguo_vnpy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000" # FastAPI Web服务
|
||||
- "2014:2014" # RPC REP-REQ
|
||||
- "4102:4102" # RPC PUB-SUB
|
||||
volumes:
|
||||
- ./zhaoyun-data/data:/app/zhaoyun-data/data
|
||||
- ./jiangwei-platform/scripts:/app/jiangwei-platform/scripts
|
||||
- ./logs:/app/logs
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- VNPY_DATA_DIR=/app/zhaoyun-data/data
|
||||
networks:
|
||||
- sanguo-network
|
||||
|
||||
networks:
|
||||
sanguo-network:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
## 四、实现步骤
|
||||
|
||||
1. **准备项目结构**:按照AGENTS.md中的目录结构组织项目文件
|
||||
2. **准备策略脚本**:在`strategies/`目录下创建继承CtaTemplate的策略类
|
||||
3. **准备数据**:由赵云在`zhaoyun-data/`目录下准备数据
|
||||
4. **准备启动脚本**:在`jiangwei-platform/scripts/`目录下创建启动脚本
|
||||
5. **构建Docker镜像**:执行`docker build -t sanguo_vnpy:v1 .`
|
||||
6. **启动Docker容器**:执行`docker-compose up -d`
|
||||
7. **验证服务**:访问http://192.168.2.154:8000验证服务是否正常
|
||||
|
||||
## 五、结论
|
||||
|
||||
通过使用vnpy官方组件,我们构建了一个稳定、高效的量化交易系统。系统架构符合团队职责和项目结构要求,便于维护和扩展。
|
||||
|
||||
---
|
||||
|
||||
**报告完成时间**:2026年4月9日
|
||||
**报告人**:姜维 伯约
|
||||
**项目**:sanguo_quant_live
|
||||
**位置**:/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/research/task-20260409-vnpy-official-architecture/final/
|
||||
Reference in New Issue
Block a user