20260327 今日开发完成:三个策略新增+结构化适配+消息风控+任务跟踪
This commit is contained in:
@@ -0,0 +1,488 @@
|
||||
# miniQMT 集成调研报告
|
||||
|
||||
**日期:** 2026年3月27日
|
||||
**调研人:** 姜维伯约
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [miniQMT 概述与接口文档](#1-miniqmt-概述与接口文档)
|
||||
2. [vnpy 调用 miniQMT 的方法](#2-vnpy-调用-miniqmt-的方法)
|
||||
3. [网络架构可行性分析](#3-网络架构可行性分析)
|
||||
4. [最简单的集成方案](#4-最简单的集成方案)
|
||||
5. [难度与工作量评估](#5-难度与工作量评估)
|
||||
6. [总结与建议](#6-总结与建议)
|
||||
|
||||
---
|
||||
|
||||
## 1. miniQMT 概述与接口文档
|
||||
|
||||
### 1.1 什么是 miniQMT
|
||||
|
||||
miniQMT 是迅投 QMT(极速交易终端)的一个子功能,是一个精简版的自动交易框架。它提供了数据和交易接口,允许用户在任意 Python IDE 中编写策略,自由度更高。
|
||||
|
||||
**主要特点:**
|
||||
- 只支持实盘交易,不支持回测
|
||||
- 提供数据获取(xtdata)和实盘交易(xttrade)功能
|
||||
- 需要先启动 QMT 客户端并登录
|
||||
|
||||
### 1.2 接口文档
|
||||
|
||||
#### 1.2.1 XtQuant 库
|
||||
|
||||
XtQuant 是 miniQMT 的 Python 接口库,作为 Python 程序与 miniQMT 之间的桥梁。它通过 TCP 连接与本地 miniQMT 服务通信。
|
||||
|
||||
**主要模块:**
|
||||
- `xtdata`:行情数据模块
|
||||
- `xttrader`:交易模块
|
||||
|
||||
#### 1.2.2 基本使用示例
|
||||
|
||||
```python
|
||||
from xtquant import xttrader
|
||||
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
|
||||
from xtquant.xttype import StockAccount
|
||||
|
||||
# 1. 指定客户端路径和会话ID
|
||||
path = r'C:\国金证券QMT交易端\userdata_mini'
|
||||
session_id = int(time.time())
|
||||
|
||||
# 2. 创建交易对象
|
||||
xt_trader = XtQuantTrader(path, session_id)
|
||||
|
||||
# 3. 创建账号对象
|
||||
account = '88832571'
|
||||
acc = StockAccount(account, 'STOCK')
|
||||
|
||||
# 4. 启动交易线程
|
||||
xt_trader.start()
|
||||
|
||||
# 5. 建立交易连接
|
||||
connect_result = xt_trader.connect()
|
||||
print('建立交易连接,返回0表示连接成功', connect_result)
|
||||
|
||||
# 6. 订阅交易回调
|
||||
subscribe_result = xt_trader.subscribe(acc)
|
||||
print('对交易回调进行订阅,返回0表示订阅成功', subscribe_result)
|
||||
```
|
||||
|
||||
#### 1.2.3 配置要求
|
||||
|
||||
1. **启动 QMT 客户端:** 需要先运行 QMT 软件
|
||||
2. **勾选独立交易模式:** 在登录时勾选【独立交易】、【独立模式】或【极简模式】
|
||||
3. **安装 xtquant 包:** 从 QMT 客户端下载 Python 库,或通过 pip 安装
|
||||
|
||||
---
|
||||
|
||||
## 2. vnpy 调用 miniQMT 的方法
|
||||
|
||||
### 2.1 vnpy_qmt Gateway
|
||||
|
||||
社区已经有现成的 vnpy_qmt 项目,可以作为 vnpy 的 QMT Gateway。
|
||||
|
||||
**项目地址:**
|
||||
- GitHub: https://github.com/ruyisee/vnpy_qmt
|
||||
- PyPI: https://pypi.org/project/vnpy-qmt/
|
||||
|
||||
### 2.2 基本使用示例
|
||||
|
||||
```python
|
||||
# -*- coding:utf-8 -*-
|
||||
from vnpy.event import EventEngine
|
||||
from vnpy.trader.engine import MainEngine
|
||||
from vnpy.trader.ui import MainWindow, create_qapp
|
||||
|
||||
# 导入QMT gateway
|
||||
from vnpy_qmt.qmt_gateway import QmtGateway
|
||||
from vnpy_ctastrategy import CtaEngine, CtaStrategyApp
|
||||
|
||||
def main():
|
||||
"""Start VN Trader"""
|
||||
qapp = create_qapp()
|
||||
event_engine = EventEngine()
|
||||
main_engine = MainEngine(event_engine)
|
||||
|
||||
main_engine.add_app(CtaStrategyApp)
|
||||
|
||||
# 添加gateway
|
||||
main_engine.add_gateway(QmtGateway, gateway_name="QMT")
|
||||
|
||||
main_window = MainWindow(main_engine, event_engine)
|
||||
main_window.showMaximized()
|
||||
|
||||
qapp.exec()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
### 2.3 配置步骤
|
||||
|
||||
1. **安装 vnpy-qmt:**
|
||||
```bash
|
||||
pip install vnpy-qmt
|
||||
```
|
||||
|
||||
2. **启动 QMT mini 客户端**
|
||||
|
||||
3. **在 vn.py 中连接 QMT:**
|
||||
- 配置 QMT 路径
|
||||
- 配置账号信息
|
||||
- 点击连接
|
||||
|
||||
---
|
||||
|
||||
## 3. 网络架构可行性分析
|
||||
|
||||
### 3.1 目标架构
|
||||
|
||||
```
|
||||
┌─────────────────┐ 局域网 ┌─────────────────┐
|
||||
│ Windows 机器 │ ◄────────────────────► │ NAS Docker │
|
||||
│ 运行 QMT │ │ 运行 vnpy │
|
||||
└─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 关键限制
|
||||
|
||||
**重要发现:miniQMT 官方接口不支持 RPC 远程调用!**
|
||||
|
||||
根据调研结果:
|
||||
- xtquant 的调用程序需要与 QMT 软件在同一个操作系统中
|
||||
- miniQMT 通过本地 TCP 连接和文件系统(userdata_mini 文件夹)进行通信
|
||||
- 不支持直接的远程调用
|
||||
|
||||
### 3.3 通信机制分析
|
||||
|
||||
miniQMT 的通信方式:
|
||||
1. **文件系统通信:** 通过 `userdata_mini` 文件夹进行数据交换
|
||||
2. **本地 TCP 连接:** xtquant 与本地 miniQMT 服务建立 TCP 连接
|
||||
3. **不支持远程:** 没有提供远程访问接口
|
||||
|
||||
### 3.4 可行的 Workaround 方案
|
||||
|
||||
#### 方案 A:Windows 上运行 vnpy + Docker 仅用于管理
|
||||
|
||||
**架构:**
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ Windows 机器 │
|
||||
│ ┌──────────┐ ┌──────────────┐ │
|
||||
│ │ QMT │ │ vnpy │ │
|
||||
│ │ │◄──►│ │ │
|
||||
│ └──────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────┘
|
||||
│
|
||||
│ 管理界面
|
||||
▼
|
||||
┌──────────────┐
|
||||
│ NAS Docker │
|
||||
│ (仅Web界面) │
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
**优点:**
|
||||
- 架构简单,不需要复杂的网络配置
|
||||
- 性能最好,延迟最低
|
||||
- 稳定性高
|
||||
|
||||
**缺点:**
|
||||
- 需要在 Windows 上运行 vnpy
|
||||
- 不能充分利用 NAS 的计算资源
|
||||
|
||||
#### 方案 B:使用 REST API 中间件
|
||||
|
||||
**架构:**
|
||||
```
|
||||
┌─────────────────┐ 局域网 ┌─────────────────┐
|
||||
│ Windows 机器 │ ◄────────────────────► │ NAS Docker │
|
||||
│ ┌──────────┐ │ │ ┌──────────┐ │
|
||||
│ │ QMT │ │ │ │ vnpy │ │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ └────┬─────┘ │ │ └────┬─────┘ │
|
||||
│ │ │ │ │ │
|
||||
│ ┌────▼─────┐ │ HTTP/REST API │ ┌────▼─────┐ │
|
||||
│ │ REST API │ │◄───────────────────────►│ │ Gateway │ │
|
||||
│ │ 服务 │ │ │ │ │ │
|
||||
│ └──────────┘ │ │ └──────────┘ │
|
||||
└─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
**参考项目:** Rockyzsu/miniqmt(提供 REST API 接口)
|
||||
|
||||
**优点:**
|
||||
- 可以在 NAS Docker 中运行 vnpy
|
||||
- 架构清晰,职责分离
|
||||
|
||||
**缺点:**
|
||||
- 需要开发或适配 REST API 中间件
|
||||
- 增加了系统复杂度
|
||||
- 有一定的性能开销
|
||||
|
||||
#### 方案 C:使用 SSH 隧道 + 文件共享
|
||||
|
||||
**架构:**
|
||||
```
|
||||
┌─────────────────┐ 局域网 ┌─────────────────┐
|
||||
│ Windows 机器 │ ◄────────────────────► │ NAS Docker │
|
||||
│ ┌──────────┐ │ SSH隧道 + SMB │ ┌──────────┐ │
|
||||
│ │ QMT │ │ 文件共享 │ │ vnpy │ │
|
||||
│ │ │◄──┼────────────────────────►│ │ │
|
||||
│ └──────────┘ │ │ └──────────┘ │
|
||||
└─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 通过 SMB 共享 `userdata_mini` 文件夹
|
||||
- 通过 SSH 隧道转发本地 TCP 端口
|
||||
- **注意:此方案可行性较低,因为 miniQMT 的通信机制复杂,不仅仅是文件共享和端口转发**
|
||||
|
||||
---
|
||||
|
||||
## 4. 最简单的集成方案
|
||||
|
||||
基于以上分析,我推荐**方案 A**作为最简单的集成方案。
|
||||
|
||||
### 4.1 推荐方案:Windows 运行 vnpy + QMT,NAS 用于数据存储和 Web 管理
|
||||
|
||||
#### 4.1.1 架构设计
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Windows 机器 (主力) │
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────────────┐ │
|
||||
│ │ QMT 客户端 │◄──►│ vnpy (策略运行) │ │
|
||||
│ │ (独立模式) │ │ (包含 CTA 策略等) │ │
|
||||
│ └──────────────┘ └──────────┬───────────┘ │
|
||||
│ │ │
|
||||
│ │ 数据存储 │
|
||||
│ ▼ │
|
||||
│ ┌───────────────────────────────────────────┐ │
|
||||
│ │ NAS 挂载的网络存储 (用于数据、日志等) │ │
|
||||
│ └───────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────┘
|
||||
│
|
||||
│ Web 管理界面
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ NAS Docker │
|
||||
│ (仅 Web 管理) │
|
||||
└──────────────────┘
|
||||
```
|
||||
|
||||
#### 4.1.2 详细步骤
|
||||
|
||||
**步骤 1:准备 Windows 环境**
|
||||
|
||||
1. 安装 QMT 交易终端
|
||||
2. 申请 miniQMT 权限(咨询券商)
|
||||
3. 安装 Python 3.8+(推荐 3.10)
|
||||
4. 安装 vnpy 和相关依赖
|
||||
|
||||
**步骤 2:配置 QMT**
|
||||
|
||||
1. 启动 QMT 客户端
|
||||
2. 登录时勾选【独立交易】或【独立模式】
|
||||
3. 下载 xtquant 库(QMT 客户端内)
|
||||
4. 测试 xtquant 连接
|
||||
|
||||
**步骤 3:安装和配置 vnpy**
|
||||
|
||||
1. 安装 vnpy:
|
||||
```bash
|
||||
pip install vnpy
|
||||
```
|
||||
|
||||
2. 安装 vnpy-qmt:
|
||||
```bash
|
||||
pip install vnpy-qmt
|
||||
```
|
||||
|
||||
3. 配置 vnpy 的 QMT Gateway
|
||||
|
||||
**步骤 4:配置 NAS 存储(可选但推荐)**
|
||||
|
||||
1. 在 NAS 上创建共享文件夹
|
||||
2. 在 Windows 上映射网络驱动器
|
||||
3. 配置 vnpy 将数据、日志等存储到网络驱动器
|
||||
|
||||
**步骤 5:测试集成**
|
||||
|
||||
1. 启动 QMT 客户端
|
||||
2. 启动 vnpy
|
||||
3. 连接 QMT Gateway
|
||||
4. 测试行情获取
|
||||
5. 测试模拟交易
|
||||
|
||||
#### 4.1.3 配置文件示例
|
||||
|
||||
**vnpy 配置文件(config.json):**
|
||||
```json
|
||||
{
|
||||
"gateway": {
|
||||
"QMT": {
|
||||
"path": "C:\\国金证券QMT交易端\\userdata_mini",
|
||||
"session_id": 123456,
|
||||
"account": "88832571",
|
||||
"account_type": "STOCK"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**启动脚本(run.py):**
|
||||
```python
|
||||
# -*- coding:utf-8 -*-
|
||||
from vnpy.event import EventEngine
|
||||
from vnpy.trader.engine import MainEngine
|
||||
from vnpy.trader.ui import MainWindow, create_qapp
|
||||
from vnpy_qmt.qmt_gateway import QmtGateway
|
||||
from vnpy_ctastrategy import CtaEngine, CtaStrategyApp
|
||||
|
||||
def main():
|
||||
qapp = create_qapp()
|
||||
event_engine = EventEngine()
|
||||
main_engine = MainEngine(event_engine)
|
||||
|
||||
main_engine.add_app(CtaStrategyApp)
|
||||
main_engine.add_gateway(QmtGateway, gateway_name="QMT")
|
||||
|
||||
main_window = MainWindow(main_engine, event_engine)
|
||||
main_window.showMaximized()
|
||||
|
||||
qapp.exec()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 难度与工作量评估
|
||||
|
||||
### 5.1 难度评估
|
||||
|
||||
| 方面 | 难度等级 | 说明 |
|
||||
|------|---------|------|
|
||||
| 整体难度 | ⭐⭐⭐ (中等) | 主要是配置和集成,不需要大量开发 |
|
||||
| QMT 配置 | ⭐⭐ (较易) | 按照文档操作即可 |
|
||||
| vnpy 集成 | ⭐⭐⭐ (中等) | 需要了解 vnpy 的 Gateway 机制 |
|
||||
| 网络架构 | ⭐⭐ (较易) | 推荐方案不需要复杂网络配置 |
|
||||
| 问题排查 | ⭐⭐⭐ (中等) | 可能遇到连接问题需要排查 |
|
||||
|
||||
### 5.2 工作量评估
|
||||
|
||||
#### 5.2.1 最小可行方案(推荐)
|
||||
|
||||
**预计时间:2-3 天**
|
||||
|
||||
| 任务 | 预计时间 | 说明 |
|
||||
|------|---------|------|
|
||||
| 环境准备 | 0.5 天 | 安装 Python、QMT、vnpy |
|
||||
| QMT 配置测试 | 0.5 天 | 配置 QMT,测试 xtquant |
|
||||
| vnpy 集成 | 1 天 | 配置 vnpy-qmt,测试连接 |
|
||||
| 测试验证 | 0.5 天 | 测试行情、交易功能 |
|
||||
| **总计** | **2.5 天** | |
|
||||
|
||||
#### 5.2.2 完整方案(包含 NAS 集成)
|
||||
|
||||
**预计时间:3-5 天**
|
||||
|
||||
| 任务 | 预计时间 | 说明 |
|
||||
|------|---------|------|
|
||||
| 环境准备 | 0.5 天 | 安装 Python、QMT、vnpy |
|
||||
| QMT 配置测试 | 0.5 天 | 配置 QMT,测试 xtquant |
|
||||
| vnpy 集成 | 1 天 | 配置 vnpy-qmt,测试连接 |
|
||||
| NAS 配置 | 1 天 | 配置文件共享、挂载 |
|
||||
| 测试验证 | 1 天 | 完整功能测试 |
|
||||
| 文档编写 | 0.5 天 | 操作文档、故障排查指南 |
|
||||
| **总计** | **4.5 天** | |
|
||||
|
||||
### 5.3 风险点
|
||||
|
||||
| 风险点 | 影响 | 概率 | 应对措施 |
|
||||
|--------|------|------|---------|
|
||||
| 券商不支持 miniQMT | 高 | 中 | 提前咨询券商,确认权限 |
|
||||
| QMT 版本兼容性问题 | 中 | 中 | 使用推荐版本,及时更新 |
|
||||
| 网络连接不稳定 | 中 | 低 | 使用有线网络,配置冗余 |
|
||||
| vnpy-qmt 社区项目维护问题 | 中 | 低 | 关注项目动态,准备备用方案 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 总结与建议
|
||||
|
||||
### 6.1 主要结论
|
||||
|
||||
1. **miniQMT 是可行的**:miniQMT 提供了完善的 Python 接口,可以满足量化交易的需求
|
||||
|
||||
2. **vnpy 集成已有现成方案**:社区的 vnpy-qmt 项目可以直接使用
|
||||
|
||||
3. **网络架构需要调整**:由于 miniQMT 不支持远程调用,推荐在 Windows 上同时运行 QMT 和 vnpy
|
||||
|
||||
4. **工作量适中**:最小可行方案预计 2-3 天可以完成
|
||||
|
||||
### 6.2 具体建议
|
||||
|
||||
#### 6.2.1 短期方案(推荐立即实施)
|
||||
|
||||
1. **采用推荐的最小可行方案**:
|
||||
- Windows 机器上同时运行 QMT 和 vnpy
|
||||
- NAS 用于数据存储和备份
|
||||
- 预计 2-3 天完成
|
||||
|
||||
2. **步骤安排**:
|
||||
- Day 1:环境准备、QMT 配置测试
|
||||
- Day 2:vnpy 集成、基础功能测试
|
||||
- Day 3:完整测试、文档编写
|
||||
|
||||
#### 6.2.2 长期优化方案(可选)
|
||||
|
||||
如果后续需要更好地利用 NAS 资源,可以考虑:
|
||||
|
||||
1. **开发 REST API 中间件**:
|
||||
- 在 Windows 上运行 REST API 服务
|
||||
- NAS Docker 中的 vnpy 通过 REST API 调用
|
||||
- 预计额外工作量:1-2 周
|
||||
|
||||
2. **容器化 Windows 应用**:
|
||||
- 使用 Wine 或 Windows 容器运行 QMT
|
||||
- 技术难度较高,需要评估可行性
|
||||
|
||||
#### 6.2.3 注意事项
|
||||
|
||||
1. **券商沟通**:提前与券商确认 miniQMT 权限和使用限制
|
||||
2. **测试环境**:先在模拟环境充分测试,再考虑实盘
|
||||
3. **监控告警**:建立监控机制,及时发现和处理问题
|
||||
4. **备份策略**:定期备份配置和数据
|
||||
5. **文档维护**:及时更新操作文档和故障排查指南
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 参考资源
|
||||
|
||||
- vnpy_qmt 项目:https://github.com/ruyisee/vnpy_qmt
|
||||
- miniqmt-demo:https://github.com/zsrl/miniqmt-demo
|
||||
- Rockyzsu/miniqmt:https://github.com/Rockyzsu/miniqmt
|
||||
- vnpy 官网:https://www.vnpy.com/
|
||||
- vnpy 社区:https://www.vnpy.com/forum/
|
||||
|
||||
### B. 关键术语
|
||||
|
||||
- **QMT**:迅投极速交易终端
|
||||
- **miniQMT**:QMT 的精简版自动交易框架
|
||||
- **XtQuant**:miniQMT 的 Python 接口库
|
||||
- **vnpy**:基于 Python 的开源量化交易平台
|
||||
- **Gateway**:vnpy 中的交易接口适配器
|
||||
|
||||
### C. 联系信息
|
||||
|
||||
如有问题,请联系:姜维伯约(三军后勤总督)
|
||||
|
||||
---
|
||||
|
||||
**报告结束**
|
||||
|
||||
Reference in New Issue
Block a user