Supertrend and Parabolic SAR are both stop-and-reverse trend followers, but they move for completely different reasons: Supertrend holds an ATR-scaled band that ratchets with volatility, while Parabolic SAR accelerates toward price on every bar via its EP × AF formula. This guide gives both formulas, validated Pine v6 for each, a comparison script that highlights the exact bars where their signals diverge, and an honest verdict: they are different tools, not a better/worse pair. Educational content only, not financial advice — neither indicator confers an edge, and trading carries a real risk of loss.
Supertrend and Parabolic SAR are both stop-and-reverse trend indicators — each draws a level on the opposite side of price and flips direction when price crosses it — but they compute that level in fundamentally different ways. Supertrend places a band a multiple of the Average True Range away from the bar's median price and holds it flat during pullbacks, so its distance from price is governed by volatility. Parabolic SAR starts wide and accelerates toward price every single bar via an acceleration factor, so its distance from price is governed by time and trend progress. Neither is objectively better; they answer different questions.
That structural difference drives everything you observe on a chart. Supertrend's band only ratchets in the trend direction and otherwise stays put, which makes it patient in pullbacks and comparatively slow to flip. PSAR's dot moves closer to price on every bar of a trend whether or not price is making progress, which makes it quick to bank a mature trend and quick to whipsaw in a stall. In a strong, extended move the two often agree for long stretches; around consolidations and trend endings they disagree in systematic, predictable ways — and those disagreement bars are exactly where the choice between them matters.
The lineage is worth knowing. Parabolic SAR is one of J. Welles Wilder's original systems from New Concepts in Technical Trading Systems (1978) — the same book that introduced ATR and RSI. Supertrend is a much later construction, popularised by Olivier Seban, and is essentially a disciplined packaging of Wilder's own ATR into a trailing band. So the honest framing is that both descend from the same 1978 toolbox; they just weight its parts differently. Nothing in this article is a claim that either one is profitable — they are descriptive mechanics, not an edge.
Supertrend starts from two provisional bands built off the bar's median price, hl2 = (high + low) / 2:
hl2 + factor × ATR(atrPeriod)hl2 − factor × ATR(atrPeriod)The defining step is the ratchet. In an uptrend, the active band is the lower one, and it is only allowed to move up: today's final lower band is the higher of today's provisional lower band and yesterday's final lower band (unless yesterday's close was already below it, which resets the band). The mirror rule applies to the upper band in downtrends. Direction flips when the close crosses the active band — close below the lower band flips to downtrend, close above the upper band flips to uptrend. This ratchet is why Supertrend draws those characteristic flat shelves under pullbacks instead of chasing price.
Pine v6 ships this as a built-in returning a tuple. Note the direction convention: direction < 0 means the Supertrend line is below price — an uptrend.
//@version=6
// Educational only — validate before trading; not financial advice.
indicator("Supertrend (built-in)", overlay = true)
factor = input.float(3.0, "Factor", minval = 0.1, step = 0.1)
atrPeriod = input.int(10, "ATR length", minval = 1)
[st, dir] = ta.supertrend(factor, atrPeriod)
isUp = dir < 0
plot(isUp ? st : na, "Up band", color = color.new(color.teal, 0), style = plot.style_linebr)
plot(isUp ? na : st, "Down band", color = color.new(color.red, 0), style = plot.style_linebr)
flipUp = isUp and not isUp[1]
plotshape(flipUp and barstate.isconfirmed, "Flip up", style = shape.triangleup, location = location.belowbar, color = color.teal, size = size.tiny)The two parameters pull in opposite directions: a larger factor or longer atrPeriod means fewer, later flips; smaller values mean faster, noisier ones. Because ATR sits inside the formula, the band automatically widens in volatile regimes — the property PSAR lacks entirely.
Wilder's Parabolic SAR is a recursion driven by two quantities: the extreme point (EP) — the highest high reached during the current uptrend (or lowest low in a downtrend) — and the acceleration factor (AF), which starts at 0.02, increases by 0.02 each time a new EP is set, and caps at 0.20 (the standard defaults). Each bar:
SAR(next) = SAR(current) + AF × (EP − SAR(current))
Read that formula closely and PSAR's personality falls out of it. The SAR always moves toward the extreme point by a fraction AF of the remaining gap — it can never move away from price. Early in a trend, AF is small and the dots crawl; every new high bumps AF, so a trending market makes the dots accelerate — the "parabolic" shape. Crucially, even when price goes sideways and no new EP is set, AF stays where it is and the SAR keeps closing the gap each bar. Sideways price plus an approaching stop guarantees a flip eventually — PSAR is structurally incapable of waiting indefinitely. Two housekeeping rules complete Wilder's spec: the SAR may never be placed inside the prior two bars' range, and on a flip it resets to the old trend's EP with AF back at its start value.
//@version=6
// Educational only — validate before trading; not financial advice.
indicator("Parabolic SAR (built-in)", overlay = true)
start = input.float(0.02, "AF start", step = 0.01, minval = 0.0)
inc = input.float(0.02, "AF increment", step = 0.01, minval = 0.0)
maxAf = input.float(0.2, "AF maximum", step = 0.01, minval = 0.01)
sar = ta.sar(start, inc, maxAf)
sarUp = close > sar
plot(sar, "PSAR", color = color.new(color.orange, 0), style = plot.style_cross)
flipUp = sarUp and not sarUp[1]
plotshape(flipUp and barstate.isconfirmed, "Flip up", style = shape.triangleup, location = location.belowbar, color = color.teal, size = size.tiny)Raising inc or maxAf makes the dots hug price sooner; lowering them slows the acceleration. But no parameter choice changes the core fact: PSAR's tightening is a function of elapsed bars and new extremes, not of volatility.
Because the two levels move for different reasons, you can predict the bars where they disagree.
Pullbacks inside a trend. Supertrend's ratchet holds the band flat through a pullback; as long as the close doesn't pierce it, no flip. PSAR has spent the whole trend accelerating toward price, so by the time a mature trend pulls back, the dots are close and a modest retracement tags them. Result: PSAR flips, Supertrend doesn't. This is the single most common divergence.
Sideways drift after a run. If price stalls, Supertrend's band freezes and can wait indefinitely. PSAR keeps closing the gap by AF × (EP − SAR) every bar and must eventually flip. In consolidations, PSAR generates alternating signals while Supertrend stays silent.
Volatility regime changes. A volatility expansion widens ATR, pushing new Supertrend bands further away; a quiet grind narrows them. PSAR is blind to range — a huge-range bar and a doji advance the SAR by the same rule. After a volatility spike, Supertrend gets more tolerant while PSAR does not.
This script paints every bar where they disagree:
//@version=6
// Educational only — validate before trading; not financial advice.
indicator("Supertrend vs PSAR divergence", overlay = true)
factor = input.float(3.0, "ST factor", minval = 0.1, step = 0.1)
atrPeriod = input.int(10, "ST ATR length", minval = 1)
[st, dir] = ta.supertrend(factor, atrPeriod)
sar = ta.sar(0.02, 0.02, 0.2)
stUp = dir < 0
sarUp = close > sar
plot(st, "Supertrend", color = stUp ? color.new(color.teal, 0) : color.new(color.red, 0))
plot(sar, "PSAR", color = color.new(color.orange, 0), style = plot.style_cross)
bgcolor(stUp != sarUp and barstate.isconfirmed ? color.new(color.yellow, 85) : na)Drop it on any chart and the highlighted stretches will cluster around pullbacks and consolidations — visual confirmation that the disagreements are structural, not random.
Neither. Or rather: the question is malformed, because "better" implies a shared job, and these tools do different jobs. Supertrend is a volatility-referenced trailing level — it asks "has price moved against the trend by more than current volatility justifies?" PSAR is a time-referenced trailing level — it asks "has the trend stopped making progress fast enough to keep outrunning an accelerating stop?" If your exit philosophy is "give the trade room proportional to how noisy the market is," Supertrend's construction matches it. If your philosophy is "a trend must keep performing or I leave," PSAR's construction matches that. Choosing between them is choosing an exit philosophy, not picking a winner.
Some honest cautions apply to both. Each is a lagging, trend-following device, and each whipsaws in ranges — PSAR by construction (it must flip in sideways markets), Supertrend merely often. Every parameter — factor, atrPeriod, start, inc, maxAf — is a degree of freedom you can overfit; a setting combination that looks superb on one symbol's history may simply have memorised that history's noise. If you compare them in a backtest, compare them under identical entry logic, across multiple instruments and periods, on out-of-sample data — and treat the result as a description of the past, not a forecast. TradingView's tester also fills stop-and-reverse exits at idealised prices; live spreads, slippage, and gaps will be less kind.
And verify the mechanics before trusting any output: confirm your flip signals are gated on confirmed bars, that a higher-timeframe version doesn't repaint via unshifted request.security(), and that short-side logic mirrors the long side. ForexCodes' validation tooling automates those checks. Nothing here is financial advice: neither indicator is an edge, no backtest of either is a promise, and trading with any stop-and-reverse system carries a real risk of loss.
Educational only — not financial advice. Trading involves substantial risk of loss.