前言国内商品期货量化程序执行层必须落在具体交割月份上例如SHFE.rb2510用天勤TargetPosTask根据均线等信号set_target_volume调仓。合约临近到期时交易所对开仓、持仓限额与交割规则都会变严若程序仍在临月合约上自动加仓可能面临流动性枯竭甚至强平。有人用 Excel 记「每月 15 号换月」交易所规则一变就踩坑。天勤api.get_quote(symbol)返回的quote上有expire_datetime到期日时间戳和expire_rest_days剩余到期天数由行情服务推送可在set_target_volume前做禁开、只平不开或强制清仓。下面说明字段含义、与主力换月如何配合、程序里怎么裁剪 target。一、quote 上的到期字段字段类型含义expire_datetimefloat秒级 Unix 时间戳合约到期日expire_rest_daysfloat距到期剩余天数expire_rest_days在trade_extension.py里由expire_datetime与当前行情时间推算。刚订阅时可能为 nan需wait_update等到 quote 完整。读取示例quoteapi.get_quote(SHFE.rb2510)api.wait_update()daysquote.expire_rest_daysifdaysdaysanddays5:# 非 nanlog(expire_warn,symbolquote.instrument_id,daysdays)二、禁开与只平不开策略常见规则数值按品种与合规要求自定expire_rest_days 10禁止新开仓只允许减仓。expire_rest_days 3强制把 target 调到 0。交割月前一周切换TargetPosTask到次主力合约配合underlying_symbol换月。裁剪 target 示例defclip_target_for_expire(raw_target,pos,expire_rest_days,forbid_open_days10):ifexpire_rest_days!expire_rest_days:# nanreturnraw_targetifexpire_rest_days3:return0ifexpire_rest_daysforbid_open_days:# 只允许朝平仓方向ifraw_targetpos:returnposifraw_targetpos:returnposreturnraw_target在set_target_volume前调用pos来自get_position(symbol).pos。三、与主力换月的关系expire_rest_days管「这一张合约还能持多久」underlying_symbol或主连KQ.m管「策略逻辑跟哪条价格序列」。两者都要信号可跟主连下单必须落在未临期的具体月份临期预警针对具体下单合约的 quote。换月窗口建议早于禁开阈值避免最后几天流动性枯竭、平不掉。四、日志与告警预警应记symbol、expire_rest_days、expire_datetime、pos、裁剪后的target。expire_rest_days跨日跳变时发一条汇总通知便于和交易日历对照。模拟盘TqSim同样有expire_rest_days可在回测末尾故意持有临月合约验证禁开是否生效。五、交易所规则不能全靠字段天勤字段反映合约到期时间不代替期货公司持仓限额、交割月开仓限制等合规规则。程序化层用expire_rest_days做第一道闸具体阈值应叠加品种手册与期货公司通知。六、品种差异配置表示例rb:forbid_open_days:10force_flat_days:3m:forbid_open_days:8force_flat_days:2IF:forbid_open_days:5force_flat_days:1程序启动读表对quote.product_id匹配规则。金融期货交割月规则与商品不同不能全品种同一数字。七、与 query_quotes 联动盘前query_quotes(ins_classFUTURE, expiredFalse)得到可交易列表再过滤expire_rest_days N的合约从标的池剔除。比手工删 symbol 更不易漏。八、告警文案预警日志建议人类可读合约 SHFE.rb2510 剩余 4 天到期已禁止开仓当前 pos2。运维一眼能判断要不要人工介入移仓。总结期货合约临近交割程序要比行情软件更早知道「这张合约剩几天」。天勤quote.expire_rest_days与expire_datetime提供了统一入口可在set_target_volume前裁剪 target实现只平不开或强制清仓与主力换月、具体下单月份配合才能避免信号还在旧月、执行已临期的错位。在TqSim上把阈值跑通并留痕比临到期手工改代码稳妥得多。FAQ1expire_rest_days 是 nan行情未到或合约信息未加载多等几帧仍 nan 则查 symbol 是否写错。2金融期货也适用吗字段存在但交割规则与商品不同阈值要单独配置。3主连 KQ.m 有 expire_rest_days 吗主连是连续序列到期字段不用于下单执行层看具体月份。4能否用 query_quotes 过滤临期query_quotes可筛expiredFalse的期货列表与expire_rest_days互补维护标的池。本文基于天勤 TqSdk 公开 API 整理不构成投资建议。
期货合约临近交割怎么预警:天勤 expire_datetime 与禁开逻辑
前言国内商品期货量化程序执行层必须落在具体交割月份上例如SHFE.rb2510用天勤TargetPosTask根据均线等信号set_target_volume调仓。合约临近到期时交易所对开仓、持仓限额与交割规则都会变严若程序仍在临月合约上自动加仓可能面临流动性枯竭甚至强平。有人用 Excel 记「每月 15 号换月」交易所规则一变就踩坑。天勤api.get_quote(symbol)返回的quote上有expire_datetime到期日时间戳和expire_rest_days剩余到期天数由行情服务推送可在set_target_volume前做禁开、只平不开或强制清仓。下面说明字段含义、与主力换月如何配合、程序里怎么裁剪 target。一、quote 上的到期字段字段类型含义expire_datetimefloat秒级 Unix 时间戳合约到期日expire_rest_daysfloat距到期剩余天数expire_rest_days在trade_extension.py里由expire_datetime与当前行情时间推算。刚订阅时可能为 nan需wait_update等到 quote 完整。读取示例quoteapi.get_quote(SHFE.rb2510)api.wait_update()daysquote.expire_rest_daysifdaysdaysanddays5:# 非 nanlog(expire_warn,symbolquote.instrument_id,daysdays)二、禁开与只平不开策略常见规则数值按品种与合规要求自定expire_rest_days 10禁止新开仓只允许减仓。expire_rest_days 3强制把 target 调到 0。交割月前一周切换TargetPosTask到次主力合约配合underlying_symbol换月。裁剪 target 示例defclip_target_for_expire(raw_target,pos,expire_rest_days,forbid_open_days10):ifexpire_rest_days!expire_rest_days:# nanreturnraw_targetifexpire_rest_days3:return0ifexpire_rest_daysforbid_open_days:# 只允许朝平仓方向ifraw_targetpos:returnposifraw_targetpos:returnposreturnraw_target在set_target_volume前调用pos来自get_position(symbol).pos。三、与主力换月的关系expire_rest_days管「这一张合约还能持多久」underlying_symbol或主连KQ.m管「策略逻辑跟哪条价格序列」。两者都要信号可跟主连下单必须落在未临期的具体月份临期预警针对具体下单合约的 quote。换月窗口建议早于禁开阈值避免最后几天流动性枯竭、平不掉。四、日志与告警预警应记symbol、expire_rest_days、expire_datetime、pos、裁剪后的target。expire_rest_days跨日跳变时发一条汇总通知便于和交易日历对照。模拟盘TqSim同样有expire_rest_days可在回测末尾故意持有临月合约验证禁开是否生效。五、交易所规则不能全靠字段天勤字段反映合约到期时间不代替期货公司持仓限额、交割月开仓限制等合规规则。程序化层用expire_rest_days做第一道闸具体阈值应叠加品种手册与期货公司通知。六、品种差异配置表示例rb:forbid_open_days:10force_flat_days:3m:forbid_open_days:8force_flat_days:2IF:forbid_open_days:5force_flat_days:1程序启动读表对quote.product_id匹配规则。金融期货交割月规则与商品不同不能全品种同一数字。七、与 query_quotes 联动盘前query_quotes(ins_classFUTURE, expiredFalse)得到可交易列表再过滤expire_rest_days N的合约从标的池剔除。比手工删 symbol 更不易漏。八、告警文案预警日志建议人类可读合约 SHFE.rb2510 剩余 4 天到期已禁止开仓当前 pos2。运维一眼能判断要不要人工介入移仓。总结期货合约临近交割程序要比行情软件更早知道「这张合约剩几天」。天勤quote.expire_rest_days与expire_datetime提供了统一入口可在set_target_volume前裁剪 target实现只平不开或强制清仓与主力换月、具体下单月份配合才能避免信号还在旧月、执行已临期的错位。在TqSim上把阈值跑通并留痕比临到期手工改代码稳妥得多。FAQ1expire_rest_days 是 nan行情未到或合约信息未加载多等几帧仍 nan 则查 symbol 是否写错。2金融期货也适用吗字段存在但交割规则与商品不同阈值要单独配置。3主连 KQ.m 有 expire_rest_days 吗主连是连续序列到期字段不用于下单执行层看具体月份。4能否用 query_quotes 过滤临期query_quotes可筛expiredFalse的期货列表与expire_rest_days互补维护标的池。本文基于天勤 TqSdk 公开 API 整理不构成投资建议。