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/
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"serialNumber": 3,
|
||||
"id": "pangtong-fujunshi-to-jiangwei-infra-1775717967175717000",
|
||||
"conversationId": "pangtong-fujunshi-to-jiangwei-infra-20260409",
|
||||
"inReplyTo": null,
|
||||
"from": "pangtong-fujunshi",
|
||||
"to": "jiangwei-infra",
|
||||
"type": "text",
|
||||
"performative": "inform",
|
||||
"timestamp": "2026-04-09T06:59:27.328075000Z",
|
||||
"title": "\u8bf7\u786e\u8ba4TradingAgents\u8c03\u7814\u540esanguo_vnpy\u67b6\u6784\u5f53\u524d\u8fdb\u5ea6",
|
||||
"text": "\u4f60\u521a\u521a\u53d1\u9001\u4e86\u57fa\u4e8eAGENTS.md\u8c03\u6574\u540e\u7684\u67b6\u6784\u65b9\u6848\uff0c\u73b0\u5728\u9700\u8981\u786e\u8ba4\uff1a\n\n1. \u76ee\u524d\u9879\u76ee\u76ee\u5f55\u7ed3\u6784\u5df2\u7ecf\u6309\u7167AGENTS.md\u8c03\u6574\u597d\u4e86\u5417\uff1f\u54ea\u4e9b\u76ee\u5f55\u5df2\u7ecf\u521b\u5efa\u5b8c\u6210\uff1f\n2. \u57fa\u7840\u8bbe\u65bd\u90e8\u5206\uff08Docker\u914d\u7f6e\u3001RPC\u670d\u52a1\u3001Web\u670d\u52a1\uff09\u54ea\u4e9b\u5df2\u7ecf\u5b8c\u6210\uff1f\n3. \u54ea\u4e9b\u5de5\u4f5c\u8fd8\u6ca1\u505a\uff0c\u9700\u8981\u5206\u914d\u7ed9\u5176\u4ed6\u5c06\u519b\u534f\u4f5c\uff1f\n4. \u4e0b\u4e00\u6b65\u8ba1\u5212\u662f\u4ec0\u4e48\uff1f\n\n\u8bf7\u56de\u590d\u4f60\u7684\u5f53\u524d\u72b6\u6001\uff0c\u6211\u6c47\u603b\u540e\u627e\u7528\u6237\u786e\u8ba4\u5206\u914d\u65b9\u6848\u3002",
|
||||
"isRead": false,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user