20260327 今日开发完成:三个策略新增+结构化适配+消息风控+任务跟踪

This commit is contained in:
cfdaily
2026-03-27 16:44:01 +08:00
parent f043f123a1
commit dd1b06ba4a
41 changed files with 12115 additions and 0 deletions
@@ -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 方案
#### 方案 AWindows 上运行 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 + QMTNAS 用于数据存储和 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-demohttps://github.com/zsrl/miniqmt-demo
- Rockyzsu/miniqmthttps://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. 联系信息
如有问题,请联系:姜维伯约(三军后勤总督)
---
**报告结束**