2.48K 浏览
0

策略代码中,设计了入场信号反向止损和移动止损两种止损方式,有时会遇到两种方式同时下单,回测时就会报错,然后策略停止运行,实盘或者模拟时,也会报错,但策略不会停止运行,要怎么解决?

cornerman 已回答的问题 2021年9月18日
1

1可以止损下单前判断下当前下单状态、如果有委托单未成交、可以撤单、然后对价止损

2把这两个止损方式打包成一个止损函数、就不存在冲突了

3更改两种止损方式的跳点、避开两种止损方式的重叠区

lcg_amber 发表新评论 2021年9月15日

请问判断下单状态的话用什么函数,get_order应该只能获取所有委托单或者特定单号的委托状态,不能获取特定品种的委托状态

0

非官方,交流,共同进步,如果多合约的话可以试试这种写法,我自己的异步代码可运行,你可以多加点判断条件啥的,把你的两种止损都加进去,我这里是对价买入,挂止盈价单,如果损失达到止损点,撤单(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日