Pinescript如何设置开仓即固定的止损值 不受后续EMA交叉信号影响
Pine Script策略开仓后固定止损解决方案
当前代码的问题出在三点:
Stop变量每次触发EMA金叉都会更新为最新一次金叉对应的83根K线最低点,持仓期间也会自动刷新strategy.exit每根K线都会执行,默认会使用当前最新的Stop值,导致原有持仓的止损被修改- 未限制加仓的情况下,重复金叉会触发多次开仓,进一步干扰止损计算
修改后的完整代码
//@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
相关产品推荐
相关产品推荐

