量化交易QMT接口使用入门

量化交易QMT接口使用入门缩略图

量化交易QMT接口使用入门:从零搭建本地策略开发环境

在A股量化交易生态中,QMT(Quick Market Trading)系统正以“券商原生、低延迟、全功能”三大优势迅速崛起。作为华泰证券推出的专业级量化交易平台,QMT不仅支持实盘快速接入,更开放了稳定、易用且功能完备的Python API接口(即QMT Python SDK),成为个人开发者、私募团队及高校研究者构建高频、中频策略的重要基础设施。本文将系统梳理QMT接口的使用全流程,涵盖环境准备、接口接入、基础操作、策略示例与常见避坑指南,助你15分钟完成本地策略开发环境搭建。

一、QMT系统与API核心定位
QMT并非独立软件,而是华泰证券为满足专业投资者需求深度定制的交易终端。其核心价值在于:
✅ 原生对接华泰柜台,委托延迟可压至20ms以内(优于多数第三方接口);
✅ 支持Level-2行情、逐笔委托/成交、融资融券、ETF申赎、期权等全品种;
✅ 提供事件驱动(on_tick/on_bar/on_order)与轮询双模式;
✅ Python SDK完全开源(GitHub可查),文档详实,无加密黑盒;
✅ 免费提供仿真交易账户(需实名认证),零成本验证策略逻辑。

二、环境准备:四步完成本地部署

  1. 安装QMT客户端
    访问华泰官网下载最新版QMT(推荐v6.7+),安装时勾选“Python接口支持”。安装完成后首次启动需完成账户登录(支持模拟户或实盘户)。注意:QMT必须运行在Windows系统(暂不支持macOS/Linux),且建议关闭杀毒软件实时防护(避免DLL注入拦截)。

  2. 配置Python环境
    QMT自带嵌入式Python 3.9环境(路径通常为C:\\htzq\\QMT\\python),无需额外安装Anaconda。为保障兼容性,强烈建议直接使用该环境:

# 启动QMT自带Python终端(开始菜单→QMT→Python Console)
# 或命令行进入:
cd C:\\htzq\\QMT\\python
python -m pip install --upgrade pip
  1. 启用API服务
    打开QMT主界面 → 【系统设置】→【API设置】→ 勾选“启用Python API服务”,设置端口(默认10000)、允许IP(建议填127.0.0.1)、超时时间(30秒)。重启QMT使配置生效。

  2. 验证连接
    新建test_connect.py

from xtquant.xttrader import XtQuantTrader
from xtquant.xttype import * 
import time

# 初始化交易对象(注意:路径指向QMT安装目录下的config.json)
trader = XtQuantTrader(r\"C:\\htzq\\QMT\\conf\\xt_config.json\")
res = trader.start()  # 启动连接
print(\"连接状态:\", \"成功\" if res == 0 else \"失败\")

# 获取账户信息(需先登录QMT并确保账户在线)
acc = trader.get_account()
print(\"账户ID:\", acc.account_id)
print(\"可用资金:\", acc.cash)

运行后若输出账户信息,即表示API通信链路已通。

三、核心接口实践:行情、下单与事件监听
QMT SDK采用模块化设计,主要分三类接口:

  • 行情接口(xtdata):获取实时/历史数据

    from xtquant import xtdata
    # 订阅沪深300成分股实时行情(自动触发on_quote回调)
    xtdata.subscribe_quote([\'000300.SH\'], \'index\', callback=on_quote)
    # 获取日线数据(支持复权)
    df = xtdata.get_market_data(field_list=[\'open\',\'close\'], stock_list=[\'600519.SH\'], period=\'1d\', start_time=\'20240101\', end_time=\'20240630\', count=-1, fill_data=True)
    
  • 交易接口(xttrader):委托、撤单、查询

    # 下单(市价单示例)
    order_id = trader.order_stock(
        account_id=acc.account_id,
        stock_code=\"600519.SH\",
        order_type=ORDER_TYPE_BUY,
        order_volume=100,
        price_type=PRICETYPE_MARKET,
        price=0  # 市价单价格传0
    )
    print(\"委托单号:\", order_id)
    
    # 查询当日委托
    orders = trader.query_stock_orders(acc.account_id, \'today\')
    
  • 事件驱动机制:通过继承XtQuantTraderCallback实现异步响应

    class MyCallback(XtQuantTraderCallback):
        def on_order(self, order):
            print(f\"订单状态更新:{order.order_id} → {order.status}\")
        def on_trade(self, trade):
            print(f\"成交回报:{trade.order_id}, 成交量{trade.traded_volume}\")
    
    trader.register_callback(MyCallback())
    

四、一个完整策略示例:双均线突破

# 双均线策略(5日/20日收盘价)
def on_bar(data):
    close = data[\'close\'].values[-1]
    ma5 = data[\'close\'].values[-5:].mean()
    ma20 = data[\'close\'].values[-20:].mean()
    
    if ma5 > ma20 and self.position == 0:
        trader.order_stock(acc.account_id, \"600519.SH\", ORDER_TYPE_BUY, 100, PRICETYPE_MARKET, 0)
        self.position = 1
    elif ma5 < ma20 and self.position == 1:
        trader.order_stock(acc.account_id, \"600519.SH\", ORDER_TYPE_SELL, 100, PRICETYPE_MARKET, 0)
        self.position = 0

# 订阅分钟K线(每分钟触发一次)
xtdata.subscribe_whole_quote([\'600519.SH\'], \'stock\', period=\'1m\', callback=on_bar)

五、关键注意事项与避坑指南
⚠️ 权限限制:模拟账户无法调用融资融券、期权等权限,实盘需单独申请;
⚠️ 行情订阅:免费用户仅支持50只股票实时行情,超限需开通付费服务;
⚠️ 委托频率:A股对同一账户有委托频次限制(约300笔/5分钟),策略需加入防刷单逻辑;
⚠️ 数据时区:所有时间戳均为东八区(UTC+8),无需手动转换;
⚠️ 异常处理:务必对trader.order_stock()返回值做非零判断,并捕获XtQuantTraderException

结语
QMT接口降低了专业量化交易的技术门槛,但“易用”不等于“无脑”。真正的策略壁垒永远在因子挖掘、风控建模与实盘迭代中。建议新手从QMT仿真环境起步,用1个月跑通数据获取→信号生成→自动下单闭环,再逐步加入仓位管理、滑点模拟与绩效归因。当你的第一笔自动化盈利订单在QMT终端弹出红色成交提醒时,那不仅是代码的胜利,更是量化思维落地的起点。

(全文共计1280字)

滚动至顶部