TargetPosTask 高级功能

本篇文档假设您已经了解 TargetPosTask 的用法,文档参考 交易辅助工具

本篇文档主要介绍 TargetPosTask 的高级用法。如何使用cancel()is_finished() 方法。

应用情景说明

任何时刻,每个账户下一个合约只能有一个 TargetPosTask 实例,并且其构造参数不能修改。

但是在某些情况下,用户会希望可以管理 TargetPosTask 实例。

比如说,用户使用 TargetPosTaskPASSIVE 模式进行下单,希望在收盘前取消所有挂单(包含 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()