Swolecharts
Live crypto data · 10 exchanges
Log inSign up

ATR, Bollinger Bands and volatility squeeze explained

Separate historical range, price position and volatility compression.

Last updated: 17 October 2026

True range and Wilder ATR(14)

Average true range (ATR), introduced by J. Welles Wilder in New Concepts in Technical Trading Systems (1978), measures historical price ranges. True range is TR = max(H − L, |H − prevC|, |L − prevC|), where H and L are the candle's high and low and prevC is the previous close. A gap can make true range larger than high minus low.

The ATR screener seeds Wilder ATR with the simple average of the first 14 true ranges, then uses ATR = (13 × prior ATR + TR) / 14. The first candle supplies only the previous close; gaps or invalid candles reset the calculation. Ranking requires 120 contiguous completed candles ending at the expected close, even though the seed needs only 15 candles. ATR is in the contract's price units. The displayed ATR / close (%) = 100 × ATR / close allows comparisons across prices; it is not annualized.

Synthetic three-candle example, not live data: candle A has high 101, low 99 and close 100; B has high 103, low 101 and close 102; C has high 104, low 100 and close 101. A supplies the previous close. B's TR is max(2, 3, 1) = 3; C's TR is max(4, 2, 2) = 4. Three candles cannot seed ATR(14). To demonstrate smoothing, instead take a separate synthetic sequence of 119 flat candles at 100 followed by a candle with high 103, low 100 and close 102. Its prior ATR is 0 and its TR is 3: ATR = 3 / 14 = 0.214286, or 0.210084% of the last close.

Bollinger position versus bandwidth

The Bollinger position screener uses a 20-period simple moving average of completed closes. Population standard deviation is σ = √(Σ(close − mean)² / 20); the bands are lower = mean − 2σ and upper = mean + 2σ. These are price levels, not return volatility. The timeframe selector changes the candle period, so 20 four-hour candles are not 20 days.

Position is %B = (close − lower) / (upper − lower), multiplied by 100 for this site's display. The lower band is 0%, the middle 50%, and the upper 100%; values outside this range are valid. Flat bands make %B unavailable. Bandwidth instead measures relative width: bandwidth = (upper − lower) / middle. The squeeze scanner compares bandwidth from 20 daily closes with its own available history. A high %B describes price near or above the upper band; it does not tell you whether the bands are narrow.

Synthetic bands, not live data: alternate closes 99 and 101 ten times, ending at 101. The mean is 100, population σ is 1, lower is 98 and upper is 102. Displayed %B is 75%, while bandwidth is 0.04 (4%). Position and compression answer different questions. A band touch alone is not a buy or sell signal.

Parkinson volatility and the 7d/30d squeeze

Parkinson's range estimate uses σ² = K × mean(ln(H/L)²), with K = 1 / (4 ln 2) and natural logarithms. This site averages hourly high-low observations and annualizes as σ = √(K × mean(ln(H/L)²) × 8760), using 8760 hours per year. The result is a fraction, multiplied by 100 for a percentage. It uses within-bar extremes rather than only closes. Under the estimator's continuous-price, zero-drift assumptions, ranges carry more information and can need fewer observations for comparable precision than close-to-close estimates. That efficiency is not guaranteed for real crypto markets.

The scanner requires 30 consecutive complete UTC days of hourly bars ending yesterday. Its 7d/30d ratio = 7-day Parkinson volatility / 30-day Parkinson volatility. Below 1 means the last week is calmer than the last month; rows rank by this ratio, lowest first. A low ratio describes compression, not a promise that a breakout is coming. If the long-window estimate is zero, the ratio is unavailable.

Synthetic hourly ranges, not live data: let every hourly high/low ratio be exp(0.01). Then mean(ln(H/L)²) = 0.0001 and annualized volatility is approximately 0.562094 (56.2094%). Identical ranges throughout 30 days give the same 7-day estimate and a ratio of 1.00.

A percentile is the percentage of that coin's available observations at or below the current value, including ties. The ratio percentile and the 20-day Bollinger bandwidth percentile each need at least 30 usable observations and use up to 365 daily observations. A 10th-percentile ratio means only about 10% of its observed ratios were as low or lower; it is not a 10% chance of a breakout. The two percentile histories can have different sample counts. Missing percentiles mean insufficient data, not zero compression.

Limits: ranges are not forecasts

ATR includes previous-close gaps; Parkinson's within-hour range estimate misses between-bar jumps. Neither is interchangeable with the standard deviation of returns on the realized volatility screener, or with forward-looking options implied volatility. Venue, contract, candle alignment, missing data and rounding matter. Completed candles avoid a moving current-bar input, but historical indicators still cannot establish future direction, timing or returns.

References for the indicator definitions, checked on 17 October 2026: Fidelity: ATR and Wilder's method · John Bollinger: Bollinger Band rules · Parkinson (1980): The Extreme Value Method. Not financial advice.

Volatility indicators FAQ

Does a squeeze predict direction?

No. A low 7d/30d ratio describes recent compression. It does not establish that a breakout will happen, when it will happen, or its direction.

ATR vs standard deviation?

ATR smooths true ranges, including gaps from the previous close, in price units. Bollinger Bands use the standard deviation of closes around their mean. ATR divided by close is a percentage range measure, not annualized return volatility.

Why do my Bollinger values differ from a charting platform?

This site uses 20 completed closes, a simple moving average and 2 population standard deviations (divide by 20). Sample standard deviation divides by 19. An open candle, different timeframe, venue, contract or price feed can also change the result.