前言
春节、国庆等长假,国内期货休市多日,外盘或政策消息在休市期间积累,节后首日往往跳空开盘。程序化策略若在节前最后一根 5 分钟 K 线上算了「做多」并缓存在变量bias里,节后若仍用旧 bias 直接set_target_volume,可能在极端价位开仓;若一律清空 bias 又可能错过合法的趋势延续。问题本质是:休市期间 K 线的datetime不推进,但市场信息已经变了。
天勤里,K 线时间存在表列datetime里,由行情服务按业务规则写入,不是本机time.time()。get_kline_serial返回的表在wait_update()后更新;is_changing(kl.iloc[-1], "datetime")为真表示来了新一根 bar。长假后第一根 bar 的open与节前close可能差很多,程序要有「节后分支」,不能和平时同一套缓存逻辑。
一、名词对照
| 名称 | 含义 | 长假场景下会怎样 |
|---|---|---|
datetime | K 线业务时间 | 休市不推进,节后突然跳 |
iloc[-1] | 最后一行,常是未收盘 bar | 判断新 bar 用is_changing(..., "datetime") |
iloc[-2] | 倒数第二行,已收盘 bar | 信号常在此计算,避免用未收盘数据 |
bias | 策略自缓存的多空允许方向 | 节前值可能过期 |
set_target_volume | 目标净仓 | 节后首笔下单前应收窄 |
get_position | 柜台持仓 | 节前持仓节后仍继承 |
quote.trading_time | 合约交易时段结构 | 集合竞价阶段是否交易要团队定 |
| 跳空 | 开盘价远离节前收盘价 | 触发过滤或刷新信号 |
二、休市期间内存里有什么
| 状态 | 休市中 | 节后开盘 |
|---|---|---|
| K 线 datetime | 不更新 | 新 bar 出现 |
| bias 缓存 | 保持节前 | 若不清算则沿用 |
真实持仓pos.pos | 不变 | 继承,需get_position读 |
长假前若无人值守,很多团队选择减仓或停机;若仍运行,节后首日必须有专门逻辑。
三、三种常见处理方式
| 方式 | 做法 | 适合 |
|---|---|---|
| 强制刷新 | 节后首根datetime变时用iloc[-2]重算信号 | 信号依赖最新 K 线 |
| 开盘暂停 | 节后 N 分钟内禁止加仓 | 防集合竞价噪声 |
| 跳空过滤 | 开盘相对节前收盘超阈值则只平不开 | 保守趋势策略 |
bias={"long":False,"short":False}last_close=NonewhileTrue:api.wait_update()ifapi.is_changing(kl.iloc[-1],"datetime"):bar=kl.iloc[-2]bias["long"]=bar.close>ma.iloc[-2]bias["short"]=bar.close<ma.iloc[-2]iflast_closeisnotNone:gap=abs(bar.open-last_close)ifgap>GAP_LIMIT:state["gap_day"]=Truelast_close=bar.closeifstate.get("gap_day")andnotallow_after_holiday():continueGAP_LIMIT可按品种用 tick 数或百分比;allow_after_holiday可实现为「节后 30 分钟不允许新开仓」等。
四、与交易时段、持仓继承
节后仍要用 quote 上交易时段信息过滤,避免在集合竞价用 tick 逻辑误触发。节前已有持仓时,刷新 bias 不等于自动平仓:新信号反向时由TargetPosTask调仓;若启用跳空过滤,可能只允许减仓。进程重启后先用get_position同步目标,再谈节后信号。
五、回测一致
TqBacktest跨长假的历史 K 线包含跳空;回测若每天重算而实盘用旧缓存会对不上。三环境应统一节后规则,并用含春节的历史段回放验证。
总结
长假休市后的跳空,考验的是策略有没有处理「时间断层」:天勤里datetime在休市不动、节后一动就是一根缺口 bar,旧的bias缓存可能已经不再代表市场。节后首根有效 bar 应主动重算信号,并用开盘暂停或跳空阈值限制加仓;持仓则以get_position为准与节前衔接。把节后规则写进配置文件,从日志里也能看出「节后第一天为何观望」,而不是误以为程序坏了。
FAQ
1)节前要不要强制平仓?
团队风控决定;常见做法是节前减仓。
2)bias 写在文件里?
节后首日以 K 线重算覆盖,勿盲目读旧 state。
3)有夜盘的品种节后周一?
注意首根 bar 来自夜盘还是日盘,按品种写规则。
4)gap 阈值怎么定?
用历史长假后首日统计几档,写入 config 再模拟。
风险提示
以上内容用于节后开盘处理参考,不构成投资建议。