期货量化一次调仓很多手:天勤大单拆分怎么设
前言期货下单单位是「手」。策略从空仓一次调到 20 手若用对价ACTIVE一次吃完卖盘价格可能被自己扫上去滑点很大若用排队PASSIVE又可能半天不成交。机构或大账户常希望分批每次 25 手成交后再下下一笔。自己写循环容易和天勤调仓逻辑冲突天勤在TargetPosTask上提供了大单拆分模式。需要先弄清一点TargetPosTask不会在你调用set_target_volume(20)的同一行立刻发 20 手它只记录目标后续每次wait_update()task 在内部比较当前get_position().pos与目标发单、撤单、改价。min_volume和max_volume两个参数同时设置时进入源码注释所称的「大单拆分模式」。下面说明触发条件、随机手数含义、何时值得用。一、名词对照名称含义TargetPosTask自动把净仓调到目标set_target_volume(n)目标净仓 n 手wait_update()task 在此发单撤单priceACTIVE对价买用卖一、卖用买一pricePASSIVE排队易造成较多撤单min_volume拆分模式下每笔最小手数max_volume拆分模式下每笔最大手数get_position().pos当前净仓拆分过程中逐步接近目标volume_left委托未成交手数TqRuleOrderRateLimit天勤报单频率风控拆单过多可能触发二、大单拆分如何工作据 target_pos_task.py 文档同时设置min_volume、max_volume且max_volume min_volume 0。若调仓总手数小于max_volume一次下完。若大于等于max_volume每笔手数为min_volumemax_volume之间随机正整数该笔全成交后再下下一笔直到剩余小于max_volume时一次下完。fromtqsdk.libimportTargetPosTask taskTargetPosTask(api,SHFE.rb2510,priceACTIVE,min_volume2,max_volume5,)task.set_target_volume(20)whileTrue:api.wait_update()# 必须继续否则 task 不工作随机是为了避免固定节奏被盘口针对若希望固定每批 3 手可设min_volumemax_volume3。三、什么时候值得拆情况建议13 手小仓通常不必拆主力盘口厚、单次小于 10 手先用模拟测滑点单次调仓很大或盘口薄考虑拆分夜盘小品种小批次 ACTIVE监控 ALIVE 时长拆单降低冲击但增加报单次数可能触发报单频率限制要与风控规则整体规划。四、部分成交与 PASSIVE每批仍可能部分成交真相以get_position().pos为准。PASSIVE 拆分往往撤单多、CPU 高大单执行更常用 ACTIVE。五、参数不能事后改同一 symbol 的 task 单例不允许事后改min_volume/max_volume改参需重启进程。总结大单要不要拆取决于你更怕滑点还是更怕慢成交、报单过多。天勤在TargetPosTask上用min_volume和max_volume启用拆分由 task 在多次wait_update中自动分批避免手写循环与 task 打架。需要牢记的是set_target_volume之后必须继续wait_update拆分进度用pos和volume_left观察在模拟盘试出适合品种的批次大小比实盘临时改手数稳妥。FAQ1只设 max 不设 min不会启用拆分两参数必须同时设。2怎么看拆到哪了读get_position与get_order或构造 task 时传trade_chan收成交通知。3减仓也拆吗调仓绝对值 ≥ max_volume 时同样分批。4回测和实盘一样吗逻辑可一致成交模型仍有差异需TqKq验证。风险提示以上内容用于拆单执行参考不构成投资建议。