Parkinson Volatility estimates annualized volatility using the high-low range of each bar instead of close-to-close changes. It captures intraday price movement that close prices completely miss — making it statistically more efficient than standard Historical Volatility for the same number of data points.

Volatility
Category
Advanced
Difficulty
0% to 200%+ (annualized percentage)
Output Range
20
Default Period
None
Repaint Risk
Moderate — requires high and low prices for each bar
Data Need
VOLATILITY · CODE_HEAVY · DATA_INTENSIVE · LAGGING
Tags

Section 1: Core Mechanics

Michael Parkinson published this estimator in 1980 in a paper titled The Extreme Value Method for Estimating the Variance of the Rate of Return. The core observation: the range between a bar's high and low contains more information about the magnitude of price movement than simply comparing yesterday's close to today's close.

Formula

For each bar, compute the squared log of the high-low ratio. Then average over N bars and annualize:

Where:

  • = lookback period (default 20)
  • = log of the high-to-low ratio for bar
  • = the normalization constant derived from the statistical properties of a Brownian motion process
  • = annualization factor for trading days

The constant comes from the mathematical proof that the expected value of for a Brownian motion process equals .

Why It Is More Efficient

Consider a stock that opens at 100, rises to 110, falls back to 100, and closes at 100. The close-to-close return is 0% — Historical Volatility records no movement. But the high-low range of 10% clearly shows significant intraday activity. Parkinson captures this 10% range; standard HV records zero.

Theoretical efficiency advantage: Parkinson's estimator has approximately 1/4 to 1/5 the estimation variance of the close-based estimator. This means 5 days of Parkinson data provides equivalent statistical information to 25 days of close-to-close data.

Inputs

  • High: Bar high price
  • Low: Bar low price (High and Low only — close not required)
  • Period (N): Lookback window for averaging (default 20)

Parameters

Parameter Default Range Impact
Period (N) 20 5–60 Lower = reacts faster; Higher = smoother long-term estimate
Annual factor 252 252/365 Match to asset class (252 equities, 365 crypto)

Output

Annualized volatility percentage plotted as a single line on a sub-panel. Directly comparable to HV and IV values for the same time period.

Visual Behavior

  • Parkinson line runs smoother than HV line — it has lower sampling noise
  • During gap events, Parkinson understates volatility (misses the gap; only captures intraday range)
  • During high-activity sessions (large intraday swings), Parkinson reads higher than HV

Section 2: Interpretation & Signals

Parkinson vs. HV — When They Diverge

Parkinson Volatility vs. Historical Volatility (HV) — Same Asset

Scenario HV Reading Parkinson Reading Interpretation
Large overnight gap, quiet intraday High (gap captured) Low (gap missed) PV understates risk — use HV for gap-prone assets
Large intraday swings, same close Low (no net move) High (range captured) HV understates activity — PV is more accurate
Normal trending session Similar Similar Both converge — either is valid
Earnings day gap Spikes Moderate PV misses the gap — do not use PV alone around earnings

Volatility Regime with Parkinson

Use PV the same way you use HV — as a regime indicator:

  • PV at 3-month low → compression; breakout or trend expansion likely
  • PV rising rapidly → market becoming increasingly active; widen stops
  • PV well above its 90-day average → consider premium selling strategies (IV likely elevated too)
💡 TIP
Parkinson is ideal for forex and crypto markets where gaps are minimal or non-existent. Forex trades continuously Sunday through Friday — there are no daily gaps. Parkinson captures the full intraday range without any gap distortion. For these assets, Parkinson is more accurate than HV.
⚠️ WARNING
For equities with regular overnight gaps — especially around earnings, dividends, or major macro events — Parkinson systematically understates realized volatility. A stock that gaps up 8% at the open (contributing zero to Parkinson) but has a tight $0.50 intraday range will show very low PV despite a large one-day move. Always compare PV against HV for gap-prone instruments.

Section 3: Pass vs. Live — Real-Time Reliability

None — Parkinson uses closed bars only for the N-bar calculation
Repaint Risk
Same as HV — 20-bar lookback means ~10-bar effective lag
Lag
Updates once per bar close; no intrabar changes to the N-bar history
Confirmation Timing
Forex and crypto volatility measurement; comparison against HV to detect gap effects
Best Use
Equity assets with frequent large gaps; using intrabar high/low for live trading decisions
Avoid

On a live (unclosed) candle, the current bar's high and low are updating continuously. The N-bar Parkinson calculation uses only the prior N closed bars — so the running calculation is stable during the session. The output updates at bar close.


Section 4: Practical Use Cases

Setup: Parkinson Volatility on 15m chart as a session context filter Signal: PV(20) on 15m rising above its 5-day average → intraday volatility is elevated Action: Widen scalp stops from 1× to 1.5× ATR; reduce position size; expect wider spreads and faster moves Key rule: PV spike on intraday timeframes often precedes sustained directional movement — useful as a filter, not an entry signal

Real example: EUR/USD (forex, no daily gaps) in Q2 2023: Parkinson Volatility(20) on the daily chart fell to 4.8% annualized — a 3-year low. HV(20) was 5.1% (close to PV because there are no meaningful gaps in forex). The convergence of both volatility measures at multi-year lows preceded the 4.5% EUR/USD move in June–July 2023 that broke out of the 14-month range. The Parkinson signal was cleaner and had less noise than HV in this case.


