Chaikin's Volatility (CVI) measures the rate of change of the EMA-smoothed high-low trading range. Unlike traditional volatility measures that focus on returns, CVI directly tracks the expansion and contraction of price ranges over time. A positive CVI indicates expanding volatility (wider trading ranges), while a negative CVI signals contracting volatility (narrower ranges). This makes CVI particularly useful for identifying breakout conditions and market transitions.
## Historical Context
Marc Chaikin developed this indicator as part of his suite of technical analysis tools focused on price and volume dynamics. The indicator emerged from a practical observation: before significant price moves, the trading range often expands as buyers and sellers contest prices more aggressively.
Traditional volatility measures like standard deviation or ATR tell you the *level* of volatility, but CVI answers a different question: is volatility *increasing* or *decreasing*? This directional information can be more actionable for traders timing entries and exits.
The indicator combines two smoothing mechanisms: EMA smoothing on the raw high-low range to reduce noise, followed by a Rate of Change (ROC) calculation to measure the trend in volatility. This two-stage approach filters out day-to-day noise while capturing meaningful shifts in market character.
## Architecture & Physics
### 1. Range Calculation
The daily trading range is the difference between high and low prices:
$$
R_t = H_t - L_t
$$
where:
- $H_t$ = high price at time $t$
- $L_t$ = low price at time $t$
- $R_t$ = range at time $t$
This captures the full extent of intraday price movement.
### 2. EMA Smoothing
The range is smoothed using an Exponential Moving Average:
Note: While many libraries include ATR or standard deviation-based volatility, Chaikin's specific ROC-of-EMA-range formulation is less common.
## Common Pitfalls
1.**Warmup period**: CVI requires $smoothLength + rocLength$ bars before producing meaningful results. With defaults (10,10), this means 20 bars. The `IsHot` property indicates when warmup is complete.
2.**Zero/near-zero old EMA**: If the historical EMA value is very small (near zero), the division can produce extreme or infinite values. The implementation guards against this with an epsilon threshold.
3.**Interpretation of magnitude**: CVI values are percentages, not absolute ranges. A CVI of +50 means volatility increased 50% compared to $rocLength$ bars ago, regardless of the actual range values.
4.**Not a directional indicator**: CVI measures volatility direction, not price direction. High CVI can precede moves in either direction.
5.**Parameter sensitivity**:
- Shorter $smoothLength$ = more responsive to range changes but noisier
- Shorter $rocLength$ = more volatile CVI readings
- Common combinations: (10,10), (14,10), (10,14)
6.**Requires OHLC data**: Unlike many indicators that work with closing prices only, CVI requires high and low prices. When using TValue input, the value is interpreted as a pre-calculated range.
7.**Negative ranges**: If TValue input has negative values (invalid for a range), the implementation substitutes the last valid value.
## Trading Applications
### Breakout Detection
High positive CVI values suggest expanding volatility, often preceding breakouts: