策略代码中,设计了入场信号反向止损和移动止损两种止损方式,有时会遇到两种方式同时下单,回测时就会报错,然后策略停止运行,实盘或者模拟时,也会报错,但策略不会停止运行,要怎么解决?
cornerman 已回答的问题 2021年9月18日
1可以止损下单前判断下当前下单状态、如果有委托单未成交、可以撤单、然后对价止损
2把这两个止损方式打包成一个止损函数、就不存在冲突了
3更改两种止损方式的跳点、避开两种止损方式的重叠区
lcg_amber 发表新评论 2021年9月15日
非官方,交流,共同进步,如果多合约的话可以试试这种写法,我自己的异步代码可运行,你可以多加点判断条件啥的,把你的两种止损都加进去,我这里是对价买入,挂止盈价单,如果损失达到止损点,撤单(target_pos自动撤,不需要cancel)挂对价止损
stop_point = * profit_point = *
def get_price(direction): price = quote.last_price # 初始值 if position.pos == 0 and direction == "BUY": price = quote.ask_price1 elif position.pos == 0 and direction == "SELL": price = quote.bid_price1 elif position.pos > 0 and direction == "SELL" and ( position.position_price_long - quote.last_price) < stop_point * quote.price_tick: price = position.position_price_long + profit_point * quote.price_tick elif position.pos < 0 and direction == "BUY" and ( quote.last_price - position.position_price_short) < stop_point * quote.price_tick: price = position.position_price_short - profit_point * quote.price_tick elif position.pos > 0 and direction == "SELL" and ( position.position_price_long - quote.last_price) >= stop_point * quote.price_tick: price = quote.bid_price1 elif position.pos < 0 and direction == "BUY" and ( quote.last_price - position.position_price_short) >= stop_point * quote.price_tick: price = quote.ask_price1 return price target_pos = TargetPosTask(api, symbol, price=get_price)
cornerman 已回答的问题 2021年9月18日
请问判断下单状态的话用什么函数,get_order应该只能获取所有委托单或者特定单号的委托状态,不能获取特定品种的委托状态