`

  def on_tick(self, tick: TickData):
    if tick.vt_symbol == self.vt_symbols[1]:
        self.future_last_price = tick.last_price
        return

    diff = self.target - self.get_pos(self.vt_symbols[1])
    self.write_log(f"taget:{self.target}, diff:{diff} , active:{self.active}")
    if self.trading:
        if not self.active:
            if diff > 0:
                for _ in range(int(diff)):
                    self.buy(self.vt_symbols[1],self.future_last_price * 1.01, 1)
                    time.sleep(0.08)
                self.active += 1
            elif diff < 0:

                for _ in range(int(abs(diff))):
                    self.sell(self.vt_symbols[1],self.future_last_price * 0.99, 1)
                    time.sleep(0.08)
                self.active += 1

`

在组合策略的实盘中, on_tick通过get_pos 计算仓位差 diff 来进行下单。 然而因为劵商gateway的成交回调没那么快,导致到下一个tick的时候 get_pos并没来得及更新,会重复下单。
我的解决方法是加入 self.active开关,由于我自己的策略两分钟能不会多次下单。 所以在 on bars里面 继续个给self.active +=1 直到等于2的时候就又继续等于0

水平有限,就这么解决了。不知道各位大神有没有更好的办法。