QMT与MiniQMT API差异对比

QMT与MiniQMT API差异对比

以下以QMT内置Python文档(innerApi)和MiniQMT的xtquant文档(nativeApi)为依据,仅对比交易相关函数的代码用法、函数签名、参数差异及迁移注意事项。


一、下单函数

对比维度 QMT(内置Python) MiniQMT(xtquant)
核心函数 passorder() order_stock()(同步)/ order_stock_async()(异步)
函数签名 passorder(opType, orderType, accountid, orderCode, prType, price, volume, strategyName, quickTrade, userOrderId, ContextInfo) order_stock(account, stock_code, order_type, order_volume, price_type, price, strategy_name, order_remark)
order_stock_async(account, stock_code, order_type, order_volume, price_type, price, strategy_name, order_remark)
参数说明 opType: 23=买入,24=卖出
orderType: 1101=按股/手,1102=按金额
accountid: 资金账号(str)
orderCode: 证券代码,如"600000.SH"
prType: 5=最新价,11=限价,14=对方最优
price: 委托价格
volume: 委托数量
strategyName: 策略名称
quickTrade: 0=逐K线生效,2=立即下单
userOrderId: 用户自定义委托ID(可缺省)
ContextInfo: 系统上下文对象
account: StockAccount对象
stock_code: 证券代码,如'600000.SH'
order_type: xtconstant.STOCK_BUY / STOCK_SELL
order_volume: 委托数量(股/张)
price_type: xtconstant.FIX_PRICE(限价) / xtconstant.LATEST_PRICE(最新价)
price: 委托价格(市价填0)
strategy_name: 策略名称
order_remark: 委托备注
返回值 无明确返回值,通过回调获取结果 成功返回order_id(>0),失败返回-1
代码示例
# 限价买入100股
passorder(23, 1101, account,
    '600000.SH', 11, 10.50, 100,
    'my_strategy', 0, '', C)
# 立即下单
passorder(23, 1101, account,
    '600000.SH', 5, -1, 100,
    'my_strategy', 2, 'msg', C)
# 同步限价买入
order_id = xt_trader.order_stock(
    account, '600000.SH',
    xtconstant.STOCK_BUY, 1000,
    xtconstant.FIX_PRICE, 10.5,
    'my_strategy', 'order_test')
# 异步市价买入
seq = xt_trader.order_stock_async(
    account, '600000.SH',
    xtconstant.STOCK_BUY, 1000,
    xtconstant.LATEST_PRICE, 0,
    'hft', 'fast_order')

迁移注意事项:

  • QMT使用单一passorder函数通过opType数值(23/24)区分买卖;MiniQMT使用order_type常量(STOCK_BUY/STOCK_SELL)
  • QMT报价类型用数值(5/11/14);MiniQMT用常量(FIX_PRICE/LATEST_PRICE)
  • QMT的quickTrade参数控制是否立即下单(0=逐K线,2=立即);MiniQMT通过同步/异步函数区分
  • QMT必须传入ContextInfo对象;MiniQMT无需此参数
  • QMT的accountid是字符串;MiniQMT需构建StockAccount对象
  • 代码不能直接复制粘贴,需重写下单逻辑

二、撤单函数

对比维度 QMT(内置Python) MiniQMT(xtquant)
核心函数 通过passorder配合特定参数,或使用内置撤单接口 cancel_order_stock()(同步)/ cancel_order_stock_async()(异步)
函数签名 取决于具体实现(文档中无独立撤单函数签名) cancel_order_stock(account, order_id)
cancel_order_stock_async(account, order_id)
cancel_order_stock_sysid_async(account, market, order_sysid)
参数说明 account: StockAccount对象
order_id: 系统生成的订单编号
market: 交易市场(xtconstant.SH_MARKET等)
order_sysid: 券商柜台合同编号(str)
返回值 同步撤单返回撤单结果;异步撤单返回撤单请求序号(>0成功,-1失败)
代码示例 (文档中未提供独立撤单示例)
# 按订单编号撤单
cancel_result = xt_trader.cancel_order_stock_async(
    account, order_id)
# 按柜台合同编号撤单
cancel_result = xt_trader.cancel_order_stock_sysid_async(
    account, xtconstant.SH_MARKET, "100")

迁移注意事项:

  • QMT撤单方式依赖具体柜台实现,文档中未提供独立撤单函数签名;MiniQMT提供明确的同步/异步撤单接口
  • MiniQMT支持两种撤单方式:按系统订单编号(order_id)和按券商柜台合同编号(order_sysid)
  • 撤单失败信息通过on_order_error回调或撤单失败主推接口返回

三、账户信息查询

