🚀 AI 一键生成 qmt 策略代码

QMT 平台 passorder 函数使用对手价(prType=14)无法立刻成交怎么办?

qmt | 发布时间: 2026/5/21
以下内容由 EasyQuant 生成。

问题描述

使用passorder函数进行下单,prType=14 对手价,无法立刻成交

根据文档对期货主力品种比如“zn2605.SF”,使用 passorder 函数进行下单,prType=14 对手价,实盘的时候居然无法立刻成交,而是在委托里等待成交,并且这种现象也比较普遍,请教下,对手价不是应该立刻成交的吗(主力合约又不是冷门品种),另外 prType 只看到郑商所有市价最优价,其他上期所没有这个选项吗。。。【市价最优价[郑商所][期货] 】

解决方案

在使用 QMT 平台的 passorder 函数进行期货实盘交易时,遇到使用对手价(prType=14)无法立刻成交的情况,主要由以下几个原因导致,同时针对上期所的市价单问题,也有相应的替代方案。

一、 为什么对手价(prType=14)无法立刻成交?

虽然您交易的是主力合约(如 zn 沪锌),流动性较好,但“对手价”本质上仍然是限价单(Limit Order)。它的工作机制是:在策略触发下单的瞬间,系统读取当时的盘口对手价(买入取卖一,卖出取买一),并以该价格作为限价发送委托。

无法立刻成交的原因通常包括:

  1. 行情波动微秒级延迟:从策略发出信号、获取盘口价格,到委托到达交易所撮合主机,存在网络和系统延迟。在这几毫秒到几十毫秒内,如果行情剧烈波动,原本的卖一价可能已经被其他单子吃掉,价格上移。您的委托到达时,就变成了挂在买一或买二的限价单,需要等待价格回落才能成交。
  2. 对手盘挂单量不足:如果您的下单量大于当时盘口对手价的挂单量,部分成交后,剩余的部分就会挂在盘口等待成交。

二、 如何确保立刻成交?(替代方案)

为了在量化交易中确保信号触发后立刻成交,通常不建议直接使用对手价,而是采用以下两种方式:

1. 使用涨跌停价(推荐,最接近市价必成)

在 QMT 中,可以使用 prType=12(涨跌停价)。

  • 买入时:以当天的涨停价报单。
  • 卖出时:以当天的跌停价报单。

交易所撮合机制:国内期货交易所的撮合机制是“价格优先、时间优先”。即使您以涨停价买入,交易所也会以当前盘口的最优卖价(卖一、卖二等)依次与您撮合成交,直到您的委托量全部成交。这实际上起到了市价单的作用,且能最大程度保证成交。

# 使用涨跌停价买入开仓 1 手 zn2605.SF
passorder(0, 1101, ContextInfo.accid, 'zn2605.SF', 12, -1, 1, ContextInfo)

2. 使用超价委托(指定价 + 滑点)

如果您不想承担极端极端行情下以涨跌停价成交的风险(虽然极少发生,但在乌龙指或极端秒板行情中存在),可以自己计算超价。
获取最新价或对手价后,手动加上或减去几个最小变动价位(PriceTick),然后以指定价(prType=11)下单。

def handlebar(ContextInfo):
    # 获取最新 tick 数据
    tick = ContextInfo.get_full_tick(['zn2605.SF'])
    if 'zn2605.SF' in tick:
        ask1 = tick['zn2605.SF']['askPrice'][0] # 卖一价
        price_tick = 5 # 假设锌的最小变动价位是 5
        
        # 买入超价 2 个 tick
        order_price = ask1 + price_tick * 2
        
        # 使用指定价下单
        passorder(0, 1101, ContextInfo.accid, 'zn2605.SF', 11, order_price, 1, ContextInfo)

三、 关于上期所的市价单选项

您提到 prType 中只看到郑商所有市价最优价,上期所没有。这是因为国内各期货交易所对市价单的支持规则不同

  1. 上期所(SHFE)/ 能源中心(INE)原生不支持市价单(Market Order)。所有发往上期所的委托必须是限价单。因此,在 QMT 或任何交易软件中,上期所都没有真正的“市价”选项。
  2. 中金所(CFFEX)/ 大商所(DCE)/ 郑商所(CZCE):支持市价单或最优价单。

总结
由于上期所不支持市价单,量化交易者在交易上期所品种(如 zn, cu, rb, ru 等)时,行业通用的“市价”替代方案就是使用涨跌停价(prType=12)或者超价限价单(prType=11。建议您将策略中的 prType=14 修改为 prType=12,即可解决实盘中挂单不成交的问题。