TargetPosTask 高级功能
本篇文档假设您已经了解 TargetPosTask
的用法,文档参考 交易辅助工具。
本篇文档主要介绍 TargetPosTask
的高级用法。如何使用cancel()
和 is_finished()
方法。
应用情景说明
任何时刻,每个账户下一个合约只能有一个 TargetPosTask
实例,并且其构造参数不能修改。
但是在某些情况下,用户会希望可以管理 TargetPosTask
实例。
比如说,用户使用 TargetPosTask
的 PASSIVE 模式进行下单,希望在收盘前取消所有挂单(包含 TargetPosTask
实例的未成委托单),并平仓。
如何实现这样的功能
TargetPosTask
类提供了 cancel()
和 is_finished()
方法。
cancel()
方法会取消当前TargetPosTask
实例,会将该实例已经发出但还未成交的委托单撤单此实例的 set_target_volume 函数不会再生效,并且此实例的 set_target_volume 函数不会再生效。is_finished()
方法可以获取当前TargetPosTask
实例是否已经结束。已经结束实例的 set_target_volume 函数不会再接受参数,此实例不会再下单或者撤单。
下面是一个例子:
from datetime import datetime, time
from tqsdk import TqApi, TargetPosTask
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
quote = api.get_quote("SHFE.rb2110")
target_pos_passive = TargetPosTask(api, "SHFE.rb2110", price="PASSIVE")
while datetime.strptime(quote.datetime, "%Y-%m-%d %H:%M:%S.%f").time() < time(14, 50):
api.wait_update()
# ... 策略代码 ...
# 取消 TargetPosTask 实例
target_pos_passive.cancel()
while not target_pos_passive.is_finished(): # 此循环等待 target_pos_passive 处理 cancel 结束
api.wait_update() # 调用wait_update(),会对已经发出但还是未成交的委托单撤单
# 创建新的 TargetPosTask 实例
target_pos_active = TargetPosTask(api, "SHFE.rb2110", price="ACTIVE")
target_pos_active.set_target_volume(0) # 平所有仓位
while True:
api.wait_update()
# ... 策略代码 ...
api.close()