You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用strategy.exit添加止损遇异常:无止损或超3000无效订单求助

问题分析与修复方案

你的代码核心问题是未利用持仓状态变量控制重复入场,导致每次条件满足时都会重复执行开仓和止损指令,进而生成大量无效订单;同时止损指令的重复调用也可能出现无法正确绑定持仓的情况。

核心问题点

  • long_active和short_active变量定义后未用于控制开仓条件,只要current>prev或current<prev的K线出现,就会反复触发开仓操作,同一方向多次开仓+重复挂止损,引发无效订单
  • strategy.exit在每次开仓时都调用,无持仓状态判断的情况下会重复生成止损单,甚至和旧持仓产生冲突

修复后的代码

var int long_active = 0
var int short_active = 0
// 示例:基于ATR设置止损,你可根据策略逻辑替换stop_loss的定义
stop_loss = strategy.position_avg_price - ta.atr(14) * 1.5

if(hour == 23)
    short_active := 0
    long_active := 0
    strategy.cancel_all()
    strategy.close_all()

// 做多条件:仅无多头持仓时开仓
if (current > prev and 2 < hour and hour < 23 and long_active == 0)
    // 平空仓(若存在)
    if (short_active == 1)
        strategy.cancel("short_exit")
        strategy.close("short")
        short_active := 0
    // 开多仓并绑定止损
    strategy.entry("long", strategy.long, comment="long")
    strategy.exit("long_exit", "long", stop = stop_loss)
    long_active := 1

// 做空条件:仅无空头持仓时开仓
if (current < prev and 2 < hour and hour < 23 and short_active == 0)
    // 平多仓(若存在)
    if (long_active == 1)
        strategy.cancel("long_exit")
        strategy.close("long")
        long_active := 0
    // 开空仓并绑定止损
    strategy.entry("short", strategy.short, comment="short")
    strategy.exit("short_exit", "short", stop = stop_loss)
    short_active := 1

关键修改说明

  • 用long_active == 0和short_active == 0限制同一方向仅开一次仓,避免重复触发开仓指令
  • 平反向仓位时增加状态判断,仅当反向持仓存在时才执行平仓和取消止损操作,减少无效指令
  • 开仓后立即更新对应持仓状态变量,确保不会重复开仓
  • 注意:stop_loss需根据你的策略逻辑正确定义,比如基于入场价的固定点数、ATR倍数等,避免因止损价格无效导致无法触发止损

内容的提问来源于stack exchange,提问作者emu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:09:16