Master this versatile volatility indicator in TradingView's Pinescript that quantifies market uncertainty and identifies potential turning points based on price range expansion and contraction.
Chaikin Volatility (CV), developed by Marc Chaikin (creator of the Chaikin Money Flow and Chaikin Oscillator), is a technical indicator that measures volatility by quantifying the spread between the high and low prices over a specific period. It uses an Exponential Moving Average (EMA) of the difference between the highest and lowest prices over a given lookback period, and then calculates the percentage change of this EMA from a prior period.
The primary use of Chaikin Volatility is to indicate whether the market is becoming more volatile (expanding ranges) or less volatile (contracting ranges). High CV values suggest increasing volatility, while low CV values suggest decreasing volatility. It can help traders anticipate potential breakouts or periods of consolidation, as well as confirm the strength of current trends.
In Pinescript, Chaikin Volatility offers a unique perspective on market uncertainty, complementing directional indicators by providing context on price action intensity.
The calculation of Chaikin Volatility involves a few steps:
//@version=5
indicator("My Chaikin Volatility", overlay=false) // overlay=false to plot in a separate pane
// Inputs for Chaikin Volatility parameters
emaLength = input.int(10, title="EMA Length (HL Range)", minval=1)
rocLength = input.int(10, title="ROC Length (Volatility Change)", minval=1)
// Calculate Chaikin Volatility using the built-in function
// ta.cvol takes the EMA length and ROC length
cvValue = ta.cvol(emaLength, rocLength)
// Plot the Chaikin Volatility line
plot(cvValue, title="Chaikin Volatility", color=color.new(color.blue, 0), linewidth=2)
// Plot the Zero Line (can be used as a reference)
hline(0, "Zero Line", color.gray, linestyle=hline.style_dotted)
// Optional: Add reference levels for visual clarity, usually around +10% and -10% for typical assets
hline(10, "Upper Ref (+10%)", color=color.new(color.red, 0), linestyle=hline.style_dashed)
hline(-10, "Lower Ref (-10%)", color=color.new(color.green, 0), linestyle=hline.style_dashed)
A rising Chaikin Volatility line suggests increasing volatility. A falling line suggests decreasing volatility. Positive values mean current volatility is higher than `rocLength` periods ago; negative means lower.
A surge in Chaikin Volatility from relatively low levels often signals that price is about to break out of a consolidation phase, initiating a strong directional move. This is a common strategy for trend-following setups.
//@version=5
strategy("Chaikin Volatility Breakout Strategy", overlay=true)
emaLength = input.int(10, title="EMA Length", minval=1)
rocLength = input.int(10, title="ROC Length", minval=1)
volatilityThreshold = input.float(15.0, title="Volatility Surge Threshold (%)", minval=5.0, step=1.0)
consolidationThreshold = input.float(-5.0, title="Consolidation Threshold (%)", maxval=0.0, step=1.0)
cvValue = ta.cvol(emaLength, rocLength)
plot(cvValue, "Chaikin Volatility", color.blue, display=display.pane_only)
hline(0, "Zero Line", color.gray, linestyle=hline.style_dotted, display=display.pane_only)
hline(volatilityThreshold, "Surge Threshold", color.red, linestyle=hline.style_dashed, display=display.pane_only)
hline(consolidationThreshold, "Consolidation Threshold", color.green, linestyle=hline.style_dashed, display=display.pane_only)
// Detect periods of consolidation (low volatility)
isConsolidating = cvValue < consolidationThreshold
// Detect a volatility surge from consolidation
volatilitySurge = cvValue > volatilityThreshold and isConsolidating[1]
// Combine with a simple trend filter for direction on breakout (e.g., price crossing a short MA)
maLength = input.int(20, "Breakout MA Length", minval=1)
ma = ta.sma(close, maLength)
longBreakoutSignal = volatilitySurge and close > ma and close[1] <= ma[1]
shortBreakoutSignal = volatilitySurge and close < ma and close[1] >= ma[1]
if (longBreakoutSignal)
strategy.entry("Long Breakout", strategy.long)
if (shortBreakoutSignal)
strategy.entry("Short Breakout", strategy.short)
// Example exit: close on opposite MA cross or fixed stop/target
strategy.close("Long Breakout", when=close < ma)
strategy.close("Short Breakout", when=close > ma)
A falling Chaikin Volatility from high levels suggests that the current trend is losing momentum and volatility is contracting. This can precede a trend reversal or a deep correction.
//@version=5
indicator("Chaikin Volatility Trend Exhaustion", overlay=true)
emaLength = input.int(10, title="EMA Length", minval=1)
rocLength = input.int(10, title="ROC Length", minval=1)
highVolThreshold = input.float(15.0, title="High Volatility Threshold (%)", minval=5.0, step=1.0)
declineThreshold = input.float(-5.0, title="Volatility Decline Threshold (%)", maxval=0.0, step=1.0) // How much it needs to decline
cvValue = ta.cvol(emaLength, rocLength)
plot(cvValue, "Chaikin Volatility", color.blue)
hline(0, "Zero Line", color.gray, linestyle=hline.style_dotted)
hline(highVolThreshold, "High Vol Threshold", color.red, linestyle=hline.style_dashed)
hline(declineThreshold, "Decline Threshold", color.green, linestyle=hline.style_dashed)
// Detect if volatility was high and is now declining
isVolatilityDeclining = cvValue < cvValue[1] and cvValue < declineThreshold and cvValue[rocLength] > highVolThreshold
plotshape(isVolatilityDeclining, title="Trend Exhaustion Warning", location=location.abovebar, color=color.new(color.maroon, 0), style=shape.diamond, size=size.small)
alertcondition(isVolatilityDeclining, "CV Trend Exhaustion", "Chaikin Volatility indicating potential trend exhaustion.")
Divergence between price and Chaikin Volatility can be a powerful signal of an impending trend change. This suggests that the price movement is not being backed by corresponding volatility, implying weakness in the trend.
//@version=5
indicator("Chaikin Volatility Divergence", overlay=true)
emaLength = input.int(10, title="EMA Length", minval=1)
rocLength = input.int(10, title="ROC Length", minval=1)
cvValue = ta.cvol(emaLength, rocLength)
plot(cvValue, "Chaikin Volatility", color.blue)
hline(0, "Zero Line", color.gray, linestyle=hline.style_dotted)
// Simple divergence detection (conceptual, robust detection requires advanced pivot logic)
// This is a simplified example focusing on price vs CV divergence.
// Bullish Divergence (Price lower low, CV higher low)
bullishDivergence = close[2] > close[1] and close[1] > close and cvValue[2] < cvValue[1] and cvValue[1] < cvValue
// Bearish Divergence (Price higher high, CV lower high)
bearishDivergence = close[2] < close[1] and close[1] < close and cvValue[2] > cvValue[1] and cvValue[1] > cvValue
plotshape(bullishDivergence, title="Bullish Divergence", location=location.belowbar, color=color.new(color.green, 0), style=shape.triangleup, size=size.small)
plotshape(bearishDivergence, title="Bearish Divergence", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.small)
alertcondition(bullishDivergence, "Bullish CV Divergence", "Potential bullish reversal based on Chaikin Volatility divergence.")
alertcondition(bearishDivergence, "Bearish CV Divergence", "Potential bearish reversal based on Chaikin Volatility divergence.")
To get the most from Chaikin Volatility in Pinescript:
Markets tend to cycle between periods of low volatility (consolidation) and high volatility (trending). Chaikin Volatility helps you identify these shifts, enabling you to adapt your trading style accordingly.
Chaikin Volatility is an insightful technical indicator available in Pinescript for TradingView that offers a unique way to measure market volatility and anticipate shifts in price behavior. By quantifying the spread between high and low prices, it helps traders identify periods of consolidation preceding strong breakouts, as well as potential trend exhaustion. While it does not provide directional signals, its ability to reveal the intensity of market participation is invaluable. By understanding its calculation, thoughtfully tuning its parameters, and integrating it strategically with directional indicators and robust price action analysis, you can leverage Chaikin Volatility to enhance your trading decisions and gain a clearer understanding of the market's underlying energy.
Get a high-performance Pinescript analysis tool for actionable market insights, designed for traders on the move.
This strategy runs in live mode on TradingView, helping you identify potential opportunities.
Get Pinescript Strategy