Debated1 min read
◆ The PatternA trailing stop that speeds up as the trend runs on, patient early and tighter as the move matures
The Parabolic Stop and Reverse — Wilder's trend-following trailing stop system.
SAR = Prior SAR + AF × (EP − Prior SAR)
AF starts at 0.02, increments by 0.02 each new EP, max 0.20
EP = Extreme Point (highest high or lowest low in current trend)
AF starts at 0.02, increments by 0.02 each new EP, max 0.20
EP = Extreme Point (highest high or lowest low in current trend)
Visual: Dots below price = uptrend. Dots above = downtrend. When price touches the SAR dot, flip direction.
Best for: Trending markets. In sideways markets, SAR generates frequent whipsaws.
Best for: Trending markets. In sideways markets, SAR generates frequent whipsaws.
Worked example
The acceleration factor starts at 0.02 and rises by 0.02 with each new high, up to 0.20. During the rally the SAR climbs from 99 to 102.56 by day 9. On day 10 the low of 102 breaks below it: the position flips short and the SAR jumps to the rally’s extreme, 110, then trails down to 108.02 by day 15.
The example data: 15 days, used in every indicator here
| Day | High | Low | Close | Volume |
|---|---|---|---|---|
| 1 | 101 | 99 | 100 | 50,000 |
| 2 | 103 | 100 | 102 | 62,000 |
| 3 | 103 | 100 | 101 | 48,000 |
| 4 | 105 | 101 | 104 | 70,000 |
| 5 | 108 | 104 | 107 | 85,000 |
| 6 | 108 | 105 | 106 | 60,000 |
| 7 | 110 | 106 | 109 | 90,000 |
| 8 | 110 | 107 | 108 | 72,000 |
| 9 | 108 | 104 | 105 | 80,000 |
| 10 | 105 | 102 | 103 | 66,000 |
| 11 | 105 | 102 | 104 | 55,000 |
| 12 | 104 | 101 | 102 | 75,000 |
| 13 | 102 | 98 | 99 | 95,000 |
| 14 | 102 | 99 | 101 | 64,000 |
| 15 | 105 | 101 | 104 | 71,000 |
Where it misleads
- It is always in the market, long or short, so in a range it flips back and forth and loses on each flip.
- Late in a long trend the acceleration factor is at its cap and the stop hugs the price; an ordinary pullback stops you out.
- At a flip the stop jumps to the last extreme, which can be far from the price just after a reversal.
In code
af0, step, af_max = 0.02, 0.02, 0.20
high, low = df['high'].values, df['low'].values
sar = np.zeros(len(df)); up = True; af = af0
ep, sar[0] = high[0], low[0]
for i in range(1, len(df)):
sar[i] = sar[i-1] + af * (ep - sar[i-1])
if up:
sar[i] = min(sar[i], low[i-1], low[max(i-2, 0)]) # never above the last two lows
if low[i] < sar[i]: # stop hit: flip short
up, sar[i], ep, af = False, ep, low[i], af0
elif high[i] > ep:
ep, af = high[i], min(af + step, af_max)
else:
sar[i] = max(sar[i], high[i-1], high[max(i-2, 0)])
if high[i] > sar[i]: # stop hit: flip long
up, sar[i], ep, af = True, ep, high[i], af0
elif low[i] < ep:
ep, af = low[i], min(af + step, af_max)
df['sar'] = sarAssumes import numpy as np, import pandas as pd, and a DataFrame df with columns high, low, close and volume — the 15 days above.
Sources
- New Concepts in Technical Trading Systems, J. W. Wilder, Trend Research, 1978
- Technical Analysis from A to Z (2nd ed.), S. B. Achelis, McGraw-Hill, 2000
- C.-H. Park & S. H. Irwin, “What Do We Know About the Profitability of Technical Analysis?”, Journal of Economic Surveys 21(4), 2007 — a review of the evidence across studies
Last reviewed October 2026 · How this site checks its content · Report a mistake
Pattern bridge: SAR’s acceleration factor increases with each new extreme — the same momentum accumulation used in gradient descent.
Linked from 1