有这种可能,所以在 cancel_order 之后需要听一下 TqChan的消息,直到对应的请求被服务器接收返回之后再处理新的 insert_order 逻辑
可以把 targetpostask 里的代码拷贝出来,然后在下单的时候把 order_prefix 一步步传进去,之后去历史 order 里通过匹配 order_prefix 就可以了
我也用的是asyncio的方式,处理方式是把target_volume_task拆开,然后await 对应的coroutine 结果。或者在开仓之后就await 到 position 的变化 insert_order 类似,会有一个...
升级一下 python 版本
有 order_id字段 我的处理方式是自己重新封装了 get_position 和 target_order_task,然后在数据库里存 order、trades, 同时在自定义 order prefix 里加入标识,像这样:...
可以先不要用异步,对新手不友好,可以只用多线程来做: from queue import Queue q = Queue() # 线程一 while True: api.wait_update() t...
期货平仓分平今和平昨,你用的 pos_long 是总仓位,如果要平今的话用 pos_long_today 的数量就可以了 pos_long - pos_long_today 就是平昨的仓位
可以用多线程,也可以用异步的方式,合成好了之后通过队列推送,这样就隔离了合成K线的逻辑和策略逻辑,不知道你遇到的困难在哪? 需要考虑的一点是,如果策略运行逻辑超过1秒的话,那岂不是策略就没办法处理最新的砖头了?永远滞后了就
api 销毁不代表所有资源都释放了,比方说 web_gui 占用的端口(因为官方没加 reuse 参数)就导致端口依然占用着,还有一些资源比方说异步任务,虽然尽可能都...
可以登陆快期模拟看看,有可能是之前程序下的单?
https://www.shinnytech.com/question/13906/ 最近问这个问题的人怎么好像有点多……
@ringo jupyter 已经支持 asyncio了,可以考虑支持一下 https://stackoverflow.com/questions/47518874/how-do-i-run-python-asyncio-code-in-a-jupyter-notebook
[apcode language="python"] positions = api.get_position() for symbol in positions: print('symbol: %s, position: %s' % (symbol, positions[symbol].pos))
这里不是挺详细的么: https://doc.shinnytech.com/tqsdk/latest/reference/tqsdk.objs.html#tqsdk.objs.Position 如果传了 symbol 参数,那么拿到的就是一个这个对象,如果没传symbol对象,那就获取到一个dict,key为...
更新天勤,至少到2.0以上版本,在 install 的时候加 -U 参数
可以下单成功,你下单不成功有什么提示?调用TargetPosTask之后有没有调用 wait_update() ?
循环回到wait_update之后是立刻发出下单,如果不想等的话在执行完 TargetPosTask 之后可以直接调用 api.wait_update() 这样就实现了1ms都不等的方案。 因为TargetPosTask仅仅是个工具辅助下单的,所以只实现了大多数情况下会使用的场景,并且在使用的时候尽可能地从安全角度出发(因为不是所有人都会完整理解TargetPosTask的工作逻辑),所以采用的是对价下单,试想一下如果一个用户下单量特别大然后TargetPosTask还使用涨跌停的话就很容易被坑,因此相比于用户实实在在地亏损,难用一点至少还好一些,特别地,如果想控制下单的细节的话,完全可以使用更底层的...
这种情况下你需要等前一步执行成功后再执行下一步,sleep也只是增大成功概率而已,如果网络延迟严重,sleep 几秒都不一定成功
对于锁仓的单 TargetPosTask 会认为当前是0仓位,不会特殊处理,然后在下单的时候如果是平仓,那就会按offset_priority填写的优先级来平