This separate single-target example retains the original Donchian, ATR stop and break-even workflow. It freezes ATR on the signal bar, rounds risk up to whole ticks, and submits the initial bracket with the entry. A close at or above 1R activates break-even for subsequent execution; the stop cannot revert on a later bar. The 1R trigger is a demonstration choice. An entry-price stop does not cover fees or guarantee an entry-price fill.
Original corrected example: signal-bar ATR, 2R target, optional close-confirmed break-evenpinescript
//@version=6
strategy("ATR stop and persistent break-even", overlay = true, initial_capital = 10000, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
channelLength = input.int(20, "Donchian length", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrMultiplier = input.float(1.5, "ATR multiplier", minval = 0.1)
rewardMultiple = input.int(2, "Target in R", minval = 2)
enableBreakEven = input.bool(true, "Enable break-even at a 1R close")
channelHigh = ta.highest(high, channelLength)[1]
atrValue = ta.atr(atrLength)
enterLong = ta.crossover(close, channelHigh)
var int tradeRiskTicks = na
var bool breakEvenActive = false
if strategy.position_size == 0
breakEvenActive := false
if enterLong and not na(atrValue)
tradeRiskTicks := math.max(1, int(math.ceil(atrValue * atrMultiplier / syminfo.mintick)))
strategy.entry("Long", strategy.long)
strategy.exit("Exit", "Long", loss = tradeRiskTicks, profit = tradeRiskTicks * rewardMultiple)
float activeStop = na
float targetPrice = na
if strategy.position_size > 0 and not na(tradeRiskTicks)
entryPrice = strategy.position_avg_price
riskDistance = tradeRiskTicks * syminfo.mintick
if enableBreakEven and close >= entryPrice + riskDistance
breakEvenActive := true
activeStop := breakEvenActive ? entryPrice : entryPrice - riskDistance
targetPrice := entryPrice + riskDistance * rewardMultiple
strategy.exit("Exit", "Long", stop = activeStop, limit = targetPrice)
plot(channelHigh, "Channel high", color = color.blue)
plot(activeStop, "Active stop", color = color.red, style = plot.style_linebr)
plot(targetPrice, "Target", color = color.green, style = plot.style_linebr)