`
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
水平有限,就这么解决了。不知道各位大神有没有更好的办法。