夜盘与白盘时间轴:交易日切换与过滤时段写法

夜盘与白盘时间轴:交易日切换与过滤时段写法 前言夜盘刚过零点策略却在「白天字段」上算了一夜——我亲眼见过这种现场同事用本机datetime.now()判断「是不是新的一天」凌晨 0:30 把日频指标重置了白盘开盘指标全乱还以为是数据商抽风。还有一次是周五夜盘结束后回测按自然日切、实盘按交易日切对账对不上吵到要翻交易所日历。期货有夜盘、无夜盘品种、节假日停盘过滤时段不能抄一段网上「9:00–15:00」就完事得跟 quote、K 线时间戳走。天勤给你的行情对象里带着交易所时间责任在你怎么解析、怎么和回测共用同一套函数。下面是我现在带新人时的写法别用本机钟、session 表怎么维护、节假日怎么办、以及和 K 线日切怎么对齐。一、别用本机时钟做交易判断# 不推荐跨时区、NTP、夏令时都会坑你# if datetime.now().hour 9 and datetime.now().hour 15:# 推荐解析 quote 或 K 线里的交易所时间whileTrue:api.wait_update()ifnotapi.is_changing(quote):continuetrading_timeparse_quote_datetime(quote.datetime)# 团队共用一个解析模块ifnotin_trading_session(trading_time,symbol):continue# 策略逻辑云服务器时区设错、本机钟漂移我都见过行情时间戳才是你和交易所对齐的共同语言。parse_quote_datetime建议单独文件夜盘跨日、周五夜盘算哪天都写进注释和单元测试。二、session 表按品种维护别全网一张时段说明夜盘如 21:00–02:30品种差异极大日盘如 09:00–15:00午休部分品种不连续也可先读quote.trading_time辅助核对再落到自己的in_trading_session(symbol, t)。不同交易所、品种规则不同螺纹钢和国债不能共用一张表。三、K 线驱动时用 datetime 换根当日切若策略是 K 线级别日频统计今日盈亏、今日信号次数建议在K 线 datetime 换根时做而不是 0 点ifapi.is_changing(klines.iloc[-1],datetime):bar_dtklines.datetime.iloc[-2]on_new_bar(bar_dt)# 日切、重置日内状态放这里回测和实盘必须调用同一个on_new_bar禁止回测里另写if hour0。四、节假日与集合竞价节假日用交易日历判断「今日是否交易」没有日历接口时至少做到节假日不开新仓、允许平仓日志打「非交易日跳过」。集合竞价若不交易竞价在in_trading_session里排除若交易单独测报价字段和撮合别和连续竞价混一套逻辑。五、常见坑现象常见原因0 点指标重置用了datetime.now()回测和实盘日盈亏不一致日切定义两套夜盘没触发过滤表漏夜盘段周一异常单周末状态未清总结夜盘与白盘不是「多加几行 if」而是时间语义要和交易所一致。天勤给你的是带时间戳的行情对象我先让新人打印一夜quote.datetime对照官网时刻表再写过滤函数——比抄网上时段列表靠谱。三句话记牢逻辑跟行情时间走「一天」的定义团队内写死回测和实盘同一套in_trading_session。做到这些凌晨不用盯着「是不是又过 0 点了」。FAQ1能否用 K 线 datetime 代替 quote可以K 线驱动策略以 kline 换根为主。2跨零点夜盘算哪天按品种规则写进解析函数并写测试 case。3回测时段过滤一致吗回测必须 import 同一套过滤模块。4非交易时段持仓怎么办风控与平仓规则单独定和「不开仓」分开。5不同品种夜盘不同分品种 session 表或分配置项。风险提示本文用于期货量化技术实践讨论不构成投资建议。