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

Pine Script策略开发:如何固定入场止损价而非逐Bar重算

Keltner通道反转策略:固定止损价的实现方法

你当前的问题在于StopLong会逐Bar重新计算,导致止损价不断变动。用var直接赋值报错是因为var变量仅初始化一次,若未开仓时就计算StopLong,会基于无效的Bar数据赋值,且后续无法随开仓动作更新正确的止损价。

正确的做法是用var定义一个用于存储止损价的变量,仅在开仓触发时计算并赋值,这样就能固定住开仓时的止损价位:

//@version=5
strategy("Keltner反转策略", overlay=true)

// 计算Keltner通道(示例参数,可自行调整)
length = 20
mult = 1.5
basis = ta.ema(close, length)
dev = mult * ta.atr(length)
UpperBand = basis + dev
LowerBand = basis - dev

// 定义固定止损变量,初始化为na
var float stopLongPrice = na

// 计算开仓时的止损价(仅在开仓条件触发时赋值)
if close < LowerBand
    // 按1.5:1风险回报比计算止损
    stopLongPrice := close - ((basis - close) * 0.66)
    strategy.entry("Long", strategy.long)

// 出场设置:固定止损 + 基准线追踪止盈
strategy.exit("Exit Long", "Long", stop=stopLongPrice, trail_price=basis, trail_offset=3)

关键说明:

  • var float stopLongPrice = na:初始化一个仅生效一次的浮点变量,初始值为na(无值),避免未开仓时产生无效数据。
  • 在开仓的if块内用:=给stopLongPrice赋值:只有当触发做多条件时,才会根据当前Bar的close和basis计算止损价并固定下来,后续Bar不会再修改这个值,直到下一次开仓。
  • 移除strategy.entry的stop参数:因为我们已经在strategy.exit里设置了固定止损,保留会导致逻辑冲突。

内容的提问来源于stack exchange,提问作者JJ and J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:27:34