对比维度 QMT(内置Python) MiniQMT(xtquant)
资产查询 query_stock_asset(account) query_stock_asset(account)
持仓查询 query_stock_positions(account) query_stock_positions(account)
委托查询 query_stock_orders(account, cancelable_only=False) query_stock_orders(account, cancelable_only=False)
成交查询 query_stock_trades(account) query_stock_trades(account)
参数说明 account: 资金账号 account: StockAccount对象
cancelable_only: 是否仅查询可撤委托(默认False)
返回值 query_stock_asset: XtAsset对象或None
query_stock_positions: XtPosition列表或None
query_stock_orders: XtOrder列表或None
query_stock_trades: XtTrade列表或None
query_stock_asset: XtAsset对象或None
query_stock_positions: XtPosition列表或None
query_stock_orders: XtOrder列表或None
query_stock_trades: XtTrade列表或None
代码示例
# QMT查询资产
asset = query_stock_asset(account)
# QMT查询持仓
positions = query_stock_positions(account)
# MiniQMT查询资产
asset = xt_trader.query_stock_asset(account)
# MiniQMT查询持仓
positions = xt_trader.query_stock_positions(account)
# MiniQMT查询委托
orders = xt_trader.query_stock_orders(account, False)
# MiniQMT查询成交
trades = xt_trader.query_stock_trades(account)

迁移注意事项:

  • 函数名完全相同query_stock_assetquery_stock_positionsquery_stock_ordersquery_stock_trades),是迁移最顺畅的部分
  • 核心区别在于account参数类型:QMT接受字符串资金账号,MiniQMT需要StockAccount对象
  • 返回值数据结构基本一致(XtAsset/XtPosition/XtOrder/XtTrade),字段名需对照文档确认
  • 查询失败均返回None

四、成交回报与回调函数

对比维度 QMT(内置Python) MiniQMT(xtquant)
回调机制 在策略中直接定义全局回调函数 继承XtQuantTraderCallback类并重写方法
委托回调 order_callback(ContextInfo, orderInfo)
参数: ContextInfo上下文, orderInfo委托对象
on_stock_order(self, order)
参数: order(XtOrder对象)
成交回调 deal_callback(ContextInfo, dealInfo)
参数: ContextInfo, dealInfo成交对象
on_stock_trade(self, trade)
参数: trade(XtTrade对象)
资金回调 account_callback(ContextInfo, accountInfo) on_stock_asset(self, asset)
参数: asset(XtAsset对象)
持仓回调 position_callback(ContextInfo, positionInfo) on_stock_position(self, position)
参数: position(XtPosition对象)
错误回调 orderError_callback(ContextInfo, passOrderInfo, msg) on_order_error(self, order_error)
连接状态回调 无明确对应 on_disconnected(self)
代码示例
def order_callback(C, orderInfo):
    print(orderInfo.m_strInstrumentID)

def deal_callback(C, dealInfo):
    print(dealInfo.m_strInstrumentID)

def orderError_callback(C, info, msg):
    print(info.orderCode, msg)
class MyCallback(XtQuantTraderCallback):
    def on_stock_order(self, order):
        print(f"委托状态:{order.order_status}")
    
    def on_stock_trade(self, trade):
        print(f"成交价:{trade.traded_price}")
    
    def on_stock_asset(self, asset):
        print(f"可用资金:{asset.cash}")

迁移注意事项:

  • QMT回调函数为全局函数,直接在策略中定义即可;MiniQMT需继承XtQuantTraderCallback并注册
  • QMT回调第一个参数均为ContextInfo;MiniQMT回调第一个参数均为self
  • QMT回调函数名(order_callback/deal_callback)与MiniQMT(on_stock_order/on_stock_trade完全不同
  • MiniQMT需先创建回调实例并注册:xt_trader.register_callback(callback_obj)
  • 数据结构字段名有差异,需对照各自数据字典

五、迁移总结

迁移项 改动难度 关键改动点
下单 函数名从passorder改为order_stock;参数从数值常量改为xtconstant枚举;需构建StockAccount对象;移除ContextInfo参数
撤单 QMT无独立撤单函数文档;MiniQMT使用cancel_order_stock系列,支持按订单编号和按柜台合同编号两种方式
账户查询 函数名完全相同;仅需将account从字符串改为StockAccount对象
回调函数 从全局函数改为继承类;函数名全部变更(order_callbackon_stock_order等);需注册回调实例

通用迁移建议:

  1. 将所有passorder调用替换为order_stock/order_stock_async,参数映射参考上表
  2. 将字符串accountid改为StockAccount(accountid)对象
  3. prType数值(5/11/14)替换为xtconstant.LATEST_PRICE/FIX_PRICE等常量
  4. 回调函数从全局定义改为继承XtQuantTraderCallback
  5. 查询函数基本可复用,仅需调整account参数类型