【求助】关于期货频繁平仓失败的问题

Author: Lucas678, Created: 2020-01-11 21:54:28, Updated: 2020-01-12 13:15:54

模拟回测时平仓经常报ERR_INVALID_POSITION,请问是什么问题 下面是代码

# 下单交易
if mp > 0:  # 如果当前持有多单
    if price < long_stop_loss:  # 如果当前价格小于多头止损线
        exchange.SetDirection("closebuy")  # 设置交易方向和类型
        exchange.Sell(price - 1, mp)  # 平多单

elif mp < 0:  # 如果当前持有空单
    if price > short_stop_loss:  # 如果当前价格大于空头止损线
        exchange.SetDirection("closesell")  # 设置交易方向和类型
        exchange.Buy(price + 1, -mp)  # 平空单
elif mp == 0:  # 如果当前无持仓
    if price > last_high:  # 如果当前价格大于上一根k线最高价
        exchange.SetDirection("buy")  # 设置交易方向和类型
        exchange.Buy(price + 1, 1)  # 开多单
    elif price < last_low:  # 如果价格小于上一根k线最低价
        exchange.SetDirection("sell")  # 设置交易方向和类型
        exchange.Sell(price - 1, 1)  # 开空单
        
        
        
# 获取持仓
real_position = _C(exchange.GetPosition)  # 获取持仓数组
if len(real_position) > 0:  # 如果持仓数组长度大于0
    real_position = real_position[0]
    if real_position['ContractType'] == 'p2005':  # 如果持仓品种等于订阅品种
        if real_position['Type'] == 0 or real_position['Type'] == 2:  # 如果是多单
            mp = real_position['Amount']  # 赋值持仓为正数
        elif real_position['Type'] == 1 or real_position['Type'] == 3:
            mp = -real_position['Amount']  # 赋值持仓为负数
else:
    mp = 0  # 赋值持仓为0

更多内容