前言国内期货很多品种有夜盘和日盘中间有休市、小节休息、集合竞价等时段。程序化策略若只写“有价格就交易”容易在夜盘结束到日盘开盘之间的几分钟、午休、或节假日仍用旧信号报单表现为拒单、废单或更糟——在流动性极差时成交在离谱价格。K 线datetime能判断新 bar但休市时 datetime 不推进不能单靠 datetime 判断“允许交易”。夜盘结束到日盘开盘、小节休息前后的几分钟还要结合合约 quote 上的交易时间信息与团队规则。下面用天勤 TqSdk 说明这类场景常见误下单原因以及发单前过滤应怎么写各品种具体开收时间以交易所当日公告为准。一、场景衔接几分钟为何危险举例品种各异以交易所公告为准夜盘 23:00 结束日盘 9:00 开盘中间行情服务可能仍推送个别字段或显示昨收若策略在 8:59 用夜盘最后一根 K 线的信号、又对日盘第一秒盲目下单可能用到过期方向或非连续成交价格。又如 10:15–10:30 小节休息K 线 datetime 可能暂停quote 的last_price偶发跳动若 tick 策略无时段过滤会误触发。二、天勤里可用的信息从哪来quote api.get_quote(symbol)在wait_update后更新常见相关字段包括以你安装版本文档为准trading_time与该合约相关的交易时间段结构datetime行情快照时间涨跌停upper_limit/lower_limit等。策略应区分两层交易所可交易窗口尽量从 quote / SDK 能力读取少手写全国统一钟点本策略允许交易窗口如开盘后 5 分钟不出信号可窄于交易所。三、发单前过滤骨架qapi.get_quote(symbol)defstrategy_allow_trade(quote):# 请按 TqSdk 文档实现当前是否处于该合约可交易时段# 不同版本可能有辅助判断勿虚构字段名returnTrue# 上线前必须替换为真实逻辑whileTrue:api.wait_update()ifnotstrategy_allow_trade(q):continueifnotapi.is_changing(kl.iloc[-1],datetime):continue# 信号与 set_target_volume上线前在模拟盘录一段日志夜盘结束、日盘开盘前后strategy_allow_trade的 True/False 是否符合预期。开盘集合竞价是否允许入场应由团队书面规则决定。四、与 K 线 datetime 的配合休市K 线datetime不推进 → 不会误触发“新 bar 信号”这是好事。仍可能问题休市前最后一根 bar 的信号缓存到日盘若不在日盘开盘重新评估会“带着昨夜方向”开仓。可在日盘首根datetime变时强制刷新 bias或开盘 N 分钟内禁止开仓。五、TargetPosTask 与非交易时段模拟逻辑里非交易时段挂单可能被置为完成或无法成交见模拟交易源码对_is_in_trading_time的处理。实盘更应以不发单为主而不是依赖柜台拒单。总结夜盘到白盘的衔接时段看上去只有几分钟但恰恰是最容易让策略“拿错时间、拿错业务语义”的窗口。正确做法不是只盯 K 线 datetime而是把“可交易窗口”和“策略允许交易窗口”分层用 quote / SDK 能提供的交易时段信息做硬过滤用开盘规则刷新策略缓存避免把夜盘最后的方向直接带到日盘第一笔。再加上日志留痕你在复盘时就能把拒单与异常成交归因到明确的时段决策而不是纠结于‘那几分钟到底触发了什么’。FAQ1能否用交易日历 API若有可与 quote 组合以文档为准。2夜盘品种订日盘合约订可交易的那档合约时段跟品种走。3Scheduler 收盘清仓可与时段过滤分层见 Scheduler 专题。4回测夜盘衔接回测时间轴按历史规则仍建议加同样过滤代码。风险提示本文讨论交易时段技术不构成投资建议。
夜盘白盘衔接几分钟误下单:天勤交易时段与行情过滤
发布时间:2026/6/8 20:12:40
前言国内期货很多品种有夜盘和日盘中间有休市、小节休息、集合竞价等时段。程序化策略若只写“有价格就交易”容易在夜盘结束到日盘开盘之间的几分钟、午休、或节假日仍用旧信号报单表现为拒单、废单或更糟——在流动性极差时成交在离谱价格。K 线datetime能判断新 bar但休市时 datetime 不推进不能单靠 datetime 判断“允许交易”。夜盘结束到日盘开盘、小节休息前后的几分钟还要结合合约 quote 上的交易时间信息与团队规则。下面用天勤 TqSdk 说明这类场景常见误下单原因以及发单前过滤应怎么写各品种具体开收时间以交易所当日公告为准。一、场景衔接几分钟为何危险举例品种各异以交易所公告为准夜盘 23:00 结束日盘 9:00 开盘中间行情服务可能仍推送个别字段或显示昨收若策略在 8:59 用夜盘最后一根 K 线的信号、又对日盘第一秒盲目下单可能用到过期方向或非连续成交价格。又如 10:15–10:30 小节休息K 线 datetime 可能暂停quote 的last_price偶发跳动若 tick 策略无时段过滤会误触发。二、天勤里可用的信息从哪来quote api.get_quote(symbol)在wait_update后更新常见相关字段包括以你安装版本文档为准trading_time与该合约相关的交易时间段结构datetime行情快照时间涨跌停upper_limit/lower_limit等。策略应区分两层交易所可交易窗口尽量从 quote / SDK 能力读取少手写全国统一钟点本策略允许交易窗口如开盘后 5 分钟不出信号可窄于交易所。三、发单前过滤骨架qapi.get_quote(symbol)defstrategy_allow_trade(quote):# 请按 TqSdk 文档实现当前是否处于该合约可交易时段# 不同版本可能有辅助判断勿虚构字段名returnTrue# 上线前必须替换为真实逻辑whileTrue:api.wait_update()ifnotstrategy_allow_trade(q):continueifnotapi.is_changing(kl.iloc[-1],datetime):continue# 信号与 set_target_volume上线前在模拟盘录一段日志夜盘结束、日盘开盘前后strategy_allow_trade的 True/False 是否符合预期。开盘集合竞价是否允许入场应由团队书面规则决定。四、与 K 线 datetime 的配合休市K 线datetime不推进 → 不会误触发“新 bar 信号”这是好事。仍可能问题休市前最后一根 bar 的信号缓存到日盘若不在日盘开盘重新评估会“带着昨夜方向”开仓。可在日盘首根datetime变时强制刷新 bias或开盘 N 分钟内禁止开仓。五、TargetPosTask 与非交易时段模拟逻辑里非交易时段挂单可能被置为完成或无法成交见模拟交易源码对_is_in_trading_time的处理。实盘更应以不发单为主而不是依赖柜台拒单。总结夜盘到白盘的衔接时段看上去只有几分钟但恰恰是最容易让策略“拿错时间、拿错业务语义”的窗口。正确做法不是只盯 K 线 datetime而是把“可交易窗口”和“策略允许交易窗口”分层用 quote / SDK 能提供的交易时段信息做硬过滤用开盘规则刷新策略缓存避免把夜盘最后的方向直接带到日盘第一笔。再加上日志留痕你在复盘时就能把拒单与异常成交归因到明确的时段决策而不是纠结于‘那几分钟到底触发了什么’。FAQ1能否用交易日历 API若有可与 quote 组合以文档为准。2夜盘品种订日盘合约订可交易的那档合约时段跟品种走。3Scheduler 收盘清仓可与时段过滤分层见 Scheduler 专题。4回测夜盘衔接回测时间轴按历史规则仍建议加同样过滤代码。风险提示本文讨论交易时段技术不构成投资建议。