5.19K 浏览
0

为了方便用 set_target_volume() 来管理实盘交易,上次发生过一次开仓后,紧接着平仓,再开仓,再平仓,一共循环了4次才稳定下来,浪费了点差和手续费,但是上次没有详细罗列每一步的数据,无法确定原因,后面2次交易又正常了,不过最近一次又发现同样的重复开平问题,这次罗列了每一步的数据,才证实了 api.get_position(SYMBOL).pos_long/short  与api.get_position(SYMBOL).open_price_long/short 居然不是同步更新的,api.get_position(SYMBOL).pos_long/short 取到开仓数据后,进入平仓模块,此时的api.get_position(SYMBOL).open_price_long/short 居然读数为0,以此数据加减止损点差来判断平仓条件的话,就可能会立即触发,从而造成了反复的开平,直到某个点,这两个数据同时更新了才会停下来。用 set_target_volume() 来管理实盘交易的话,这是一个麻烦的问题,希望能解决一下。

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

反复又看了一下问题,发现我最初的回答有些理解偏差,我第一个回答里理解成了set_target_position和position变化两个操作之间的关系问题,而题主问的仅是 position 对象的属性的变化问题,所以我再补充一下:

我觉得导致open_price_long更新和pos_long在同为一个position的情况下,确实也是有可能因为我第一个回答里说的一些情况导致出现,因为存在可能先平仓再开仓,所以一次 set_target_volume() 对应多个 trade ,然后多个 trade再对应回一个 position。

举个 原多头, set_target_volume 空头 的例子

  1. 先平掉昨多仓,pos_long 改变,pos_short 不变,open_price_long 不变,open_price_short不变
  2. 再平掉今多仓,pos_long 改变,pos_short不变,open_price_long 不变,open_price_short不变
  3. 最后再开空仓,pos_long 不变,pos_short改变,open_price_long 不变,open_price_short改变

所以在这种情况下,确实也会存在你说的“不是同步更新”,我第一个回答里三方面的前两个方面可以忽略,而第三个方面面对的就是这种情景,然后后面的关于取舍的分析都没问题

lookis 已回答的问题 2020年7月25日
您正在查看3个答案中的1个,单击此处查看所有答案。