Section 5: Pseudo Code

INPUT: high[], low[], period=20, annual_factor=252

PROCESS:
  Step 1: Validate inputs — high[i] must always be >= low[i]
            If high[i] < low[i]: flag data error, return NaN for that bar

  Step 2: Calculate squared log ratio for each bar
            log_hl[i] = ln(high[i] / low[i])
            sq_log_hl[i] = log_hl[i] ^ 2

  Step 3: For each bar i starting from index (period - 1):
            window_sum = sum(sq_log_hl[i-period+1 : i+1])
            parkinson_variance = window_sum / (4 * period * ln(2))
            pv[i] = sqrt(parkinson_variance) * sqrt(annual_factor) * 100

OUTPUT: pv[] — annualized Parkinson Volatility as percentage
EDGE CASES:
  - high[i] == low[i] (doji or halt): ln(1) = 0 — contributes zero to variance (valid, not an error)
  - high[i] / low[i] negative: impossible if prices are positive — flag if it occurs
  - Fewer than period bars: return all NaN
  - Annual factor mismatch: document clearly which factor was used in output metadata

Section 6: Parameters & Optimization

Period Selection Guide

Period Bars Equivalent HV Efficiency Use Case
5 5 trading days ~25 HV bars Rapid spike detection; very noisy
10 10 trading days ~50 HV bars Short-term regime; 2-week window
20 20 trading days ~100 HV bars Standard; best for IV comparison
30 30 trading days ~150 HV bars Medium regime; earnings cycle view

The 5× efficiency advantage means PV(20) is statistically as reliable as HV(100) — a major advantage when you only have limited history.

How does Parkinson compare to Yang-Zhang and Garman-Klass volatility estimators?

Several range-based volatility estimators exist. Garman-Klass (1980) extended Parkinson by adding open and close data: efficiency ≈ 7.4× vs. close-based HV. Yang-Zhang (2000) further added overnight gaps: efficiency ≈ 14× but requires open, high, low, close data. Parkinson is the simplest range-based estimator — only high and low required. When you have full OHLC data, Yang-Zhang is the most efficient. When only high-low data is available, Parkinson is the correct choice.

Can I apply Parkinson to intraday bars instead of daily?

Yes — Parkinson applies to any timeframe. On a 15-minute chart, PV(20) measures the annualized volatility derived from the last 20 fifteen-minute bars' high-low ranges. The annual factor remains the same (252 × sessions_per_day × bars_per_session for full annualization — or keep at 252 for simplicity and accept the approximation). Most traders use daily PV for regime context and intraday ATR for stop sizing.


Section 7: Synergies & Conflicts

Works Well WithAvoid Combining With
Historical Volatility (HV)Plot both together — when PV > HV, intraday volatility dominates; when HV > PV, gap risk dominates. The gap tells you which risk type is dominant
ATRATR is the absolute daily range; Parkinson is the annualized statistical version. Use ATR for stop sizing; use PV for regime identification and IV comparison
Implied VolatilityPV compares directly to IV just like HV — IV vs. PV divergence reveals options mispricing relative to intraday activity
Bollinger Band WidthBoth measure volatility compression. PV at a low + BB Width at a low = double confirmation of a quiet market about to move
HV for gap-heavy assetsFor equities around earnings, PV systematically understates risk. Use HV (captures gaps) rather than PV (misses gaps) in these environments
Close-based indicators (MACD, RSI)These momentum tools operate on close prices and ignore ranges. Combining them with Parkinson creates no conceptual conflict but also no synergy — they answer different questions

Section 8: Common Mistakes

Mistake Root Cause Solution
Using Parkinson for gap-prone equities Parkinson assumes no gaps — common equity behavior For equities, compare PV against HV; use HV when they diverge sharply
Forgetting the 4 × ln(2) normalization constant Deriving the formula from memory and dropping the constant Always verify: the denominator is 4N × ln(2), not just 4N or N
Using wrong annual factor for crypto Applying 252 to 365-day crypto markets Crypto uses 365 — using 252 understates crypto PV by ~20%
Treating PV low as a long entry PV low only means volatility is compressed — direction is unknown Combine with breakout indicator (DC, Bollinger Squeeze) for direction
Not validating high >= low Bad data can produce negative log ratios Always assert high[i] >= low[i] before computing — flag and skip bad bars

Section 9: Cheat Sheet

ℹ️ INFO
**Parkinson Volatility**

USE WHEN: Forex and crypto volatility measurement (no gaps); comparing intraday activity against close-based HV; identifying compression before a breakout
AVOID WHEN: Equity assets with frequent overnight gaps; earnings periods; thin pre-market trading distorts the high-low range

ENTRY SIGNAL: Not a standalone signal — use PV at multi-month low as a compression filter; then enter on DC or Bollinger breakout
EXIT SIGNAL: Not applicable — PV calibrates risk management and IV comparison

PARAMETERS: PV(20) for standard use; PV(10) for recent spike detection; annual factor 252 (equities/forex), 365 (crypto)
CONFLUENCE: HV (compare for gap effect) + IV (options pricing edge) + ATR (absolute stop sizing) + Bollinger Width (compression confirmation)

RISK: Systematically underestimates volatility on gap-prone assets — always cross-check with HV for equities
BEST TIMEFRAME: Daily bars for regime identification; most useful for forex and crypto where gap distortion is minimal