4.16K 浏览
0

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

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

望回复,急

0

其实我也有个疑问就是既然愿意追价下单为何不在下单的时候就以涨跌停价格下单……?

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上做一些区分