乐于分享
好东西不私藏

miniQMT:实盘下单一直翻文档?这一份 xttrader 速查表能让你写代码效率翻倍

miniQMT:实盘下单一直翻文档?这一份 xttrader 速查表能让你写代码效率翻倍

实盘交易接口为什么必须有速查表

xtdata 接口数量不算多,xttrader 是真的多——

  • 下单:order_stock、order_stock_async 各 8 个参数

  • 价格类型:限价、最新价、对手方最优、五档即成、全额成交……7 种

  • 委托状态:48-57,10 种状态

  • 回调:on_stock_order、on_stock_trade、on_order_error 等十几个

每次写代码都翻文档,累得人想砸键盘。

这一节把所有 xttrader 高频接口+常量+回调全部收录在一页,强烈建议收藏 → 置顶 → 写代码时随时翻。


一、连接管理 —— 5 行代码搞定

函数说明返回值
XtQuantTrader(path, session_id)创建交易对象实例
start()启动交易线程无
connect()连接交易服务器0=成功,非 0=失败
register_callback(callback)注册回调类无
stop()停止交易线程无
fromxtquant.xttraderimportXtQuantTrader
fromxtquant.xttypeimportStockAccount

path = r'D:\国金QMT交易端模拟\userdata_mini'
session_id = 123456

trader = XtQuantTrader(path, session_id)
trader.start()
result = trader.connect()
ifresult == 0:
print("连接成功")

踩坑提示:

  • 必须先 start 再 connect,反过来会失败

  • session_id 在多个进程间必须不同,否则后启动的会顶掉前一个


二、账户订阅 —— 不订阅没回调

函数说明
subscribe(account)订阅账户(下单前必须)
unsubscribe(account)取消订阅
acc = StockAccount('55009728')
trader.subscribe(acc)

踩坑提示:

  • ❌ 没订阅就下单 → 下单可以发,但收不到 on_stock_order 回报

  • 这是新手第一次跑实盘最常见的坑


三、委托下单 —— 核心中的核心

函数说明返回值
order_stock(...)同步委托order_id(int)
order_stock_async(...)异步委托order_id

委托类型(order_type)速查

值常量说明
23xtconstant.STOCK_BUY股票买入
24xtconstant.STOCK_SELL股票卖出

实盘里只用这两个。其他都是信用账户用的(融资融券)。

价格类型(price_type)速查 ⭐ 重要

值常量说明
5FIX_PRICE限价(最常用)
11LATEST_PRICE最新价
14MARKET_SH_CONVERT_5_CANCEL上海最优五档即成剩撤
15MARKET_SH_CONVERT_5_LIMIT上海最优五档即成转限价
42MARKET_PEER_PRICE_FIRST对手方最优(市价首选)
43MARKET_MINE_PRICE_FIRST本方最优
44MARKET_SZ_INSTBUSI_RESTCANCEL深圳即成剩撤
45MARKET_SZ_CONVERT_5_CANCEL深圳最优五档即成剩撤
46MARKET_SZ_FULL_OR_CANCEL深圳全额成交或撤销

价格类型怎么选

场景推荐理由
普通挂单FIX_PRICE价格可控
快速买入MARKET_PEER_PRICE_FIRST对手价立刻成交
快速卖出MARKET_PEER_PRICE_FIRST同上
追涨买入MARKET_SZ_CONVERT_5_CANCEL五档即成
fromxtquantimportxtconstant

# 限价买入
order_id = trader.order_stock(
account=acc,
stock_code='600000.SH',
order_type=xtconstant.STOCK_BUY,
volume=100,
strategy_name='策略1',
price=10.50,
price_type=xtconstant.FIX_PRICE,
order_id=0,  # 0=自动生成
)

# 市价卖出(对手方最优)
order_id = trader.order_stock(
account=acc, stock_code='600000.SH',
order_type=xtconstant.STOCK_SELL, volume=100,
strategy_name='策略1', price=0,
price_type=xtconstant.MARKET_PEER_PRICE_FIRST,
)

四、撤单接口

函数说明返回值
cancel_order_stock(account, order_id)同步撤单0=请求成功
cancel_order_stock_async(account, order_id)异步撤单0=请求成功
result = trader.cancel_order_stock(acc, order_id)
ifresult == 0:
print("撤单请求已发送")

踩坑提示:

  • ❌ "返回 0" ≠ "已撤单成功"——只是请求已提交

  • ✅ 真正撤成功要等 on_stock_order 回调中 status=54(已撤)才算


五、查询接口 —— 实盘必查

函数说明返回值
query_stock_asset(account)查资产XtAsset
query_stock_orders(account)查所有委托list[XtOrder]
query_stock_trades(account)查所有成交list[XtTrade]
query_stock_positions(account)查持仓list[XtPosition]
query_credit_detail(account)查信用账户XtCreditDetail
# 资产
asset = trader.query_stock_asset(acc)
print(f"总资产: {asset.total_asset}, 可用资金: {asset.cash}")

# 持仓
forposintrader.query_stock_positions(acc):
print(f"{pos.stock_code}: {pos.volume}股 可卖{pos.can_use_volume}")

# 委托
fororderintrader.query_stock_orders(acc):
print(f"委托{order.order_id}: {order.stock_code} 状态={order.order_status}")

