4.11K 浏览
0

两个策略同时下单一个品种,但是会出现不能成交的情况。怎么样做到10秒内没有成交各自重新追单?

lookis 已回答的问题 2020年7月27日

望回复,急

0

解决办法我现在想到的有三个:

  1. 如果是TargetPosTask的话,会自动追单
  2. 用insert_order函数会返回提交的订单,然后在每次quote更新的时候检查是否到10秒,如果到了还没成交就把之前的订单取消再次下单
  3. 使用 InsertOrderUntilAllTradedTask, 文档在这里有写:https://doc.shinnytech.com/tqsdk/latest/reference/tqsdk.lib.html#tqsdk.lib.InsertOrderUntilAllTradedTask

使用1最简单,使用2操作最繁琐但是不用什么复杂的技术,3最灵活但是需要了解python的 async调用机制。

另外,关于3有一个示例在这可以尝试看一下,这段代码其实就是 TargetPosTask里的调用片段:

https://github.com/shinnytech/tqsdk-python/blob/master/tqsdk/lib.py#L205-L221

lookis 发表新评论 2020年7月28日

我也很想用第一种方案,但是第一种方案不是按照账户持仓和目标持仓对比啊。如果策略1目标持仓是3,策略2目标持仓是5,那么最后不是只按照其中一个策略的目标持仓进出仓的吗?这个有解决办法吗?

我也遇到这个问题了,暂时没啥特别快的解决方案,我现在做法是用另一个合约……比方说rb2010和rb2101……

然后在实盘也是在不断完善我自己的框架ing,但感觉工程量不小

或者要不试一下中间做一个代理呢……两个策略把自己要下单的手数存db然后消息队列通知一下,专门做个代理层去合并不同策略的单子数量,只是在计算收益的时候又很麻烦……

感觉弄麻烦了,还不如直接使用insert_order……然后在订单id上做一些区分

您正在查看2个答案中的1个,单击此处查看所有答案。