Files
sanguo_quant_live/jiangwei-platform/research/task-20260409-vnpy-official-architecture/final/vnpy-official-architecture-research-report.md
T
2026-04-11 09:00:02 +08:00

8.4 KiB
Raw Blame History

vnpy官方组件架构研究报告

一、研究背景

在sanguo_quant_live项目中,我们需要构建一个稳定、高效的量化交易系统。为了确保系统的可维护性和可扩展性,我们遵循以下核心原则:

核心原则

尽量使用原生vnpy框架模块,不仿写,不重写,尽量适配

  • 优先使用vnpy官方提供的组件,避免重复造轮子
  • 对于不满足需求的功能,优先考虑扩展和适配,而非完全重写
  • 保持与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 数据源适配层

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 回测参数适配层

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原始机制)

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

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

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/