diff --git a/jiangwei-platform/research/task-20260409-vnpy-official-architecture/final/vnpy-official-architecture-research-report.md b/jiangwei-platform/research/task-20260409-vnpy-official-architecture/final/vnpy-official-architecture-research-report.md new file mode 100644 index 000000000..3dc84b64d --- /dev/null +++ b/jiangwei-platform/research/task-20260409-vnpy-official-architecture/final/vnpy-official-architecture-research-report.md @@ -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/ diff --git a/mail/sanguo-quant/inboxes/jiangwei-infra/000003-pangtong-fujunshi-to-jiangwei-infra-1775717967175717000.json b/mail/sanguo-quant/inboxes/jiangwei-infra/000003-pangtong-fujunshi-to-jiangwei-infra-1775717967175717000.json new file mode 100644 index 000000000..4346a1d06 --- /dev/null +++ b/mail/sanguo-quant/inboxes/jiangwei-infra/000003-pangtong-fujunshi-to-jiangwei-infra-1775717967175717000.json @@ -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": [] + } +}