讯投 QMT 使用小技巧:判断当前时段是交易/非交易/竞价/盘后等时间段

A股的交易时间段

A股的交易时段分为开盘集合竞价、连续竞价(早盘、午盘)和收盘集合竞价三个阶段,具体时间如下:

1. 交易日安排

  • 周一至周五(法定节假日除外)
  • 不交易:周末(周六、周日)和法定节假日(如春节、国庆节等)。

2. 交易时段明细

时段 时间 备注
开盘集合竞价 9:15 - 9:25 - 9:15-9:20:可申报或撤单
- 9:20-9:25:可申报,不可撤单
早盘连续竞价 9:30 - 11:30 正常交易时段,可自由买卖。
午间休市 11:30 - 13:00 不接受委托,未成交的订单仍有效。
午盘连续竞价 13:00 - 14:57 正常交易时段。
收盘集合竞价 14:57 - 15:00 申报,不可撤单,以最大成交量撮合收盘价。

3. 其他规则

  • 科创板(688开头) & 创业板(300开头)
    • 新增盘后固定价格交易(15:05-15:30),按当日收盘价成交(需手动挂单)。
  • 大宗交易
    • 通常为15:00-15:30,需满足最低交易数量或金额门槛。

注意事项

  • 非交易时段(如夜间)的委托单会被暂存,次日9:15进入系统。
  • 集合竞价的成交价格遵循“最大成交量”原则,所有交易按同一价格成交。

QMT中的函数判断

以下是一个 Python 函数,用于判断当前时间属于 A 股的哪个交易时段(包括科创板和创业板的盘后交易),如果不是交易时段则返回 “非交易时段”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import datetime

def get_a_share_trading_period():
now = datetime.datetime.now()
current_time = now.time()
weekday = now.weekday() # 0-4 是周一到周五

# 检查是否为交易日(周一至周五,非节假日)
if weekday >= 5: # 周六、周日
return "非交易时段(周末休市)"

# 定义交易时段
trading_periods = [
{"name": "开盘集合竞价", "start": "09:15:00", "end": "09:25:00", "can_cancel": True},
{"name": "早盘连续竞价", "start": "09:30:00", "end": "11:30:00", "can_cancel": True},
{"name": "午间休市", "start": "11:30:00", "end": "13:00:00", "can_cancel": False},
{"name": "午盘连续竞价", "start": "13:00:00", "end": "14:57:00", "can_cancel": True},
{"name": "收盘集合竞价", "start": "14:57:00", "end": "15:00:00", "can_cancel": False},
]

# 科创板和创业板的盘后交易(15:05-15:30)
kechuang_cyb_period = {"name": "科创/创业板盘后交易", "start": "15:05:00", "end": "15:30:00", "can_cancel": False}

# 检查当前是否在交易时段
for period in trading_periods:
start_time = datetime.datetime.strptime(period["start"], "%H:%M:%S").time()
end_time = datetime.datetime.strptime(period["end"], "%H:%M:%S").time()
if start_time <= current_time <= end_time:
return f"{period['name']}(可撤单: {'是' if period['can_cancel'] else '否'})"

# 检查是否在科创/创业板盘后交易时段
kechuang_start = datetime.datetime.strptime(kechuang_cyb_period["start"], "%H:%M:%S").time()
kechuang_end = datetime.datetime.strptime(kechuang_cyb_period["end"], "%H:%M:%S").time()
if kechuang_start <= current_time <= kechuang_end:
return f"{kechuang_cyb_period['name']}(按收盘价交易,不可撤单)"

# 不在任何交易时段
return "非交易时段"

# 测试
print(get_a_share_trading_period())

输出示例

  • 如果当前时间是 09:20:00,返回:
    开盘集合竞价(可撤单: 是)
  • 如果当前时间是 12:30:00,返回:
    午间休市(可撤单: 否)
  • 如果当前时间是 15:15:00,返回:
    科创/创业板盘后交易(按收盘价交易,不可撤单)
  • 如果当前时间是 16:00:00 或周末,返回:
    非交易时段

功能说明

  1. 判断交易日:仅周一到周五有效,周末返回非交易时段。
  2. 标准交易时段:包括集合竞价、连续竞价和收盘竞价。
  3. 科创/创业板盘后交易:15:05-15:30 额外判断。
  4. 撤单规则:集合竞价部分时段不可撤单(如 9:20-9:25)。

如果需要进一步扩展(如节假日判断),当天是不是交易日,请阅读我们提供的另外一个讯投qmt使用小技巧: 如何判断今天是不是交易日 开始阅读

小技巧,我的其他关于qmt的文章

QMT使用指南 开始阅读

国债逆回购-闲钱理财 开始阅读
开户qmt 开始阅读

判断当前时段是交易/非交易/竞价/盘后等时间段 开始阅读

如何判断今天是不是交易日 开始阅读

如何低成本选择讯投QMT 的服务器/电脑,低成本运行? 开始阅读

为什么每天早晨QMT会退出登录/重新启动/自动初始化 开始阅读

迅投QMT量化交易系统服务器连接 中断与再连接 开始阅读

迅投QMT交易系统 延迟 委托/成交/持仓/账号信息延迟 get_trade_detail_data延迟 开始阅读

量化交易策略中如何判断当前MACD是否达到最小值 开始阅读

迅投QMT自带策略-双均线实盘示例PY策略-解读 开始阅读

使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 开始阅读


关注我们微信公众号,并在公众号后台发送"qmt","ibkr"或者"invest",第一时间获取最新资讯

如有任何问题,欢迎添加微信,或者在公众号后台联系我们

微信二维码
Share