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.
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)
Section 3: Pass vs. Live — Real-Time Reliability
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
Setup: Plot PV(20) alongside HV(20) on daily chart Signal: PV(20) drops to 12-week low while HV(20) is also low → pure intraday compression (no gap activity either) Action: Anticipate breakout; wait for DC(20) or Bollinger Band squeeze breakout confirmation Key rule: PV and HV both at lows = strongest compression signal — markets are quiet on both intraday and close-to-close basis
Setup: PV(20) on weekly chart for long-term vol regime Signal: PV(20) on weekly at multi-year low → multi-month compression in progress Action: Build position slowly; buy options for next catalyst rather than selling premium during extreme compression Key rule: Extreme PV lows on weekly can persist for months — do not front-run the breakout; wait for the first weekly close outside DC(55)
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 With | Avoid 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 | — |
| ATR | ATR 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 Volatility | PV compares directly to IV just like HV — IV vs. PV divergence reveals options mispricing relative to intraday activity | — |
| Bollinger Band Width | Both 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 assets | — | For 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
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