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

Pine Editor中基于ATR设置固定止损的问题求助

问题排查与解决方案

你的核心问题是止损值没有在开仓时固定,而是随每根新K线重新计算,原因是stopLoss变量仅在longEntry触发的K线计算,但strategy.exit的参数会被后续K线的动态值覆盖——你没有把开仓瞬间的止损值持久化存储下来。

问题分析

在Pine Script中,strategy.exit如果放在if longEntry块内调用,后续K线运行时该块不会再执行,但你直接使用的ta.lowest(low,1)-ta.atr(1)[1]是动态表达式,每根K线更新时都会重新计算,导致止损值持续变动。必须把开仓时的止损值保存为固定值,后续不再修改。

修复代码

// 声明持久化变量存储止损值,仅初始化一次
var float longStopLoss = na

if longEntry
    strategy.entry('Buy', strategy.long)
    // 仅在开仓时计算并赋值止损值
    longStopLoss := ta.lowest(low, 1) - ta.atr(1)[1]

// 全局调用strategy.exit,使用持久化的止损值
strategy.exit('Stop Loss', 'Buy', stop=longStopLoss, when=exitRule)

关键改动说明

  • 使用var float声明变量:var关键字让变量仅在脚本初始化时创建一次,后续只有主动赋值才会改变,确保止损值固定为开仓时的计算结果。
  • 把strategy.exit移出if longEntry块:全局调用可让脚本在每根K线都检查止损和exitRule条件,同时止损值是之前存储的固定值,不会随新K线变动。
  • 合并退出条件:strategy.exit本身支持when参数,无需单独调用strategy.close,直接传入exitRule即可统一处理止损和主动退出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:51:55