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

Pinescript如何设置开仓即固定的止损值 不受后续EMA交叉信号影响

Pine Script策略开仓后固定止损解决方案

当前代码的问题出在三点:

  1. Stop变量每次触发EMA金叉都会更新为最新一次金叉对应的83根K线最低点,持仓期间也会自动刷新
  2. strategy.exit每根K线都会执行,默认会使用当前最新的Stop值,导致原有持仓的止损被修改
  3. 未限制加仓的情况下,重复金叉会触发多次开仓,进一步干扰止损计算

修改后的完整代码

//@version=4 
strategy("My strategy", overlay=true, pyramiding=0) // 新增pyramiding=0 禁止同一方向重复开仓

ema1 = ema(close, 40)
ema2 = ema(close, 70)
ema1Smooth = security(syminfo.tickerid, "60", ema1, barmerge.gaps_on, 
barmerge.lookahead_off)
ema2Smooth = security(syminfo.tickerid, "60", ema2, barmerge.gaps_on, 
barmerge.lookahead_off)

// 用var定义变量,值会持续保留不会每根K线重置
var float fixedStop = na
var float fixedProfit = na

// 仅在无持仓+出现金叉时更新止损止盈值
crossSignal = crossover(ema1Smooth, ema2Smooth)
if (crossSignal and strategy.position_size == 0)
    fixedStop := lowest(low, 83)
    fixedProfit := close * 1.003 // 开仓时按入场价计算固定止盈

strategy.entry("Buy", long=true, when=crossSignal)
strategy.exit("Buy", limit=fixedProfit, stop=fixedStop)

plot(ema1Smooth, "Fast", color.orange)
plot(ema2Smooth, "Slow", color.blue)
plot(fixedStop, "Stop", color.red)

核心修改说明

  • pyramiding=0:禁止同一方向重复开仓,避免新的金叉信号触发额外加仓,保证策略同一时间最多持有1手多单
  • var关键字修饰的变量:只有代码主动赋值时才会更新值,不会每根K线加载时自动重置,专门用来存储开仓时确定的固定止损止盈
  • 仅在无持仓且触发金叉的时机更新止损止盈:持仓期间即使出现新的金叉信号,也不会修改已经存好的止损值,保证原有持仓的止损固定不变

如果后续需要支持加仓逻辑,可以使用strategy.opentrades相关接口单独跟踪每笔开仓的止损,当前单仓位需求以上代码即可直接满足。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:24:04