445 浏览
0

while True:
    api.wait_update()
    if pos1.pos_long == 30:
        break
    order1=api.insert_order("SHFE.ni2402",direction="SELL",offset="OPEN",volume=2,limit_price=quote2.lower_limit,advanced="FOK")
    order2 = api.insert_order("SHFE.ni2406", direction="BUY", offset="OPEN", volume=2,
                                      limit_price=quote1.upper_limit, advanced="FOK")

程序里判断当pos1持多头等于30时,就停止下单,但是这段程序运行后,直接把账户所有钱都花光了,买了四十多手,说明pos1.pos_long==30并没有判断到其是否持仓30了,也就是每次成交2手后,并没有更新pos_long的持多头数,请问这是怎么回事?

李思恒 已回答的问题 2023年12月28日
0

pos是根据trade字段来的,在交易过程中特别是实盘过程中,并不会立马成交,while循环本身的速度是远远大于回报时间的,所以就会造成这么个现象。可以考虑下用本地的计数器。比如a=0,每次运行一次order后,就a+=1,因为本地记录这种a=30的时候,就是发了30次order。

李思恒 已回答的问题 2023年12月28日