讯投QMT使用小技巧: 盘后固定价格交易如何下单 passorder用法

概述

2026 年 7 月 6 日起,沪深北三大交易所新版《交易规则》正式施行,其中最受量化玩家关注的一条是:盘后固定价格交易的适用范围由科创板、创业板股票,扩展至全部 A 股和沪深 ETF

这意味着以前只有科创/创业板专属的 15:05–15:30 盘后定价通道,现在主板股票和 ETF 也能用了。对于用 QMT 跑策略的人来说,自然就会遇到一个问题:

同样是 passorder,连续竞价时段和盘后固定价格交易时段,参数怎么填?两者到底差在哪里?

本文假设你已经读过 下单函数 passorder 参数详解与实战,在那篇文章的基础上,把两类时段的用法和差异一次讲透。

⚠️ 风险提示

量化交易存在风险,本文代码仅供学习参考,不构成任何投资建议。

  • 交易规则可能随交易所政策调整而变化,实盘请以最新官方规则为准
  • 文中代码未包含防重复、涨跌停拦截、资金校验等实盘必备保护逻辑,切勿直接用于实盘
  • 实盘前务必在「模拟信号模式」或「模拟柜台」中充分验证
  • 因使用本文代码、文档造成的任何盈亏,由使用者自行承担全部责任

一、新规速览:盘后固定价格交易扩容

先把新规中和下单直接相关的几条拎出来:

项目 新规前 新规后(2026-07-06 起)
适用品种 科创板、创业板股票 全部 A 股 + 沪深 ETF(北交所暂不实施)
成交时间 15:05–15:30 15:05–15:30(不变)
沪市申报时间 9:30–11:30、13:00–15:30 9:30–11:30、13:00–15:30(不变)
深市申报时间 9:15–11:30、13:00–15:30 9:15–11:30、13:00–15:30(不变)
成交价 当日收盘价 当日收盘价(不变)
撮合原则 时间优先 时间优先(不变)

一句话总结:时间、价格、撮合规则都没变,变的是”谁能用”——主板股票和 ETF 现在也能挂盘后定价单了。

如果你对交易时段本身还想看更细的判断函数,可以参考 判断当前时段是交易/非交易/竞价/盘后等时间段(注:那篇文章写于新规前,盘后交易品种范围已按本文为准)。

二、两类时段的 passorder 参数对比

passorder 的 11 个参数里,连续竞价和盘后定价只有 prType(第 5 个参数)和 price(第 6 个参数)的填法不同,其余参数含义完全一致。

prType 取值对照

官方 prType(下单选价类型)枚举很多,做股票最常用的就这几个:

prType 含义 适用时段 price 怎么填
11 指定价(限价) 连续竞价 / 集合竞价 填具体的限价金额
5 最新价 连续竞价 填 -1,跟盘口最新成交价走
14 对手价 连续竞价 填 -1,买入用卖一价、卖出用买一价
49 盘后定价 盘后固定价格交易 填当日收盘价(或符合方向的任意价)

重点记住 49 = 盘后定价。这是连续竞价和盘后定价在 passorder 里最核心的区别。

price 填法的深层差异

虽然两类时段都要在 price 里填一个数,但意义完全不同:

连续竞价(prType=11)price 是你真正想成交的价格,交易所按”价格优先 + 时间优先”撮合,你的报价直接影响能否成交、成交好坏。

盘后定价(prType=49)price 填写当日收盘价

三、连续竞价时段 passorder

这是最常用的场景,对应早盘 9:30–11:30、午盘 13:00–14:57 的连续竞价,以及集合竞价阶段。

代码仅供参考,不构成投资建议,请谨慎操作。

1
2
3
4
5
6
7
# 连续竞价:限价买入 600000.SH 100 股,限价 10.55
passorder(23, 1101, account, '600000.SH', 11, 10.55, 100,
'my_strategy', 1, 'cont_buy_001', ContextInfo)

# 连续竞价:最新价卖出 600000.SH 100 股
passorder(24, 1101, account, '600000.SH', 5, -1, 100,
'my_strategy', 1, 'cont_sell_001', ContextInfo)

要点:

  • prType=11 是限价单,price 填你的目标价
  • prType=5 是最新价单,price-1
  • 连续竞价期间可撤单,用 cancel 即可

四、盘后固定价格交易 passorder

对应 15:05–15:30 的盘后定价时段。

1
2
3
4
5
6
7
8
# 盘后定价:按当日收盘价买入 600000.SH 1000 股
# prType=49 表示盘后定价,price 直接填当日收盘价
passorder(23, 1101, account, '600000.SH', 49, close_price, 1000,
'my_strategy', 1, 'after_hours_buy_001', ContextInfo)

# 盘后定价:按当日收盘价卖出 510050.SH(上证50ETF)1000 份
passorder(24, 1101, account, '510050.SH', 49, close_price, 1000,
'my_strategy', 1, 'after_hours_sell_001', ContextInfo)

获取当日收盘价可以用 get_market_data_ex

1
2
3
4
# 取当日收盘价(主图周期为日线时)
close_data = ContextInfo.get_market_data_ex(
['close'], ['600000.SH'], period='1d', count=1, dividend_type='front')
close_price = close_data['600000.SH']['close'].iloc[-1]

要点:

  • prType 必须填 49,这是盘后定价的灵魂
  • price 建议直接填当日收盘价
  • 15:30 未成交的委托当日自动作废,不保留到次日

记住 49 = 盘后定价,再把 price 按收盘价填对,主板和 ETF 的盘后定价单就能跑通了。配合 委托回调与成交回调 做状态管理,一套”连续竞价 + 盘后定价”的双时段实盘闭环就齐活了。