实战建议:

  • 查询接口有延迟——别在 callback 里高频调用

  • 持仓的 can_use_volume 是真正能卖的数量(T+1 制度)


六、回调函数 —— 实盘灵魂

回调方法触发时机参数
on_disconnected()连接断开无
on_account_status(status)账户状态变化XtAccountStatus
on_stock_order(order)委托回报(每次状态变化)XtOrder
on_stock_trade(trade)成交回报XtTrade
on_stock_position(pos)持仓变化XtPosition
on_stock_asset(asset)资产变化XtAsset
on_order_error(error)委托错误XtOrderError
on_cancel_error(error)撤单错误XtCancelError
on_order_stock_async_response(resp)异步委托响应XtOrderResponse
on_cancel_order_stock_async_response(resp)异步撤单响应XtCancelOrderResponse
fromxtquant.xttraderimportXtQuantTraderCallback

classMyCallback(XtQuantTraderCallback):
defon_disconnected(self):
print("连接断开!")

defon_stock_order(self, order):
print(f"委托回报: {order.stock_code} 状态={order.order_status}")

defon_stock_trade(self, trade):
print(f"成交: {trade.stock_code} {trade.traded_volume}股@{trade.traded_price}")

defon_order_error(self, error):
print(f"委托失败: {error.error_msg}")

trader.register_callback(MyCallback())

关键提示:回调在独立线程执行——共享数据要加锁,别在回调里阻塞(参考 5.1 节)。


七、委托状态码 ⭐ 必须背下来

状态码说明是否终态
48未报❌
49待报❌
50已报❌
51已报待撤❌
52部成待撤❌
53部撤✅
54已撤✅
55部成❌(继续中)
56已成✅
57废单✅

终态判断模板:

FINAL_STATUS = {53, 54, 56, 57}  # 终态集合

defis_order_finished(status):
returnstatusinFINAL_STATUS

defget_status_name(status):
return {
48: '未报', 49: '待报', 50: '已报',
51: '已报待撤', 52: '部成待撤', 53: '部撤',
54: '已撤', 55: '部成', 56: '已成', 57: '废单',
    }.get(status, str(status))

实战经验:

  • 55 部成不是终态——它会继续成交直到 56 或被撤成 53

  • 自动撤单要监控未到终态的委托:status not in FINAL_STATUS


八、5 个高频代码模板

1. 市价买入

defmarket_buy(trader, acc, code, volume):
returntrader.order_stock(
account=acc, stock_code=code,
order_type=xtconstant.STOCK_BUY, volume=volume,
strategy_name='market_buy', price=0,
price_type=xtconstant.MARKET_PEER_PRICE_FIRST,
    )

2. 限价卖出

deflimit_sell(trader, acc, code, volume, price):
returntrader.order_stock(
account=acc, stock_code=code,
order_type=xtconstant.STOCK_SELL, volume=volume,
strategy_name='limit_sell', price=price,
price_type=xtconstant.FIX_PRICE,
    )

3. 拿可用资金

defget_available_cash(trader, acc):
asset = trader.query_stock_asset(acc)
returnasset.cashifassetelse0

4. 拿可卖数量

defget_can_use_volume(trader, acc, code):
forposintrader.query_stock_positions(acc) or []:
ifpos.stock_code == code:
returnpos.can_use_volume
return0

5. 全部撤单

defcancel_all_pending_orders(trader, acc):
PENDING = {48, 49, 50, 51, 52, 55}
forointrader.query_stock_orders(acc) or []:
ifo.order_statusinPENDING:
trader.cancel_order_stock(acc, o.order_id)

九、5 个常见坑(自查清单)

  • 先 connect 再 start ❌(应该相反)
  • 没 subscribe 账户就下单 ❌(收不到回报)
  • 把"返回 0"当作"已撤成功" ❌(只是请求提交)
  • 在回调里阻塞操作 ❌(会卡死整个线程)
  • 委托量不是 100 整数倍 ❌(直接被打成废单)

十、注意事项总结

注意点说明
先 start 再 connect顺序不能反
必须订阅账户不订阅没有回调
回调在独立线程注意线程安全
order_id 唯一性自定义 id 必须不重复
数量整百A 股最低 100 股 / 必须 100 整数倍

写在最后

xttrader 的接口比 xtdata 多一倍,靠记性记不住。

这一篇我建议你直接收藏到公众号置顶——写下单/撤单/回调时点开就抄,比翻文档快 10 倍。


下一篇预告

接口名记住了,返回的对象长什么样?

下一篇 7.3 核心数据结构字段全览:

  • XtAsset、XtPosition、XtOrder、XtTrade 字段全收录

  • Tick / K线 / 合约详情 字段对照表

  • 错误对象 XtOrderError / XtCancelError

  • 每个字段什么场景用,给你讲明白


留个互动给你

你最容易混淆的 price_type 是哪一个?

评论区聊聊——你写下单时遇到过哪个最坑爹的参数?


如果这一篇对你有帮助:

  • 点个 在看 让我知道速查表内容你需要 👍

  • 转给一个还在翻文档的朋友 🔁

  • 关注 + 星标 ⭐ 第一时间看下一篇


风险提示:本文仅作技术分享与教学用途,不构成任何投资建议。量化交易有风险,实盘需谨慎。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料