auto-sync: 2026-04-09 15:00:02

This commit is contained in:
cfdaily
2026-04-09 15:00:02 +08:00
parent ab937833a2
commit a77fbd7b21
2 changed files with 270 additions and 0 deletions
@@ -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/
@@ -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": []
}
}