期货程序化报单有效期:天勤 time_condition 与 FAK 组合
前言国内期货程序化交易里策略算完信号后要通过天勤向期货公司报单。趋势类策略常用TargetPosTask在wait_update()里自动限价或对价调仓默认相当于当日有效挂单GFD单子可以挂在场上排队等成交。跨期价差、套利类策略则不同例如做多豆粕近月、做空远月要求两腿尽量同时成交若收盘前只成交一腿另一腿挂在夜盘前就变成裸露的单边方向风险。手写报单时天勤api.insert_order()产生的委托对象带有time_conditionobjs.pyGFD当日有效、IOC立即完成否则撤销、GTC撤销前有效等还可配合FAK/FOK等高级参数。TargetPosTask封装了趋势场景常见路径要精细控制「未成即撤」须直接调insert_order。下面说明各参数在期货场景怎么选、和 task 如何分工。一、time_condition 枚举Order 对象值含义GFD当日有效GTC撤销前有效IOC立即完成否则撤销GFS本节有效GFA集合竞价有效模拟撮合trade_base.py对IOC有特殊处理不能立即成交的限价单直接撤。二、insert_order 示例orderapi.insert_order(symbolSHFE.rb2510,directionBUY,offsetOPEN,volume2,limit_price3500,advancedFAK,# 以你本地文档支持的 advanced 参数为准)具体advanced与time_condition组合以官方insert_order签名为准。报单后必须wait_update才能看到order.status、volume_left变化。三、场景选择场景建议趋势调仓TargetPosTask默认 GFD 类价差吃单IOC/FAK减少残单收盘前挂单避免 GTC 过夜集合竞价GFA需确认品种支持手写 IOC 后检查volume_left大于 0 且迅速FINISHED说明未成交部分已撤。四、与 TargetPosTask 的分工文档禁止同合约混用 task 与insert_order。若策略 90% 用 task、10% 用 FAK 点价应统一改为insert_order或拆成两阶段进程。临时 FAK 应急后恢复 task 前对账pos。五、拒单与 last_msg部分组合交易所不支持会is_error真last_msg提示参数非法。应在模拟盘枚举合法组合。六、volume_condition 与成交充分度volume_condition控制成交量条件ANY任意数量、MIN最小、ALL全部。与FAK/FOK组合时语义是「能成交多少算多少」还是「必须全部成交否则全撤」。套利两腿若要求同时全成FOK 更严但失败率更高趋势入场通常 ANY 或 FAK 即可。volume_condition典型搭配残单风险ANYGFD 限价高ANYFAK低ALLFOK极低易废单七、监控在途 IOC 单IOC/FAK 报单生命周期很短仍要在wait_update后立刻检查orderapi.insert_order(...)whileorder.status!FINISHED:api.wait_update()filledorder.volume_orign-order.volume_left log(fak_result,filledfilled,leftorder.volume_left,msgorder.last_msg)若filled 0策略要有备选放宽限价、换 PASSIVE、或放弃本次信号。不要假设 FAK 一定成交。八、日终残单扫描收盘前遍历get_order()任何status ALIVE的 GFD/GTC 单都应显式cancel_order或调set_target_volume对齐。日终日志记alive_count不为 0 则告警。总结报单有效期决定残单风险。天勤在Order.time_condition与insert_order高级参数里暴露 GFD、IOC 等选项趋势用TargetPosTask即可价差和点价场景手写insert_order时显式选 IOC/FAK并在wait_update后检查volume_left。禁止与 task 混用同合约是避免状态机打架的前提。FAQ1task 能设 IOC 吗task 内部封装不直接暴露 time_condition要 IOC 就手写单。2IOC 部分成交剩余撤销pos为部分成交量。3市价单还要 time_condition 吗price_typeANY时规则因交易所而异模拟盘先测。4多账户 insert_order传account参数。本文基于天勤 TqSdk 公开 API 整理不构成投资建议。