QMT如何自动下单?XtQuant order_stock()完整教程

📅 2026/7/22 19:35:27 👁️ 阅读次数 📝 编程学习
QMT如何自动下单?XtQuant order_stock()完整教程

问题背景

QMT 自动交易中,最常见的问题是:已经连接QMT,但不知道如何通过 Python 发出股票买卖委托。

XtQuant 的order_stock()用于股票同步报单。成功时返回大于 0 的订单编号;返回-1通常表示本次委托提交失败。下单前应先完成交易连接、账户订阅和资金检查。

实现思路

  1. 创建 QMT 交易对象并连接客户端。

  2. 创建股票资金账户对象。

  3. 订阅账户资金、委托、成交与持仓推送。

  4. 查询可用资金。

  5. 使用限价单买入,并根据订单编号查询结果。

完整代码示例

from xtquant import xtconstant from xtquant.xttrader import XtQuantTrader from xtquant.xttype import StockAccount # MiniQMT 用户目录:请改成自己电脑上的实际路径 QMT_PATH = r"D:\迅投极速交易终端 QMT\userdata_mini" # 资金账号:请改为自己的账号 ACCOUNT_ID = "你的资金账号" # 每次运行使用不同会话号即可 SESSION_ID = 20260722 # 买入标的与限价 STOCK_CODE = "510300.SH" BUY_VOLUME = 100 BUY_PRICE = 4.00 def main(): # 创建交易连接 xt_trader = XtQuantTrader(QMT_PATH, SESSION_ID) xt_trader.start() connect_result = xt_trader.connect() if connect_result != 0: print("连接 MiniQMT 失败,返回码:", connect_result) return print("MiniQMT 连接成功") # 创建股票账户对象 account = StockAccount(ACCOUNT_ID) # 订阅账户推送:资金、委托、成交、持仓 subscribe_result = xt_trader.subscribe(account) if subscribe_result != 0: print("账户订阅失败,返回码:", subscribe_result) return print("账户订阅成功") # 查询资产,避免在资金不足时直接报单 asset = xt_trader.query_stock_asset(account) if asset is None: print("资产查询失败") return print("可用资金:", asset.cash) estimated_amount = BUY_PRICE * BUY_VOLUME if asset.cash < estimated_amount: print("可用资金不足,预计委托金额:", estimated_amount) return # 限价买入 order_id = xt_trader.order_stock( account, STOCK_CODE, xtconstant.STOCK_BUY, BUY_VOLUME, xtconstant.FIX_PRICE, BUY_PRICE, "easyquant_qmt_demo", "QMT限价买入示例" ) # 大于0代表成功生成订单编号 if order_id > 0: print("委托提交成功,订单编号:", order_id) # 查询本次订单状态 order = xt_trader.query_stock_order(account, order_id) if order: print("证券代码:", order.stock_code) print("委托数量:", order.order_volume) print("委托价格:", order.price) else: print("订单暂未查询到,可稍后重试") else: print("委托提交失败,返回值:", order_id) if __name__ == "__main__": main()