Chaikin Volatility

The rate of change of the high-low range over time. Detects volatility expansion and contraction directly — useful as a regime indicator.

Updated 2026-05-24
7 min read
intermediate

Measures the rate of change of the smoothed high-low range. Unlike ATR, which gives an absolute volatility reading, Chaikin Volatility gives a percentage change — telling you whether volatility is expanding or contracting, and how fast.

Placeholder · Video / Clip

Chaikin Volatility on MES daily — expansion and contraction

Author hint: MES daily, dark theme, ~100-bar window. Chaikin Volatility(10, 10) in a sub-panel oscillating around zero. Show a stretch with a sharp positive spike (volatility expanding into a news event) followed by a negative reading (post-event contraction). ≤ 10 seconds, no audio. Save to /public/images/guide/indicators/chaikin-volatility/chart.mp4.

What it measures

  • Rate of volatility change. Percentage change in the smoothed high-low range over the lookback. Positive = volatility expanding; negative = contracting.
  • Regime transitions. Sharp positive readings often coincide with breakouts; sharp negative readings with consolidation.
  • Not absolute volatility. Chaikin Volatility says nothing about whether current volatility is high or low — only whether it's increasing or decreasing. Pair with ATR for the absolute level.

Formula

How AlgoLift computes it
HLDiff[t] = High[t] − Low[t]
Smoothed[t] = EMA(HLDiff, ema_period)
ChaikinVolatility[t] = (Smoothed[t] − Smoothed[t − roc_period]) / Smoothed[t − roc_period] × 100

A two-step process: first smooth the high-low range with an EMA, then compute the percentage change of the smoothed value over roc_period bars.

The result is a percentage. A reading of +30 means the smoothed range is 30% larger than it was 10 bars ago. A reading of −20 means it's 20% smaller.

Developed by Marc Chaikin.

Inputs in AlgoLift

SettingDefaultRangeNotes
EMA Period101–200Smoothing for the high-low range.
ROC Period101–200Lookback for the percentage change computation.

Recommended settings

  • (10, 10) — default: Chaikin's original. Works on daily and intraday alike.
  • (5, 5): Faster — more sensitive to short-term volatility changes.
  • (20, 20): Slower — for medium-term regime classification.

The two periods are typically kept similar — diverging them changes the indicator's character.

Outputs in AlgoLift

HandleTypePlottedNotes
VolatilityNumericAlwaysThe Chaikin Volatility percentage. Can be positive or negative.
Avg. RangeNumericOn selectThe EMA of high-low difference. A standalone absolute-volatility measure.
SlopeNumericOn selectRate of change of the volatility value. Useful for spotting acceleration.
Placeholder · Screenshot

Chaikin Volatility node — default state

Author hint: The Chaikin Volatility node on a fresh canvas with default settings (10, 10). All three output handles labeled. Dark theme. Tight crop. Save to /public/images/guide/indicators/chaikin-volatility/node.png.

How to read it

  • Reading > +30: Volatility expanding strongly — often coincides with breakouts, news events, or trend acceleration.
  • Reading < −30: Volatility contracting strongly — consolidation, calming after a move.
  • Reading near 0: Volatility is unchanged from the lookback period — stable regime.
  • Slope rising: Volatility expansion accelerating.
  • Slope falling from a high reading: The expansion phase is exhausting.

The interpretation is purely about change — high Chaikin readings during low absolute volatility (early in a breakout) mean very different things from high readings during already-high volatility (continuing acceleration).

Key Takeaway

Chaikin Volatility answers a specific question: "is volatility increasing or decreasing right now?" It doesn't answer "is volatility high or low" — that's ATR's job. The two indicators together give a complete volatility picture: ATR for the level, Chaikin Volatility for the direction.

Best in / worst in

Best in regime-transition detection — identifying when markets shift from quiet to active or vice versa. Useful as a strategy-arming flag rather than a primary trade trigger.

Worst in strategies that need direction signals (Chaikin Volatility is direction-agnostic — it spikes positively during both bullish and bearish volatility expansions). Also weak as a standalone primary signal — the rate-of-change reading needs context.

Three setups

1. Volatility expansion entry filter

Allow trades only when volatility is meaningfully expanding.

  • Long: MACD crossover bullish AND Chaikin Volatility > +15 (expansion confirmed).
  • Short: MACD crossover bearish AND Chaikin Volatility > +15 (any expansion direction works — volatility doesn't care).

The filter ensures the breakout signal happens during real activity, not during dead-tape moments that produce fakeouts.

Placeholder · Screenshot

MACD entry gated by Chaikin Volatility expansion

Author hint: Node graph showing a MACD crossover signal AND-gated with Chaikin Volatility > 15, into an Entry node. Save to /public/images/guide/indicators/chaikin-volatility/setup-01.png.

2. Compression-then-release pattern

Detect when volatility has been contracting and is now turning to expand.

  • Setup: Chaikin Volatility was negative for at least 10 consecutive bars (compression).
  • Trigger: Chaikin Volatility crosses above 0 AND slope > 0 (expansion beginning).
  • Action: Arm a directional system for the next 10 bars — the compression-release often produces a clean breakout.

Use a Set User Variable flag to track the armed state.

3. Position-sizing modulator

Reduce position size when volatility is expanding sharply (uncertainty).

  • Size formula: base_size × max(0.5, 1 − Chaikin_Volatility / 100).
  • Result: Reading of +50 → 0.5× base size (cautious during volatile expansion). Reading of −20 → 1.2× base size (slightly larger during quiet conditions).

Combined with fixed-fractional risk math, this scales exposure inversely to volatility-of-volatility.

Advanced patterns in AlgoLift

Chaikin Volatility for regime classification. Three-zone regime:

  • Expansion regime: Chaikin > +15 for several bars → run trend-following strategies.
  • Contraction regime: Chaikin < −15 for several bars → run mean-reversion strategies.
  • Transition: Between −15 and +15 → pause both, or run only most conservative setups.

Wire via Conditional Flow to switch strategy logic based on regime.

Chaikin slope as a scale-out timer. When the Chaikin Volatility slope starts falling (expansion is exhausting), take partial profits via Set Target Profit with fractional position size. The volatility-of-volatility turn often precedes the directional turn by 1-3 bars.

Combined with ATR for complete volatility picture. Chaikin Volatility says "is it changing" — ATR says "what's the absolute level." Build a regime classifier that uses both:

  • Quiet & calming: Low ATR + negative Chaikin → range strategies, tight stops.
  • Loud & expanding: High ATR + positive Chaikin → trend strategies, wide stops.
  • Quiet & expanding: Low ATR + positive Chaikin → early breakout signal.
  • Loud & contracting: High ATR + negative Chaikin → trend exhausting.

Common mistakes

  • Reading it as absolute volatility. Chaikin Volatility = 50 means a 50% change — the absolute volatility level could still be anything. Always cross-reference with ATR.
  • Trading direction off the reading. Positive Chaikin doesn't mean bullish — it means more volatile, which can be bullish OR bearish. Combine with a direction indicator.
  • Tuning the two periods independently. The 10/10 default keeps the indicator coherent. Asymmetric periods (e.g., 5/20) make the interpretation muddier without obvious benefit.
Common Misconception
Myth
Chaikin Volatility is just an alternative to ATR.
Reality
They measure different things. ATR is volatility *level*. Chaikin Volatility is volatility *change*. The same market can have high ATR with low Chaikin (steady high volatility) or low ATR with high Chaikin (quiet market beginning to expand). Use both — they're complementary, not interchangeable.