Parkinson Volatility -- Parkinson Historical Volatility Estimator
Contents
Overview
Parkinson Volatility is a historical volatility estimator that uses only the high and low prices of each candle. It was developed by physicist Michael Parkinson in 1980 as a more efficient alternative to the traditional close-to-close volatility calculation.
The formula is:
Parkinson = sqrt( (1 / (4 * N * ln(2))) * sum( ln(H_i / L_i) )^2 )
Where H_i and L_i are the high and low prices for each candle, and N is the lookback period. The result is an annualized volatility estimate.
The key insight: Parkinson volatility is approximately 5x more efficient than close-to-close volatility. "Efficient" here means it extracts more information from the same amount of data. Consider a candle with a huge wick -- price spiked up and came back down, closing near its open. A close-to-close volatility estimator sees almost no movement. Parkinson catches the full intraday range, revealing the true volatility that close-only methods miss entirely. This makes it exceptionally useful for detecting volatility squeezes and expansions in cryptocurrency markets where wicks are common.
Format
parkinson_{period}
The period defines how many candles the estimator averages over.
| Example | Period | Use Case |
|---|---|---|
parkinson_10 | 10 | Short-term -- reactive to recent volatility shifts |
parkinson_20 | 20 | Standard -- good balance of smoothness and responsiveness |
parkinson_50 | 50 | Long-term -- captures the broader volatility regime |
Period range: 5 to 500.
Value range: 0 to infinity (annualized volatility, always positive). Typical crypto range: 0.005 to 0.10.
Understanding Parkinson Values
Parkinson values are annualized volatility estimates expressed as decimals. They are not normalized to a fixed scale like RSI. The values depend on the asset, timeframe, and current market conditions.
| Parkinson Range | Interpretation |
|---|---|
| Below 0.01 | Ultra-low volatility -- the market is barely moving. A squeeze is in effect. Breakout potential is high. |
| 0.01 -- 0.03 | Low volatility -- calm market conditions. Good environment for squeeze-based strategies. |
| 0.03 -- 0.06 | Moderate volatility -- normal trading conditions for most crypto pairs. |
| 0.06 -- 0.10 | High volatility -- the market is making large intraday moves. Elevated risk and reward. |
| Above 0.10 | Extreme volatility -- crisis-level moves. Caution advised for new entries. |
The ranges above are general guidelines for major crypto pairs on hourly timeframes. Smaller-cap altcoins will typically show higher Parkinson values even in calm markets. Always calibrate thresholds through backtesting on your specific trading pair and timeframe.
Understanding Operators with Parkinson
Each operator behaves differently with Parkinson volatility. Because Parkinson is a filter indicator (it describes market conditions, not trading direction), it is almost always used in combination with directional triggers.
< (Less Than) -- State-Based
What it does: The trigger is true on every candle where Parkinson volatility is below the threshold.
On the chart: Volatility is compressed. Candle ranges are small and consistent. The market is in a squeeze state, which often precedes explosive breakouts.
[[actions.triggers]]
indicator = "parkinson_20"
operator = "<"
target = "0.02"
timeframe = "1h"
Typical use: Detect volatility squeezes. When Parkinson drops to unusually low levels, the market is coiling. Combine with a directional trigger (RSI dip, EMA cross, Bollinger breakout) to enter at the moment the squeeze resolves.
> (Greater Than) -- State-Based
What it does: The trigger is true on every candle where Parkinson volatility is above the threshold.
On the chart: Volatility is elevated. Candles have large ranges with significant wicks. The market is making big moves.
[[actions.triggers]]
indicator = "parkinson_20"
operator = ">"
target = "0.07"
timeframe = "1h"
Typical use: High-volatility filter. Use > to either (1) avoid entering new positions during chaotic markets, or (2) only trade when volatility is high enough for profitable moves. The interpretation depends on your strategy design.
cross_below -- Event-Based
What it does: Fires once, at the exact candle where Parkinson transitions from above the threshold to below it. The previous candle had Parkinson >= the target, and the current candle has Parkinson < the target.
[[actions.triggers]]
indicator = "parkinson_20"
operator = "cross_below"
target = "0.03"
timeframe = "1h"
Typical use: Detect the moment the market enters a squeeze. Volatility has just dropped below your calm-market threshold. This signals the beginning of a compression phase -- start watching for directional breakout triggers.
cross_above -- Event-Based
What it does: Fires once, at the exact candle where Parkinson transitions from below the threshold to above it. The previous candle had Parkinson <= the target, and the current candle has Parkinson > the target.
[[actions.triggers]]
indicator = "parkinson_20"
operator = "cross_above"
target = "0.05"
timeframe = "1h"
Typical use: Detect the moment volatility expands. The market was quiet and has just started making larger moves. This often marks the beginning of a trending phase -- combine with a momentum indicator to determine direction.
= (Equal) -- Not Recommended for Parkinson
Why: Parkinson produces floating-point values calculated to many decimal places. Exact equality will almost never be true. Use < or > instead.
- Use
<to detect volatility squeezes -- the most common Parkinson operator. Low Parkinson = calm market = breakout potential. - Use
>to filter out chaotic markets or to require sufficient volatility for profitable trades. - Use
cross_below/cross_aboveto detect the exact moment a volatility regime changes.
TOML Examples
Low Volatility Squeeze with Bullish RSI
When Parkinson volatility is ultra-low (squeeze) and RSI signals oversold conditions, enter long. The logic: a quiet market with a dip often precedes a strong bounce.
[[actions]]
type = "open_long"
amount = "100 USDC"
[[actions.triggers]]
indicator = "parkinson_20"
operator = "<"
target = "0.02"
timeframe = "1h"
[[actions.triggers]]
indicator = "rsi_14"
operator = "<"
target = "35"
timeframe = "1h"
High Volatility Filter -- Avoid Entry
Use Parkinson as a safety gate. Only enter when volatility is not extreme. This protects against buying into violent, unpredictable markets.
[[actions]]
type = "open_long"
amount = "100 USDC"
[[actions.triggers]]
indicator = "rsi_14"
operator = "cross_above"
target = "30"
timeframe = "1h"
[[actions.triggers]]
indicator = "parkinson_20"
operator = "<"
target = "0.08"
timeframe = "1h"
Squeeze Breakout with Trend Confirmation
Wait for the market to be in a volatility squeeze, then enter when price breaks above the upper Bollinger Band with a bullish daily trend.
[[actions]]
type = "open_long"
amount = "100 USDC"
[[actions.triggers]]
indicator = "parkinson_20"
operator = "<"
target = "0.025"
timeframe = "1h"
[[actions.triggers]]
indicator = "price"
operator = ">"
target = "bb_upper"
timeframe = "1h"
[[actions.triggers]]
indicator = "sma_50"
operator = ">"
target = "sma_200"
timeframe = "1d"
Volatility Compression DCA
During ultra-calm markets, dollar-cost average into positions. When the squeeze resolves, you will have accumulated at compressed prices.
[[actions]]
type = "open_long"
amount = "50 USDC"
[[actions.triggers]]
indicator = "parkinson_50"
operator = "<"
target = "0.015"
timeframe = "4h"
max_count = 3
Tips
Parkinson uses the full high-low range of each candle, making it more sensitive to wick-heavy price action than ATR. In crypto markets where candles frequently have large wicks that close near the open, Parkinson reveals the true intraday volatility that ATR and close-to-close methods underestimate. If you see calm ATR but elevated Parkinson, the market is quietly volatile -- large moves are happening within candles but not persisting across them.
Parkinson values vary enormously between assets. BTC/USDC on the 1-hour chart might have a typical Parkinson of 0.03, while a small-cap altcoin might sit at 0.08 in the same conditions. Always backtest on your specific pair and timeframe to determine what constitutes "low" and "high" volatility. Never copy thresholds from one asset to another without recalibrating.
Parkinson uses only high and low prices. Garman-Klass adds open and close information. Yang-Zhang adds overnight drift. Using all three together gives you a comprehensive volatility profile. If all three estimators agree that volatility is low, you have high-confidence squeeze detection. If they diverge, the type of divergence reveals what kind of volatility the market is experiencing.
Parkinson volatility assumes that the underlying asset has zero drift (no trending behavior). In a strongly trending market, Parkinson can underestimate true volatility because the consistent directional movement is not fully captured by the high-low range alone. For trending markets, consider using Yang-Zhang volatility which accounts for drift.