如果有成交的情况下,这几个订单列表没有看到被清空的操作, 如果self.pos==0,然后挂出上下两个价位都挂出停止单,那么下一笔bar 来了之后就把原来的挂单撤单 ,也没有找到重新挂出去的操作 ,请老师解答 ,谢谢
self.buy_vt_orderids = []
self.sell_vt_orderids = []
self.short_vt_orderids = []
self.cover_vt_orderids = []
def on_15min_bar(self, bar: BarData):
""""""
# 生成交易信号
am = self.am
am.update_bar(bar)
if not am.inited:
return
self.boll_up, self.boll_down = am.boll(self.boll_window, self.boll_dev)
self.boll_mid = am.sma(self.boll_window)
self.atr_value = am.atr(self.atr_window)
if self.pos == 0:
self.intra_trade_high = bar.high_price
self.intra_trade_low = bar.low_price
self.buy_price = self.boll_up
self.sell_price = 0
self.short_price = self.boll_down
self.cover_price = 0
elif self.pos > 0:
self.intra_trade_high = max(self.intra_trade_high, bar.high_price)
self.intra_trade_low = bar.low_price
self.long_sl = self.intra_trade_high - self.atr_value * self.atr_multiplier
self.long_sl = max(self.boll_mid, self.long_sl)
self.buy_price = 0
self.sell_price = self.long_sl
self.short_price = 0
self.cover_price = 0
elif self.pos < 0:
self.intra_trade_low = min(self.intra_trade_low, bar.low_price)
self.intra_trade_high = bar.high_price
self.short_sl = self.intra_trade_low + self.atr_value * self.atr_multiplier
self.short_sl = min(self.boll_mid, self.short_sl)
self.buy_price = 0
self.sell_price = 0
self.short_price = 0
self.cover_price = self.short_sl
# 根据信号执行挂撤交易
if self.pos == 0:
# 检查之前委托都已经结束
if not self.buy_vt_orderids:
# 检查存在信号
if self.buy_price:
self.buy_vt_orderids = self.buy(self.buy_price, self.fixed_size, True)
self.buy_price = 0 # 执行需要清空信号
else:
# 遍历委托号列表撤单
for vt_orderid in self.buy_vt_orderids:
self.cancel_order(vt_orderid)
if not self.short_vt_orderids:
if self.short_price:
self.short_vt_orderids = self.short(self.short_price, self.fixed_size, True)
self.short_price = 0
else:
for vt_orderid in self.short_vt_orderids:
self.cancel_order(vt_orderid)
elif self.pos > 0:
if not self.sell_vt_orderids:
if self.sell_price:
self.sell_vt_orderids = self.sell(self.sell_price, abs(self.pos), True)
self.sell_price = 0
else:
for vt_orderid in self.sell_vt_orderids:
self.cancel_order(vt_orderid)
else:
if not self.cover_vt_orderids:
if self.cover_price:
self.cover_vt_orderids = self.cover(self.cover_price, abs(self.pos), True)
self.cover_price = 0
else:
for vt_orderid in self.cover_vt_orderids:
self.cancel_order(vt_orderid)