miniQMT迁移QMT指南

QMT与MiniQMT API差异对比

以下以QMT内置Python文档和MiniQMT的xtquant文档为依据,对比运行逻辑、系统函数、行情接口、交易接口、主推回调的代码用法、函数签名、参数差异及迁移注意事项。


一、一句话定位

项目 内置Python(大QMT) xtquant(MiniQMT)
代码运行位置 QMT客户端进程内部的Python引擎(官方内置3.6) 本地的Python环境(3.6~3.13)
与客户端关系 代码写在客户端编辑器里,由客户端直接驱动 客户端提供行情/交易,xtdata/xttrader
入口对象 ContextInfo + 固定生命周期函数(init/handlebar…) xtdata模块(行情)+ XtQuantTrader实例(交易)
适合人群 想开箱即用、在客户端内一站式完成编写/回测/实盘 想用自己IDE、pandas/numpy/sklearn、多线程并行、复杂工程

二、基础运行逻辑

2.1 内置Python:事件驱动 / 定时任务 + 固定生命周期

内置策略由客户端按固定回调驱动,核心是ContextInfo对象(策略运行环境,含账号、K线信息等):

  • init(ContextInfo):策略启动时仅执行一次,用于订阅行情、订阅账号、设股票池
  • after_init(ContextInfo):init之后、handlebar之前执行一次,用于一次性下单/取数
  • handlebar(ContextInfo)(逐K线驱动):历史K线每根调用一次;盘中每个新分笔(tick)到达驱动调用一次
  • subscribe订阅推送(事件驱动):订阅指定品种分笔,新分笔到达触发回调
  • run_time(func, period, startTime) / schedule_run(...)(定时任务):固定间隔触发回调,适合盘中持续判断
  • stop(ContextInfo):策略关闭前调用(交易连接已断开,不能报撤单)
# coding:gbk
def init(ContextInfo):
    # 订阅行情 / 账号,仅在启动时执行一次
    ContextInfo.set_account('1000000365')   # 实盘主推前必须 set_account
def handlebar(ContextInfo):
    # 每根 K 线 / 每个 tick 都会进来
    print(ContextInfo.barpos)
    # 计算信号 -> passorder(...) 下单

内置模式有三种运行机制:逐K线(handlebar)订阅推送(subscribe)定时任务(run_time)。回测走本地历史数据遍历;实盘走MiniQMT推送。

2.2 xtquant:外部进程 + 显式连接 + 阻塞接收

xtquant是标准Python项目,需先启动MiniQMT客户端,再在外部脚本里主动建连:

  • XtQuantTrader(path, session_id):创建API实例(path为MiniQMT的userdata_mini路径,session_id不同策略要不同)
  • register_callback(cls):注册回调类(主推消息入口)
  • start()connect()subscribe(account):启动线程、建连、订阅账号
  • run_forever():阻塞当前线程,持续接收交易主推
  • 行情侧xtdata模块直接与MiniQMT交互,订阅后需xtdata.run()阻塞维持回调(或在自己的事件循环里保持进程存活)
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount

class MyCallBack(XtQuantTraderCallback):
    def on_stock_order(self, order):
        print("委托回报:", order.stock_code, order.order_status)

if __name__ == "__main__":
    path = r'D:\QMT\userdata_mini'
    xt_trader = XtQuantTrader(path, session_id=123456)
    xt_trader.register_callback(MyCallBack())
    xt_trader.start()
    xt_trader.connect()                      # 返回 0 表示连接成功
    acc = StockAccount('1000000365')
    xt_trader.subscribe(acc)                 # 订阅账号主推
    # ... 下单 ...
    xt_trader.run_forever()                  # 阻塞,接收主推

2.3 逻辑差异要点

  • 内置Python由客户端"推着函数跑"(你写回调,客户端调你);xtquant是"你主动连网关、自己阻塞收推送"
  • xtquant没有init/handlebar概念,行情/交易的驱动完全由你的代码主线程控制
  • 关键坑:内置Python里ContextInfo会随K线切换回滚,不能拿它当持久存储;xtquant没有这层限制,但也没有"每根bar自动触发"的便利,需要自己组织主循环

