前言国内期货实盘里同一时刻你想买螺纹钢可以挂限价在买一排队排队价也可以直接吃卖一对价或挂得更低等待成交。程序化里若价格选错典型结果是回测里假设都能成交实盘却整天挂单不动或对价吃单滑点过大侵蚀 edge。天勤 TqSdk 的TargetPosTask用参数price控制调仓时的报价风格文档写明ACTIVE为对价买用卖一、卖用买一PASSIVE为排队买用买一、卖用卖一可能造成较多撤单。手写insert_order时则自己填limit_price。下面按国内期货实盘常见成交问题说明三种报价方式各自适合什么场景以及和回测假设对齐时要注意什么。一、三种说法与 ACTIVE/PASSIVE 对应口语含义TargetPosTask对价吃对手盘偏成交速度priceACTIVE默认排队价挂在本方最优价等成交pricePASSIVE限价指定价格insert_order(..., limit_price)或 task 的 Callable 自定义文档还允许price为 Callable传入方向返回价格返回 nan 会抛错——适合严格限价或结合quote加减 tick。二、ACTIVE 适用场景趋势跟进希望尽快达到目标净仓流动性正常、点差小于策略容忍回测与模拟用 ACTIVE实盘行为较接近“能成交”假设。注意ACTIVE 在波动大时成交价会跳滑点需回测敏感性或模拟统计。三、PASSIVE 适用场景更在意价格愿意等流动性好、队列不太长文档提示 PASSIVE 可能造成较多撤单在行情剧烈时 task 会随价格变化撤单重挂CPU 与报单频率上升。不适合临近涨跌停、盘口一侧缺失时硬排队——可能长期不成交。四、构造示例与注释fromtqsdk.libimportTargetPosTask# 对价调仓默认task_activeTargetPosTask(api,SHFE.rb2510,priceACTIVE)# 排队调仓task_passiveTargetPosTask(api,SHFE.rb2510,pricePASSIVE)# 自定义买入不超过 last_price 1 tickdefmy_price(direction):tickquote.price_tickifdirectionBUY:returnmin(quote.ask_price1,quote.last_pricetick)returnmax(quote.bid_price1,quote.last_price-tick)task_customTargetPosTask(api,SHFE.rb2510,pricemy_price)quote需在wait_update后有有效买卖盘刚开盘或指数类合约可能缺档要判断 nan。五、与 insert_order、限价单关系学习阶段可用insert_order(symbol, BUY, OPEN, 1, limit_price...)理解拒单。生产环境趋势策略常用 task 统一调仓同一合约勿 task 与 insert_order 混用官方明确。FAK/FOK 等高级参数见 insert_order 专题与 task 是不同路径。六、怎么选决策表情况建议模拟验证逻辑ACTIVE先跑通大单怕滑点PASSIVE 或拆单 min/max_volume流动性差缩小仓位或暂停勿死挂严格限价Callable 或 insert_order总结限价、对价、排队价看似只是下单细节实则决定了策略在真实盘口里是“尽快成交”还是“以等待换确定性”。当你把 ACTIVE/PASSIVE 的选择与策略目标、流动性场景、以及回测/模拟的成交假设统一起来执行层就不会成为收益曲线的黑箱回测里你以为会发生的交易在实盘里更可能以相近的路径发生。另一方面夜盘或盘口变薄时排队可能长期不成交这时需要用规则明确什么时候禁开新仓、什么时候允许用更合适的 price 模式调整执行。让这些边界写进配置并在日志里留痕回测与实盘就能形成更稳定的衔接。FAQ1默认是哪个ACTIVE。2PASSIVE 撤单多文档已提示夜盘活跃品种要监控报单频率。3股指平今贵配合 offset_priority见开平专题。4回测区分 ACTIVE/PASSIVE模拟成交模型不同应用同一 price 做样本外。风险提示本文讨论执行方式不构成投资建议。
期货程序化限价、对价、排队价怎么选:天勤 ACTIVE 与 PASSIVE
前言国内期货实盘里同一时刻你想买螺纹钢可以挂限价在买一排队排队价也可以直接吃卖一对价或挂得更低等待成交。程序化里若价格选错典型结果是回测里假设都能成交实盘却整天挂单不动或对价吃单滑点过大侵蚀 edge。天勤 TqSdk 的TargetPosTask用参数price控制调仓时的报价风格文档写明ACTIVE为对价买用卖一、卖用买一PASSIVE为排队买用买一、卖用卖一可能造成较多撤单。手写insert_order时则自己填limit_price。下面按国内期货实盘常见成交问题说明三种报价方式各自适合什么场景以及和回测假设对齐时要注意什么。一、三种说法与 ACTIVE/PASSIVE 对应口语含义TargetPosTask对价吃对手盘偏成交速度priceACTIVE默认排队价挂在本方最优价等成交pricePASSIVE限价指定价格insert_order(..., limit_price)或 task 的 Callable 自定义文档还允许price为 Callable传入方向返回价格返回 nan 会抛错——适合严格限价或结合quote加减 tick。二、ACTIVE 适用场景趋势跟进希望尽快达到目标净仓流动性正常、点差小于策略容忍回测与模拟用 ACTIVE实盘行为较接近“能成交”假设。注意ACTIVE 在波动大时成交价会跳滑点需回测敏感性或模拟统计。三、PASSIVE 适用场景更在意价格愿意等流动性好、队列不太长文档提示 PASSIVE 可能造成较多撤单在行情剧烈时 task 会随价格变化撤单重挂CPU 与报单频率上升。不适合临近涨跌停、盘口一侧缺失时硬排队——可能长期不成交。四、构造示例与注释fromtqsdk.libimportTargetPosTask# 对价调仓默认task_activeTargetPosTask(api,SHFE.rb2510,priceACTIVE)# 排队调仓task_passiveTargetPosTask(api,SHFE.rb2510,pricePASSIVE)# 自定义买入不超过 last_price 1 tickdefmy_price(direction):tickquote.price_tickifdirectionBUY:returnmin(quote.ask_price1,quote.last_pricetick)returnmax(quote.bid_price1,quote.last_price-tick)task_customTargetPosTask(api,SHFE.rb2510,pricemy_price)quote需在wait_update后有有效买卖盘刚开盘或指数类合约可能缺档要判断 nan。五、与 insert_order、限价单关系学习阶段可用insert_order(symbol, BUY, OPEN, 1, limit_price...)理解拒单。生产环境趋势策略常用 task 统一调仓同一合约勿 task 与 insert_order 混用官方明确。FAK/FOK 等高级参数见 insert_order 专题与 task 是不同路径。六、怎么选决策表情况建议模拟验证逻辑ACTIVE先跑通大单怕滑点PASSIVE 或拆单 min/max_volume流动性差缩小仓位或暂停勿死挂严格限价Callable 或 insert_order总结限价、对价、排队价看似只是下单细节实则决定了策略在真实盘口里是“尽快成交”还是“以等待换确定性”。当你把 ACTIVE/PASSIVE 的选择与策略目标、流动性场景、以及回测/模拟的成交假设统一起来执行层就不会成为收益曲线的黑箱回测里你以为会发生的交易在实盘里更可能以相近的路径发生。另一方面夜盘或盘口变薄时排队可能长期不成交这时需要用规则明确什么时候禁开新仓、什么时候允许用更合适的 price 模式调整执行。让这些边界写进配置并在日志里留痕回测与实盘就能形成更稳定的衔接。FAQ1默认是哪个ACTIVE。2PASSIVE 撤单多文档已提示夜盘活跃品种要监控报单频率。3股指平今贵配合 offset_priority见开平专题。4回测区分 ACTIVE/PASSIVE模拟成交模型不同应用同一 price 做样本外。风险提示本文讨论执行方式不构成投资建议。