在模拟交易里面走通了,下到实盘,两笔单子出去一笔,第二笔出去没成交 就不动了,这是怎么回事? 代码如下:
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日
首先sleep是绝对不能用的,原因参考https://forum.shinnytech.com/question/7973/
然后下单是要反复通过wait_update进行的,不是一下就成了的。最后这个函数确实需要理解的更深才会好用,因为牵扯不少我们写的内部逻辑。
李思恒 已回答的问题 2023年12月4日