三、系统函数(运行环境与全局对象)

对比点 内置Python xtquant
核心对象 ContextInfo(策略上下文,存全局变量、账号、K线信息) 无等价对象;行情用xtdata模块,交易用XtQuantTrader实例
初始化 init / after_init(框架自动调用) 手写XtQuantTrader(...).start().connect()
定时器 ContextInfo.run_time(func, period, startTime)ContextInfo.schedule_run(...)cancel_schedule_run(key) 用标准库threading.Timer / schedule / asyncio自己实现
工具函数 is_last_bar()is_new_bar()set_account()get_stock_list_in_sector() xtdata.get_trading_dates()get_sector_list()get_stock_list_in_sector()等(多为模块级函数)
变量保存 建议用自建全局变量;ContextInfo会随bar切换重置到上一根bar结束状态 普通Python全局/类属性即可,无"bar重置"机制
编码/第三方库 编辑器内写#coding:gbk,基于内置python3.6版本的三方库NumPy、Pandas等 任意Python版本与第三方库(pandas/numpy/sklearn/pytorch随意)

四、行情接口(数据获取与订阅)

两者提供的数据种类高度一致(K线、分笔、财务、合约信息、板块、北向等),但调用形态不同:内置是ContextInfo的方法,xtquant是xtdata的模块级函数。

功能 内置Python(ContextInfo方法) xtquant(xtdata模块)
下载历史行情 通过系统功能,操作-数据管理-补充数据等操作补充 xtdata.download_history_data(...) / download_history_data2(...)(带进度回调)
获取行情 ContextInfo.get_market_data_ex(field_list, stock_list, period, start, end, count, dividend_type, fill_data, subscribe) xtdata.get_market_data(field_list=[], stock_list=[], period='1d', ...)
本地数据 ContextInfo.get_local_data(...)(不推荐) xtdata.get_local_data(data_dir=...)
订阅单股 ContextInfo.subscribe_quote(stock, period, dividend, result_type, callback) → 返回订阅号 xtdata.subscribe_quote(stock_code, period, start, end, count, callback)
订阅全推 ContextInfo.subscribe_whole_quote(code_list, callback) xtdata.subscribe_whole_quote(code_list, callback=None)
反订阅 ContextInfo.unsubscribe_quote(subId) xtdata.unsubscribe_quote(seq)
全推快照 ContextInfo.get_full_tick(stock_list) xtdata.get_full_tick(code_list)
财务数据 ContextInfo.get_financial_data(fieldList, stockList, start, end, report_type) xtdata.get_financial_data(stock_list, table_list, ...)
合约信息 ContextInfo.get_instrument_detail(stockcode) xtdata.get_instrument_detail(stock_code, iscomplete)
交易日/板块 ContextInfo.get_stock_list_in_sector(...) xtdata.get_stock_list_in_sector(...)

4.1 示例代码对比

内置Python(在 handlebar / init 里取数):

# coding:gbk
def handlebar(ContextInfo):
    # 取多只股票、多字段、指定时间的历史+实时行情
    data = ContextInfo.get_market_data_ex(
        field_list=['open', 'high', 'low', 'close'],
        stock_list=ContextInfo.stock_list,
        period='1d', start_time='20230101', end_time='20231231',
        subscribe=True)          # subscribe=True 同时订阅实时
    print(data)
    # 订阅单股行情,回调里拿推送
    ContextInfo.subscribe_quote('600000.SH', '1m', 'none', 'DataFrame', on_quote)

def on_quote(datas):             # 推送回调
    print(datas)

xtquant(外部脚本):

import xtquant.xtdata as xtdata
# 主动获取(从缓存/本地)
df = xtdata.get_market_data(
    field_list=['open', 'high', 'low', 'close'],
    stock_list=['600000.SH', '000001.SZ'],
    period='1d', start_time='20230101', end_time='20231231')
print(df)
# 订阅单股,回调 on_data(datas)
def on_data(datas):
    for code in datas:
        print(code, datas[code])
sub_id = xtdata.subscribe_quote('600000.SH', '1m', '', '', 0, on_data)
xtdata.run()   # 阻塞线程,维持回调

