我的策略中定义了这样的止盈止损函数
` def my_stop_loss_take_profit(self,tick:TickData,stop_loss_price:float,take_profit_price:float,tick_value:float) -> None:
mul_factor = 10 # 放大倍数,保证成交
if self.pos>0:
# 持多头
if tick.bid_price_1 <= stop_loss_price:
# 止损,多一个tick。这里还要考虑是不是跌停?
self.sell(tick.bid_price_1-mul_factor*tick_value,abs(self.pos),True)
print(f"持多仓,止损,执行价={tick.bid_price_1-mul_factor*tick_value:.2f}")
self.already_stop = True
elif tick.bid_price_1 >= take_profit_price:
# 止盈
self.sell(tick.bid_price_1-mul_factor*tick_value,abs(self.pos),True)
print(f"持多仓,止盈,执行价={tick.bid_price_1-mul_factor*tick_value:.2f}")
self.already_stop = True
elif self.pos<0:
# 持空头
if tick.ask_price_1 >= stop_loss_price:
# 止损
self.cover(tick.ask_price_1+mul_factor*tick_value,abs(self.pos),True)
print(f"持空仓,止损,执行价={tick.ask_price_1+mul_factor*tick_value:.2f}")
self.already_stop = True
elif tick.ask_price_1 <= take_profit_price:
# 止盈
self.cover(tick.ask_price_1+mul_factor*tick_value,abs(self.pos),True)
print(f"持空仓,止盈,执行价={tick.ask_price_1+mul_factor*tick_value:.2f}")
self.already_stop = True
# self.trade_records.append((tick.datetime, tick.ask_price_1+tick_value, 'sell', 'close(空头止盈)',self.pos))
`
在回测中,我在on_tick下调用它:
def on_tick(self, tick: TickData) -> None:
"""
Callback of new tick data update.
"""
# self.bg_1day.update_tick(tick)
# self.bg_3min.update_tick(tick)
# self.bg_5min.update_tick(tick)
self.bg.update_tick(tick)
if self.pos and not self.already_stop:
self.my_stop_loss_take_profit(tick,self.stop_loss_price,self.take_profit_price,self.tick_value)
当我查看我的策略运行结果时,发现尽管在我止盈止损命令发出后on_trade被调用了,但是我的self.pos一直没有归0。
on_trade被调用应该代表我的止盈止损单完成吧,为什么self.pos不会自动归0呢?