决定让期货策略停下来时,至少有三个问题:旧任务还会不会继续动作,它的未成交委托处理完没有,现在实际持有多少。停止任务是第一类决定,已经形成的持仓不会因为“停止”两个字就消失。
把任务状态与持仓数量分开
假设停止前看到了 2 手持仓,原任务还在向更多持仓调整,也可能有未成交委托。这时既不能预写停止后是 0 手,也不能预写一定仍是 2 手:取消处理期间仍可能收到成交回报,结束后的仓位要重新核对。
所以,“不再自动调仓”与“要不要调整现有仓位”,应当分别作决定。前者不能替代后者。
用 TqSdk 明确结束旧任务
使用天勤 TqSdk 的TargetPosTask时,建议用cancel与is_finished管理这次停止过程:先对旧实例调用cancel,继续通过wait_update推进,直到is_finished表示该任务结束。
取消会处理任务的未成交委托,但调用返回不等于整个过程已经完成。等待结束后,旧实例不再承担后续报撤单;不要只看到已经调用cancel,就把它当作所有动作都已停止。
这个入口的价值,是把“结束哪个调仓实例”表达清楚,而不是把任务状态冒充仓位结果。
后续目标,根据实际持仓另定
旧任务结束后,核对实际持仓。如果仍有另外的调仓需要,再按这次新的决定使用新实例、设置新目标;不应继续让已经取消的实例承担后续调整。
至于是保留仓位还是另作调整,不能由本文统一写成清零。把旧任务结束、委托处理和实际仓位核对分开,才能知道程序停止到了哪一步,也避免用一个“已结束”状态推断并不存在的平仓结果。