TB3 图表信号单策略:夜盘跨午夜 ,如何判断夜盘收盘前平仓?

【环境】 TBQuant3 图表信号单策略(Buy/SellShort/Sell/BuyToCover),白银 5 分钟 K 线,夜盘 21:00— 次日 02:30。【目的】 夜盘收盘前(02:20)强制平仓,判断条件写:Time >= 0.0220 And Time < 0.0225 // 期望 02:20~02:25 触发 【现象】 22:40(Time=0.2340)开空,跨午夜到次日 00:00(Time 打印为 0,Date 变为新一天)时,这个 Time >= 0.0220 判断竟然成立,导致在 00:00 提前强平,而不是等 02:20。【日志节选】Bar=495 Date=20261022 Time=0.2340 开空 13376 Bar=498 Date=20261022 Time=0.2355 保本 Bar=499 Date=20261023 Time=0 → [NoOvernight强平清0] Time=0 ← 00:00 就强平了 Bar 495–500复制如下:Bar=495 Date=20261022 Time=0.234000000 Close=13364 MP=0 ATR=34.35 CurStop=0 EntryBar=0 JustOpened=0 LongE=0 ShortE=1 MainSwitch=0 [开空] Price=13376 Lots=2 ATR=34.35 CurStop=13427.525 [开空待成交] Price=13376 MP=-1 [开仓成交确认] EntryBar=495 Dir=-1 Price=13376 MP=-1 SelfPos=-1 [空单止损判断] Close=13364 CurStop=13427.525 EntryBar=495 SelfPos=-1 Bar=496 Date=20261022 Time=0.234500000 Close=13354 MP=-1 ATR=33.9 CurStop=13427.525 EntryBar=495 JustOpened=0 LongE=0 ShortE=0 MainSwitch=0 [空单止损判断] Close=13354 CurStop=13427.525 EntryBar=495 SelfPos=-1 Bar=497 Date=20261022 Time=0.235000000 Close=13357 MP=-1 ATR=33.7 CurStop=13427.525 EntryBar=495 JustOpened=0 LongE=0 ShortE=0 MainSwitch=0 [空单止损判断] Close=13357 CurStop=13427.525 EntryBar=495 SelfPos=-1 Bar=498 Date=20261022 Time=0.235500000 Close=13349 MP=-1 ATR=33.15 CurStop=13427.525 EntryBar=495 JustOpened=0 LongE=0 ShortE=0 MainSwitch=0 [空单止损判断] Close=13349 CurStop=13427.525 EntryBar=495 SelfPos=-1 [BE 触发] Bar=498 EntryBar=495 浮盈达标触发保本,止损移至 13376 Bar=499 Date=20261023 Time=0 Close=13337 MP=-1 ATR=33.1 CurStop=13376 EntryBar=495 JustOpened=0 LongE=0 ShortE=0 MainSwitch=0 [NoOvernight 强平清 0] Time=0 MP=-1 SelfPos=-1 Lots=2 Bar=500 Date=20261023 Time=0.000500000 Close=13331 MP=0 ATR=32.6 CurStop=0 EntryBar=0 JustOpened=0 LongE=0 ShortE=0 MainSwitch=0 【疑问】TB3 的 Time 函数返回格式是什么(0.HHMMSS 浮点?)?夜盘跨午夜(00:00)的 K 线 bar 上,Time 实际返回多少?从 0 重新计,还是有其他表示?为何 Time 打印显示 0,但 Time >= 0.0220 判断却成立?是不是跨日 bar 上 Time 的实际浮点值不是 0?我怎样才能准确判断 "夜盘 02:20 收盘前强平",同时避免跨午夜(00:00)误触发?有没有推荐写法(结合 Date 判断 / Time > 0 And Time >= 0.0220 / 其他)?【请求】 请老师指点正确的夜盘收盘前强平时间判断写法,非常感谢!

1. Time 的返回格式Time 返回的是 0.HHMMSS 形式的浮点数,不是“小时+分钟”的十进制。比如 22:40 是 0.224000,02:20 是 0.022000,00:00 是 0。所以 Time >= 0.0220 这个写法,实际比较的是 0.0220 这个浮点数,不是“2 点 20 分”的语义。2. 跨午夜 00:00 那根 bar 的 Time 实际是多少就是 0(日志里 Time=0 打印得没错)。TB 的 Date 按自然日切换,夜盘 21:00 之后进入新交易日,到 00:00 时 Date 变成新一天、Time 从 0 重新计。所以 00:00 那根 bar 的 Time 确实是 0。3. 为什么 Time=0 却让 Time >= 0.0220 成立这里要分清两件事:Time 打印出来是 0,但你代码里参与比较的那个值不一定是 0。需要看代码有没有赋值覆盖,缓存,打印和比比较的代码位置。看代码日志输出NoOvernight强平清,是不是有不过夜的策略,并非出在判断里建议你先在 00:00 那根 bar 上做日志标记,看看是否是该判断条件走的平仓逻辑4. 正确的夜盘收盘前强平写法不要用 Time >= 0.0220 And Time < 0.0225 这种“区间夹”的写法,跨午夜时区间边界会错乱。推荐用小时分钟拆开判断Integer curH = Hour; // 当前 bar 的小时Integer curM = Minute; // 当前 bar 的分钟// 夜盘 02:20 之后、02:30 收盘前强平If(curH == 2 And curM >= 20 And curM < 30){ If(MarketPosition == 1) Sell(0, Open); If(MarketPosition == -1) BuyToCover(0, Open); Return;}这样 00:00 时 curH == 0,条件天然不成立,不会误触发。