Python量化交易全流程 | QMT开户与环境搭建到实盘一步就通
发布时间:13小时前阅读:16
很多掌握 Python 基础的交易者,在学习量化时都会遇到同一个卡点:能看懂指标逻辑、能写出回测代码,但不知道如何把策略信号对接真实交易通道。QMT 的核心优势,就是提供了配套的 Python 接口,支持行情订阅、历史数据拉取、自动委托、订单状态回调,让开发者可以自主搭建一整套程序化交易系统。
本文从 Python 开发视角出发,聚焦代码落地链路,区分不同开发模式、梳理环境搭建的常见坑、讲解 API 调试思路、规范策略开发结构,带你走完从拿到权限、本地调试到策略上线实盘的完整开发流程。
一、先理清:QMT 两种 Python 开发模式(新手极易混淆)
不少新手刚上手就报错,大多是没有分清两套开发环境,两套代码写法互不兼容:
- QMT 内置模型模式
在客户端模型研究面板新建策略文件,使用软件自带的 Python 解释器,调用内置函数实现行情获取和下单。上手门槛低,适合快速验证简单信号;但 Python 版本固定,第三方扩展库支持有限,调试工具简陋,不方便做版本管理,适合快速跑通简单思路。 - 外部独立 Python 开发(xtquant,本文重点)
使用 VSCode、PyCharm 等常用编辑器写代码,使用自己本地的 Python 环境,调用 xtquant 库,分为行情模块与交易模块。QMT 客户端只充当行情和交易网关,保持登录运行即可。这种方式自由度更高,可以自由搭配 pandas、numpy 等数据分析库,适合长期迭代因子策略、多标的批量监控,也是绝大多数个人量化开发者的选择。
运行前提:必须登录券商版 QMT 客户端;通用体验版无法对接真实交易账户。
硬件与系统前置要求:仅支持 Windows 64 位系统,推荐 Win10、Win11;内存建议 8G 及以上,固态硬盘优先;系统时区设置为东八区;软件安装路径、代码存放文件夹不能包含中文和空格,这是出现报错最高发的原因。
二、开户权限开通:面向 Python 开发者的核对清单
从代码开发角度,开通权限沟通时,不能只确认能否开通 QMT,需要同步确认下面这些接口相关权限:
- 是否开放 xtquant 外部 API 调用权限,部分渠道仅开放内置模型,不开放外部 Python 调用;
- 提供的版本类型,确认是否支持异步下单、订单推送回调能力;
- 接口可交易品种范围,股票、ETF、可转债、信用交易等是否放开委托权限;
- 完成程序化交易相关报备,报备未生效会直接拦截 API 报单;
- 获取对应渠道专属安装包,不要使用网上流通的安装包,这类安装包没有交易路由。
权限开通之后,优先申请仿真账户。仿真柜台和实盘柜台 API 完全一致,一套代码可以直接切换环境,用来专门测试行情订阅、委托、撤单、订单回调等交互逻辑。
三、xtquant Python 环境搭建(两种部署方案 + 排坑)
xtquant 不属于公共开源包,无法直接通过 pip 安装,包文件存放在本地 QMT 安装目录内,这是它和常规 Python 库最大的区别。
示例安装路径:D:\迅投QMT\bin.x64\Lib\site-packages\xtquant
方案 A:添加路径导入 xtquant(独立开发首选)
- 本地安装 Python,优先选择 3.8 或者 3.10 版本,新版本容易出现兼容问题,安装时勾选添加至系统环境变量;
- 安装数据分析依赖库:
pip install pandas numpy
- 在代码起始位置添加检索路径,让本地 Python 识别 xtquant 库,路径修改为自己本地实际路径:
import sys
sys.path.append(r"D:\迅投QMT\bin.x64\Lib\site-packages")
import xtquant
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
import xtquant.xtconstant
- 启动 QMT 客户端,登录仿真或者实盘账号,保持软件在线;
- 运行代码,无报错即代表环境连通成功。
方案 B:直接使用 QMT 内置 Python
在客户端系统设置中找到 Python 设置项,在线安装所需依赖,直接在内置编辑器编写策略。优势是不用额外配置环境;缺点是调试体验弱、扩展库受限,不适合复杂因子策略开发。
高频环境报错速查
- 找不到 xtquant 模块:路径填写错误、QMT 客户端没有启动、使用了非交易版本;
- 订阅行情无返回数据:客户端未登录、标的代码格式错误,标准格式为 600000.SH、000001.SZ;
- 下单返回失败:接口权限未开通、报备流程未完成、标的停牌或涨跌停、账户资金不足。
四、xtquant 基础 API 入门:行情订阅、账户连接、下单 Demo
xtquant 采用事件驱动的运行逻辑,行情推送、订单状态变更都会触发回调函数,不需要持续循环轮询,也是量化 Python 代码的标准开发范式。
下面是可以直接在仿真盘运行的最简模板(异步回调模式)
import sys
sys.path.append(r"D:\迅投QMT\bin.x64\Lib\site-packages")
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
import xtquant.xtconstant
# 回调类:接收行情回报、订单回报、成交回报
class MyCallback(XtQuantTraderCallback):
def on_disconnected(self):
print("连接断开")
def on_order_status(self, order):
print("订单状态更新:", order)
def on_stock_trade(self, trade):
print("成交回报:", trade)
if __name__ == '__main__':
# 1. 创建交易对象,端口和客户端保持一致,默认10001
xt_trader = XtQuantTrader(r"D:\迅投QMT\bin.x64", 10001)
callback = MyCallback()
xt_trader.register_callback(callback)
xt_trader.start()
# 2. 连接账户,替换成自己的资金账号
acc = StockAccount("你的资金账号", "STOCK")
connect_result = xt_trader.connect()
print("连接结果:", connect_result)
xt_trader.subscribe(acc) # 订阅账户回报
# 3. 查询账户资产
asset = xt_trader.query_stock_asset(acc)
print("账户资产:", asset)
# 4. 行情订阅示例(订阅1分钟K线)
xtdata.subscribe_quote("600000.SH", period="1m")
# 5. 下单示例(仿真测试,实盘谨慎放开)
# xt_trader.order_stock(acc, "600000.SH", xtquant.xtconstant.STOCK_BUY,
# 200, xtquant.xtconstant.LATEST_PRICE, -1, "demo策略", "测试")
xt_trader.run_forever()
代码执行顺序:启动网关客户端 → 建立交易连接 → 注册回调函数 → 订阅账户消息 → 行情订阅 → 持续等待推送事件。
五、策略开发标准流程:历史数据回测 → 仿真盘连续运行
Python 量化开发,建议按照数据层、信号层、交易层解耦开发,不要把指标计算、下单逻辑全部写在同一个回调函数内,方便单独校验回测结果。
- 历史数据拉取与回测
调用接口下载 K 线数据,转为 pandas 结构化数据,单独开发回测模块。回测阶段只输出交易信号,不调用任何下单接口。
需要注意做好复权处理,剔除停牌、涨跌停无法成交的交易日;回测默认不包含滑点,回测收益表现不能等同于实盘表现。
# 历史K线下载示例
xtdata.download_history_data("600000.SH", period="1d", start_time="20250101")
data = xtdata.get_market_data_ex(["open","high","low","close","volume"], ["600000.SH"], period="1d")
- 仿真盘事件驱动测试
回测完成之后,切换仿真账户持续运行一段时间。这个阶段重点不是看收益,而是验证整套链路稳定性:
- 网络波动之后能否正常重连;
- 停牌、涨跌停标的触发信号时,是否会重复报单;
- 拒单、废单的捕获逻辑是否正常;
- 长时间运行是否存在内存占用持续上涨、连接掉线等问题。
仿真测试可以提前暴露绝大多数代码逻辑缺陷,不建议跳过仿真直接接入实盘。
六、实盘上线:Python 代码内置风控体系
这里主要介绍需要开发者写在策略代码内部的程序风控逻辑:
- 全局交易开关:设置布尔类型开关变量,调试阶段关闭下单权限,全部验证稳定之后再开启;
- 仓位硬限制:每次信号触发前查询实时持仓,设置单标的仓位上限、账户总仓位上限,超出限制直接终止下单逻辑;
- 单日亏损阈值:每日开盘记录账户权益,实时对比,触及亏损阈值之后关闭下单开关,撤销全部未成交委托;
- 报单频率限流:设置报单冷却间隔,同一标的短时间内禁止重复发单,防止死循环持续报单;
- 日志持久化:行情信号、委托请求、回报信息写入本地日志文件,不只是控制台打印;
- 心跳检测:定时检测交易连接状态,一旦断开,触发告警并停止所有下单动作。
七、代码运维方案:本地挂机与云主机部署取舍
xtquant 依赖 QMT 客户端作为网关,主流稳定运行方案有两种:
- 本地 Windows 主机挂机:电脑设置永不休眠,关闭系统自动更新,交易时段保持在线。适合资金体量小、逻辑简单的策略;缺点是家用宽带断电、路由器故障都会中断策略。
- Windows 云服务器挂机:远程桌面登录云主机,安装客户端和 Python 环境,策略后台常驻运行,稳定性优于家用网络,适合长期实盘。
注意:xtquant 网关程序仅支持 Windows 环境,无法在 Linux 服务器运行。
股票开户欢迎找我!可以申请万0.854的股票佣金、etf 可转债佣金万0.5、国债逆回购一折(百万分之一)!量化软件QMT+ptrade免费使用!还有888、999资金靓号等你选!
温馨提示:投资有风险,选择需谨慎。



问一问
从业认证

+微信
分享该文章
