Pine Script v4如何固定开仓时ATR值计算止损止盈不随K线更新
Pine Script v4 固定开仓时ATR计算止损止盈实现方案
核心逻辑:使用var关键字声明需要持久存储的止损、止盈变量,仅在新开仓触发的K线完成赋值,持仓阶段不再更新数值,平仓后重置变量供下次开仓使用。
修改后完整代码
//@version=4 strategy("固定ATR止盈止损策略", overlay=true) // 计算14周期ATR atr = atr(14) // 声明可持久存储的多单止损、止盈变量,无持仓时为na var float longStopPrice = na var float longTakeProfit = na // 替换为你自己的开仓触发条件 longOpenCondition = crossover(sma(close, 5), sma(close, 20)) if (longOpenCondition) strategy.entry("Long", strategy.long) // 仅在新开多仓的K线,用当时的ATR和开仓均价计算固定止损止盈 if (strategy.position_size[1] == 0 and strategy.position_size > 0) longStopPrice := strategy.position_avg_price - (atr * 1) longTakeProfit := strategy.position_avg_price + (atr * 1.5) // 持仓阶段触发止损/止盈执行平仓 if (strategy.position_size > 0) strategy.exit("LongExit", "Long", stop=longStopPrice, limit=longTakeProfit) // 平仓后重置变量,下次开仓重新计算 if (strategy.position_size == 0 and strategy.position_size[1] > 0) longStopPrice := na longTakeProfit := na // 可选:在图表上绘制止损止盈线 plot(strategy.position_size > 0 ? longStopPrice : na, color=color.red, style=plot.style_linebr, title="多单止损") plot(strategy.position_size > 0 ? longTakeProfit : na, color=color.green, style=plot.style_linebr, title="多单止盈")
注意事项
- 代码中的
longOpenCondition为示例开仓条件,需替换为你自身策略的实际开仓判断逻辑 - 如需支持空单,按照相同逻辑声明空单对应的止损、止盈
var变量,在新开空仓的判断节点完成赋值即可 - 计算时固定使用开仓时刻的
atr取值和strategy.position_avg_price,不要使用每根K线动态更新的close计算,避免点位随K线变动
内容的提问来源于stack exchange,提问作者tmajestic
相关产品推荐
相关产品推荐