4.2 迁移注意事项:

  • 内置get_market_data_exsubscribe开关,取数时可顺带订阅;xtquant的get_market_data是"取缓存",订阅是独立动作subscribe_quote
  • 内置订阅回调签名是自定义的全局函数;xtquant回调是on_data(datas)形态,且必须run()/run_forever()阻塞才能持续收到
  • 内置行情回调只在订阅品种有新分笔时触发;xtquant同理,但控制权在你自己进程
  • 内置下载历史行情需通过客户端UI操作;xtquant可用download_history_data编程式下载

五、下单函数

对比维度 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=股票卖出,33=信用担保品买入,60=ETF申购
orderType: 1101=普通(按股数),1202=按金额/市值
accountid: 资金账号(str)
orderCode: 证券代码,如"600000.SH"
prType: 5=最新价,11=指定价(限价),14=对手价(对方一档)
price: 委托价格
volume: 委托数量(股票为股,期货为手/张)
strategyName: 策略名称
quickTrade: 0=下根K线首tick触发,1=非历史bar调用即触发,2=不判断bar状态调用即触发(历史bar也能触发)
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_shares/order_lots/order_value/order_percent/order_target_value/order_target_percentbuy_open/sell_open等(仅回测生效
另有algo_passorder/smart_algo_passorder算法/拆单
无直接等价,需用query_stock_positions+order_stock自行封装目标仓位/按比例下单逻辑
返回值 无明确返回值,通过回调获取结果 成功返回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/33/60...)区分买卖与品种;MiniQMT使用order_type常量(STOCK_BUY/STOCK_SELL等)
  • QMT报价类型用数值(5=最新价/11=指定价/14=对手价);MiniQMT用xtconstant常量(FIX_PRICE/LATEST_PRICE及市价系列枚举)
  • quickTrade 精确语义:QMTquickTrade=2表示"调用即报单"(对应order_stock默认行为);quickTrade=0表示"下根K线首tick触发",需在xtquant主循环里用run_time/定时器自行模拟;xtquantorder_stock默认就是"调用即立即报单"
  • QMT必须传入ContextInfo对象;MiniQMT无需此参数
  • QMT的accountid是字符串;MiniQMT需构建StockAccount对象
  • 便捷函数差异:QMT提供order_target_percent等目标仓位/按比例下单函数(仅回测生效);xtquant无对应,需query_stock_positions+order_stock自行封装
  • QMT的algo_passorder/smart_algo_passorder算法/拆单函数在xtquant中无直接等价
  • 代码不能直接复制粘贴,需重写下单逻辑

六、撤单函数

对比维度 QMT(内置Python) MiniQMT(xtquant)
核心函数 cancel()(统一撤单函数) cancel_order_stock()(同步)/ cancel_order_stock_async()(异步)/ cancel_order_stock_sysid_async()(按合同号)
函数签名 cancel(orderId, accountId, accountType, ContextInfo) cancel_order_stock(account, order_id)
cancel_order_stock_async(account, order_id)
cancel_order_stock_sysid_async(account, market, order_sysid)
参数说明 orderId: 委托号(需通过get_last_order_idget_value_by_order_id获取)
accountId: 资金账号
accountType: 账号类型(如'STOCK')
ContextInfo: 系统上下文对象
account: StockAccount对象
order_id: 系统生成的订单编号(由order_stock返回)
market: 交易市场(xtconstant.SH_MARKET等)
order_sysid: 券商柜台合同编号(str)
返回值 无明确返回值,通过orderError_callback获取错误信息 同步撤单返回撤单结果;异步撤单返回撤单请求序号(>0成功,-1失败);撤单失败通过on_cancel_error回调返回
代码示例
# coding:gbk
def handlebar(ContextInfo):
    # 先获取最新委托号
    oid = get_last_order_id(
        ContextInfo.accid, 'STOCK', 'order')
    # 撤单
    cancel(oid, ContextInfo.accid,
           'STOCK', ContextInfo)
