429 浏览
0

在模拟交易里面走通了,下到实盘,两笔单子出去一笔,第二笔出去没成交 就不动了,这是怎么回事? 代码如下:

ts = api.get_trading_status(symbol3)
    print("Now the trading status is:",ts.trade_status)
     quote = api.get_quote(symbol3)
     def get_price(direction):
        # 在 BUY 时使用买一价加一档价格,SELL 时使用卖一价减一档价格
        if direction == "BUY":
            price = quote.bid_price1 + 5*quote.price_tick
        else:
            price = quote.ask_price1 - 5*quote.price_tick
        # 如果 price 价格是 nan,使用最新价报单
        if price != price:
            price = quote.last_price
        return price
     t1 = TargetPosTask(api, symbol3, price=get_price)
     while True:
        api.wait_update()
        if ts.trade_status == "CONTINOUS":
            print("连续交易开始")
            t1.set_target_volume(PRESUMED_VOLUME)
            api.wait_update()
             quote = api.get_quote(symbol4)
            t2 = TargetPosTask(api, symbol4, price=get_price)
            t2.set_target_volume(-PRESUMED_VOLUME)
            api.wait_update()  # 同一个TargetPosTask需保证 每次set_target_volume() 后还会调用wait_update(); 若多次set_target_volume()后再调用一次wait_update(),则只有最后一次set是有效的。
            print("已设置好多头", symbol3, "目标仓位", PRESUMED_VOLUME)
            print("已设置好空头", symbol4, "目标仓位", -PRESUMED_VOLUME)  # '''#目标仓位分正负,下面的仓位多空不分正负'''
            while True:
                if t1.is_finished and t2.is_finished:
                    print("今日多空目标仓位均已达到")
                    break
                else:
                    print("Waiting for filling orders, re-check in 5 seconds")
                time_module.sleep(5)
            api.close()
            print("Completed")
            break

t2设置的仓位一笔都没有成交,他反而满足了那句

if t1.is_finished and t2.is_finished:

把后面那句

"今日多空目标仓位均已达到"

打印出来了。

感觉这个还是不稳定啊,都没有用的信心了。

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

首先sleep是绝对不能用的,原因参考https://forum.shinnytech.com/question/7973/
然后下单是要反复通过wait_update进行的,不是一下就成了的。最后这个函数确实需要理解的更深才会好用,因为牵扯不少我们写的内部逻辑。

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