# 按系统订单编号撤单
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使用单一cancel函数,参数顺序为(orderId, accountId, accountType, ContextInfo);MiniQMT拆分为多个语义化方法
  • QMT的orderId需通过get_last_order_id等函数获取;MiniQMT的order_idorder_stock调用直接返回
  • MiniQMT支持两种撤单方式:按系统订单编号(order_id)和按券商柜台合同编号(order_sysid)
  • MiniQMT撤单失败信息通过独立的on_cancel_error回调返回(QMT无对应回调,统一走orderError_callback

七、账户信息查询

QMT(内置Python)与MiniQMT(xtquant)的查询接口形态完全不同:QMT使用统一的get_trade_detail_data函数,通过strDatatype字符串区分查询类型;MiniQMT使用独立的query_stock_*方法。

查询类型 QMT(内置Python) MiniQMT(xtquant)
资产查询 get_trade_detail_data(accountID, 'ACCOUNT', 'STOCK') xt_trader.query_stock_asset(account)
持仓查询 get_trade_detail_data(accountID, 'POSITION', 'STOCK') xt_trader.query_stock_positions(account)
委托查询 get_trade_detail_data(accountID, 'ORDER', 'STOCK')
配合get_value_by_order_id(...)
xt_trader.query_stock_orders(account, cancelable_only=False)
成交查询 get_trade_detail_data(accountID, 'DEAL', 'STOCK') xt_trader.query_stock_trades(account)
最新委托号 get_last_order_id(account, type, 'order') order_stock调用直接返回order_id
参数说明 accountID: 资金账号字符串
strDatatype: 查询类型字符串('ACCOUNT'/'POSITION'/'ORDER'/'DEAL')
第三参数: 品种类别('STOCK'等)
account: StockAccount对象
cancelable_only: 是否仅查询可撤委托(默认False)
返回值 对应数据对象列表(字段名为m_xxx风格,如m_strInstrumentID query_stock_asset: XtAsset对象或None
query_stock_positions: XtPosition列表或None
query_stock_orders: XtOrder列表或None
query_stock_trades: XtTrade列表或None
代码示例
# QMT统一查询接口
# 查询资产
asset = get_trade_detail_data(
    account, 'ACCOUNT', 'STOCK')
# 查询持仓
positions = get_trade_detail_data(
    account, 'POSITION', 'STOCK')
# 查询委托
orders = get_trade_detail_data(
    account, 'ORDER', 'STOCK')
# 查询成交
trades = get_trade_detail_data(
    account, 'DEAL', 'STOCK')
# MiniQMT独立查询方法
# 查询资产
asset = xt_trader.query_stock_asset(account)
# 查询持仓
positions = xt_trader.query_stock_positions(account)
# 查询委托
orders = xt_trader.query_stock_orders(account, False)
# 查询成交
trades = xt_trader.query_stock_trades(account)

迁移注意事项:

  • 函数形态完全不同:QMT用单一get_trade_detail_datastrDatatype字符串区分;MiniQMT用独立的query_stock_*方法,命名更语义化
  • QMT最新委托号需get_last_order_id单独获取;MiniQMT的order_stock调用后直接返回order_id
  • account参数类型不同:QMT传字符串资金账号;MiniQMT传StockAccount对象
  • 返回值字段命名规则不同:QMT为m_xxx(C++结构映射,如m_strInstrumentID);MiniQMT为snake_case(如stock_code),需对照各自数据字典
  • MiniQMT查询失败返回None

八、成交回报与回调函数

两者都能接收资金/委托/成交/持仓变动的实时推送,但注册与定义方式完全不同:QMT在策略中直接定义全局回调函数(由系统按名调用);MiniQMT需继承XtQuantTraderCallback类并注册实例。

推送类型 QMT(内置Python 全局函数) MiniQMT(xtquant 回调类方法)
账号状态 account_callback(ContextInfo, accountInfo) on_account_status(self, status)
参数: status(XtAccountStatus对象)
委托回报 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对象)
持仓变动 position_callback(ContextInfo, positionInfo) 无独立回调,持仓变动合并在on_stock_trade中或通过query_stock_positions查询获得
任务状态 task_callback(ContextInfo, taskInfo) —(无对应)
下单异常 orderError_callback(ContextInfo, passOrderInfo, msg) on_order_error(self, order_error)
参数: order_error(XtOrderError对象)
撤单异常 —(统一走orderError_callback on_cancel_error(self, cancel_error)
参数: cancel_error(XtCancelError对象)
异步下单回报 —(内置无显式异步,依赖主推) on_order_stock_async_response(self, response)
参数: response(XtOrderResponse对象)
连接状态回调 无明确对应 on_disconnected(self)
生效前提 必须先在init中调用ContextInfo.set_account(account),主推才会推送;回调是与init/handlebar平级的全局函数,由系统按名调用 register_callback(回调类实例)注册回调;需先connect()建连,再subscribe(account)订阅账号主推;断线触发on_disconnected()
代码示例
# coding:gbk
def init(ContextInfo):
    # 主推生效前提:必须先 set_account
    ContextInfo.set_account('1000000365')

def order_callback(C, orderInfo):
    print(orderInfo.m_strInstrumentID,
          orderInfo.m_nOrderStatus)

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

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_order_error(self, order_error):
        print(f"下单失败:{order_error.error_msg}")
    
    def on_account_status(self, status):
        print(f"账号状态:{status.status}")

xt_trader.register_callback(MyCallback())
xt_trader.subscribe(acc)  # 订阅后开始收主推

迁移注意事项:

  • QMT回调函数为全局函数,直接在策略中定义即可,由系统按名调用;MiniQMT需继承XtQuantTraderCallback并调用register_callback(实例)注册
  • QMT回调第一个参数均为ContextInfo;MiniQMT回调第一个参数均为self
  • QMT回调函数名(order_callback/deal_callback/account_callback)与MiniQMT(on_stock_order/on_stock_trade/on_account_status完全不同
  • 持仓变动差异:QMT有独立position_callback;MiniQMT无独立持仓回调,持仓变动信息包含在on_stock_trade中或需主动调用query_stock_positions查询
  • 异步下单回调:QMT无显式异步下单接口,依赖主推;MiniQMT有独立的on_order_stock_async_response回调,配合order_stock_async使用
  • 生效前提不同:QMT需在initset_account;MiniQMT需register_callback+connect+subscribe三步
  • 数据结构字段命名规则不同:QMT为m_xxx(如m_strInstrumentID);MiniQMT为snake_case(如stock_code),需对照各自数据字典

九、其他关键差异速览

维度 内置Python xtquant
Python版本 客户端内置3.6,版本旧、库受限 本机3.6~3.13任选,生态完整
回测框架 原生提供(回测/运行按钮、回测结果报告) 无回测框架,需自建或接第三方
并行/多线程 策略串行,一个卡死影响其他 可多线程、多进程并行跑多个策略
第三方库 需券商白名单 任意pip包
数据范围 与客户端一致(需本地补数据) 与MiniQMT一致(同行情服务器)
部署形态 必须在客户端内运行 任意机器,只要能连上MiniQMT
典型缺点 环境封闭、版本旧、串行 无回测、要自己搭工程、要保活进程

十、交易操作码速查表(迁移时最易踩坑)

内置passorder用整数操作码,xtquant用xtconstant语义枚举。下面给出xtquant侧权威枚举(取自手册xttrader数据字典),以及内置侧已核实的整数码示例与对应关系。

10.1 xtquant xtconstant 权威枚举

委托类型 order_type(股票 / 信用 / 期货 / 期权)

xtconstant 含义
STOCK_BUY / STOCK_SELL股票买入 / 卖出
CREDIT_BUY / CREDIT_SELL信用担保品买入 / 卖出
CREDIT_FIN_BUY / CREDIT_SLO_SELL融资买入 / 融券卖出
CREDIT_BUY_SECU_REPAY / CREDIT_DIRECT_SECU_REPAY买券还券 / 直接还券
CREDIT_SELL_SECU_REPAY / CREDIT_DIRECT_CASH_REPAY卖券还款 / 直接还款
FUTURE_OPEN_LONG / FUTURE_CLOSE_LONG_HISTORY / FUTURE_CLOSE_LONG_TODAY期货开多 / 平昨多 / 平今多
FUTURE_OPEN_SHORT / FUTURE_CLOSE_SHORT_HISTORY / FUTURE_CLOSE_SHORT_TODAY期货开空 / 平昨空 / 平今空
FUTURE_CLOSE_LONG_TODAY_FIRST / FUTURE_CLOSE_LONG_HISTORY_FIRST期货平多(优先平今 / 优先平昨)
FUTURE_CLOSE_SHORT_TODAY_FIRST / FUTURE_CLOSE_SHORT_HISTORY_FIRST期货平空(优先平今 / 优先平昨)
STOCK_OPTION_BUY_OPEN / SELL_CLOSE / SELL_OPEN / BUY_CLOSE股票期权买开 / 卖平 / 卖开 / 买平
STOCK_OPTION_COVERED_OPEN / COVERED_CLOSE备兑开仓 / 备兑平仓
STOCK_OPTION_CALL_EXERCISE / PUT_EXERCISE认购 / 认沽行权
ETF_PURCHASE / ETF_REDEMPTIONETF申赎

期货还有「两键风格」(FUTURE_OPEN / FUTURE_CLOSE)、「跨商品套利」(FUTURE_ARBITRAGE_OPEN等)、「展期」(FUTURE_RENEW_LONG_*等) 系列枚举,详见手册xttrader数据字典。

报价类型 price_type

xtconstant 含义 适用
LATEST_PRICE最新价全市场
FIX_PRICE指定价全市场
MARKET_SH_CONVERT_5_CANCEL最优五档即时成交剩余撤销上交所/北交所股票
MARKET_SH_CONVERT_5_LIMIT最优五档即时成交剩转限价上交所/北交所股票
MARKET_PEER_PRICE_FIRST / MARKET_MINE_PRICE_FIRST对手方 / 本方最优价格上交所/深交所/期权
MARKET_SZ_INSTBUSI_RESTCANCEL即时成交剩余撤销深交所
MARKET_SZ_CONVERT_5_CANCEL最优五档即时成交剩余撤销深交所
MARKET_SZ_FULL_OR_CANCEL全额成交或撤销深交所
MARKET_BEST / MARKET_CANCEL / MARKET_CANCEL_ALL期货市价系列郑商所/大商所
MARKET_CANCEL_1 / MARKET_CANCEL_5 / MARKET_CONVERT_1 / MARKET_CONVERT_5期货市价系列中金所

市价类仅实盘生效,模拟环境不支持;完整期货市价枚举见手册xttrader数据字典。

委托状态 order_status(回调里 order.order_status 的取值)

含义含义
48未报53部撤
49待报54已撤
50已报55部成
51已报待撤56已成
52部成待撤57废单 / 255 未知

账号状态 account_status(回调里 status.status 的取值):-1 无效 / 0 正常 / 1 连接中 / 2 登陆中 / 3 失败 / 4 初始化中 / 5 数据刷新校正中 / 6 收盘后 / 7 穿透副链接断开 / 8 系统停用 / 9 用户停用。

多空 direction / 交易操作 offset_flagDIRECTION_FLAG_LONG=48 多 / SHORT=49 空;OFFSET_FLAG_OPEN=48 买入·开仓 / CLOSE=49 卖出·平仓 / CLOSETODAY=51 平今 / CLOSEYESTERDAY=52 平昨。

10.2 内置 passorder 数据字典与对应关系

内置侧整数码在手册passorder参数说明页以分表给出,提取到的可靠示例值如下:

维度已核实整数码含义对应xtconstant
opType23股票买入STOCK_BUY
24股票卖出STOCK_SELL
33信用担保品买入CREDIT_BUY
60ETF申购(一级申赎)ETF_PURCHASE
orderType1101普通(按股数)隐含在 order_type
1202按金额/市值(示例中 volume=50000)
prType5最新价LATEST_PRICE
11指定价FIX_PRICE
14对手价(对方一档价格)期货市价系列
quickTrade0/1/2下单时机控制(见10.3)无(xtquant默认立即报单)

10.3 quickTrade 精确语义(内置侧特有的下单时机开关)

quickTrade触发时机(取自学册原文)
0(缺省)信号在最后一根K线走完后生成 → 在下一根K线的第一个tick触发下单
1非历史bar上,策略模型一旦调用到就触发下单
2不判断bar状态,调用到就触发;历史bar上也能触发

xtquant没有quickTrade概念:order_stock默认就是「调用即立即报单」,由你自己的主循环控制时机。因此从内置迁xtquant时,原quickTrade=2的「立即下单」语义天然对应order_stock的默认行为;原quickTrade=0的「下根bar首tick触发」需要你在主循环里自己用run_time/定时器模拟。


十一、主推回调对象字段速查

主推回调拿到的对象,内置侧是m_xxx属性(C++结构映射),xtquant侧是snake_case属性(Python对象)。下面列出最常用的字段(完整字段以手册 data_structure / xttrader 数据字典为准)。

11.1 内置侧(orderInfo / dealInfo / accountInfo

回调对象常用字段(示例)
order_callbackorderInfom_strInstrumentID(代码)、m_nOrderStatus(状态)、m_strOrderSysID(合同号)
deal_callbackdealInfom_strInstrumentIDm_dTradePrice(成交价)、m_nTradeVolume(成交量)
account_callbackaccountInfo资金账号状态(完整字段见手册data_structure页)
position_callbackpositonInfo持仓变动(完整字段见手册)
orderError_callbackorderArgs + errMsg下单参数 + 错误文本(如「指定价 无效, 无法下单!」)

内置侧对象字段需用dir(pythonobj)在运行期查看完整属性;手册在data_structure.html给出orderInfo/dealInfo/accountInfo全字段表。

11.2 xtquant 侧(order / trade / order_error / status

回调方法对象常用字段(示例)
on_stock_order(order)XtOrderstock_codeorder_status(见10.1)、order_sysidaccount_idorder_id
on_stock_trade(trade)XtTradeaccount_idstock_codeorder_idorder_sysidtraded_volumetraded_price
on_order_error(order_error)XtOrderErrororder_iderror_iderror_msg
on_cancel_error(cancel_error)XtCancelErrororder_iderror_iderror_msg
on_account_status(status)XtAccountStatusaccount_idaccount_typestatus(见10.1)
on_order_stock_async_response(resp)XtOrderResponseorder_idseqerror_iderror_msg

xtquant的XtOrder/XtTrade/XtAsset/XtPosition结构中,stock_code(代码)、direction(多空 48/49)、offset_flag(开平 48/49/51/52)字段用于区分买卖与开平仓;order_sysid是券商柜台合同号,可用于cancel_order_stock_sysid撤单。


十二、迁移总结

迁移项 改动难度 关键改动点
下单 函数名从passorder改为order_stock;参数从数值常量改为xtconstant枚举;需构建StockAccount对象;移除ContextInfo参数;便捷函数(order_target_percent等)xtquant无对应,需自行封装
撤单 函数从cancel(orderId, accountId, accountType, ContextInfo)改为cancel_order_stock系列;委托号获取方式从get_last_order_id改为order_stock直接返回;MiniQMT新增on_cancel_error独立撤单错误回调
账户查询 函数形态完全不同:QMT统一用get_trade_detail_data(accountID, strDatatype, 'STOCK')靠字符串区分类型;MiniQMT用独立的query_stock_asset/positions/orders/trades方法;返回值字段名从m_xxx改为snake_case
回调函数 从全局函数改为继承类;函数名全部变更(order_callbackon_stock_order等);需注册回调实例;生效前提从set_account改为register_callback+connect+subscribe三步;MiniQMT无独立position_callback,需合并到on_stock_trade或主动查询

通用迁移建议:

  1. 将所有passorder调用替换为order_stock/order_stock_async,参数映射参考上表
  2. 将字符串accountid改为StockAccount(accountid)对象
  3. prType数值(5/11/14)替换为xtconstant.LATEST_PRICE/FIX_PRICE等常量
  4. 回调函数从全局定义改为继承XtQuantTraderCallback
  5. 查询函数需整体重写:从get_trade_detail_data(accountID, strDatatype, 'STOCK')改为对应的query_stock_*方法
  6. 撤单函数从cancel(orderId, accountId, accountType, ContextInfo)改为cancel_order_stock系列