Historical Volatility (HV) measures how much an asset's price actually moved over a past period, expressed as an annualized percentage. It is the statistical foundation of risk measurement — the number that tells you what the market actually did, not what options traders expect it to do next.
Section 1: Core Mechanics
Historical Volatility is the annualized standard deviation of logarithmic daily returns. It answers the question: "If this asset's daily price changes over the last N days represent the typical risk, how much would it be expected to move over an entire year?"
Formula
Step 1 — Calculate daily log returns:
Step 2 — Calculate the standard deviation of log returns over N days:
Step 3 — Annualize by multiplying by the square root of trading days per year:
Where 252 is the standard number of US equity trading days per year. Forex uses 252 or 260. Crypto markets use 365 (continuous trading).
The result: HV = 25% means the asset's historical price volatility implies a ±25% move at 1 standard deviation over the next year. A 1 SD move in one month = 25% ÷ √12 ≈ 7.2%.
Inputs
- Close price: Daily closing prices (the only required input)
- Period (N): Lookback in trading days. Common values: 10, 20, 30, 60.
- Trading days per year: 252 (equities), 365 (crypto), 260 (some forex)
Parameters
| Parameter | Default | Range | Impact |
|---|---|---|---|
| Period (N) | 20 | 5–252 | Shorter = reacts to recent volatility; Longer = regime-level average |
| Annualization factor | 252 | 252/260/365 | Must match asset class — wrong value distorts comparison to IV |
| Return type | Log return | Log / Simple | Log returns are standard in finance — simple returns slightly overestimate |
Output
HV is a percentage that plots as a line on a sub-panel below the price chart. Rising HV = volatility expanding. Falling HV = volatility contracting. Multiple HV periods (e.g., HV10, HV20, HV60) shown simultaneously reveal short-term vs. long-term volatility dynamics.
Visual Behavior
- HV(20) > HV(60): Short-term volatility is elevated above the long-term baseline — recent event or spike
- HV(20) < HV(60): Market has calmed below its long-term norm — compressed regime
- HV making a multi-month low: Classic pre-breakout compression signal
Section 2: Interpretation & Signals
HV Regime Identification
| HV(20) Level | Interpretation | Action |
|---|---|---|
| Below 10% (equities) | Extreme low volatility — market is complacent | Breakout potential; watch for catalyst |
| 10%–20% | Normal low-volatility regime | Trend-following strategies work well |
| 20%–35% | Elevated volatility — active market | Wider stops; reduce position size |
| Above 40% | High-volatility regime | Crisis or earnings-driven; avoid momentum chasing |
| Above 80% | Extreme (rare except in crashes) | Short-vol strategies dominate; directional trading very risky |
HV vs. Implied Volatility — The Options Edge
The most powerful use of HV is comparison against Implied Volatility (IV):
HV(20) vs. IV — Options Pricing Divergence
When IV > HV significantly (IV premium > 5–10 points): Options are priced more expensively than realized volatility justifies. Selling premium (covered calls, cash-secured puts, iron condors) is statistically favorable.
When IV < HV: Options are priced below realized volatility. Buying options for directional bets offers better statistical value — the market is underpricing risk.
Section 3: Pass vs. Live — Real-Time Reliability
HV does not repaint. Once a bar closes and its log return is computed, it joins the historical record and never changes. Because HV is a daily metric (standard), it updates once per trading day at market close.
Section 4: Practical Use Cases
Setup: HV(20) on daily chart as a context filter — check once per day before session Signal: HV(20) > 30% → widen intraday stops; HV(20) < 15% → tighten stops Entry: HV does not generate entries — use for stop and size context only Key rule: High HV day → reduce position size by 30–50%; stops need to be wider and fewer trades
Setup: Plot HV(20) and HV(60) together on daily chart Signal: HV(20) crosses below HV(60) → short-term vol contracting below long-term norm → anticipate breakout Entry: Wait for DC(20) breakout signal or Bollinger Squeeze to fire on the same asset Stop: 1.5× ATR(14), widened if HV(20) is above 25% Key rule: HV regime defines stop width and position size; breakout indicators define entry direction
Setup: HV(20) on weekly chart + track HV vs. IV for options overlay Signal: Weekly HV(20) at 52-week low → ideal environment for covered calls on long stock positions Action: Sell covered calls when IV > HV by 1.3×; buy back when IV drops toward HV Key rule: Position-level HV analysis is about capturing the volatility premium, not price direction
Real example: AAPL before Q3 2023 earnings (July 2023): HV(20) was 14.8%. IV (from at-the-money weekly options) was 38.0% — a 2.6× premium. Selling a strangle (short call + short put) one week before earnings captured the IV crush post-earnings. The stock moved 1.2% post-announcement while the options had priced in a 4.5% move. Premium sellers collected approximately 80% of max profit.
Section 5: Pseudo Code
INPUT: close[], period=20, annual_factor=252
PROCESS:
Step 1: Calculate daily log returns starting from bar 1 (not bar 0)
log_returns[i] = ln(close[i] / close[i-1])
# Bar 0 has no previous close — log_returns[0] = NaN
Step 2: For each bar i starting from index period (need period log returns):
window = log_returns[i-period+1 : i+1]
mean_r = sum(window) / period
variance = sum((r - mean_r)^2 for r in window) / period
# Note: use N (not N-1) for population std; some platforms use N-1
daily_vol = sqrt(variance)
hv[i] = daily_vol * sqrt(annual_factor) * 100
OUTPUT: hv[] — annualized historical volatility as percentage
EDGE CASES:
- Fewer than period+1 bars (need one extra for first return): return all NaN
- Close of 0: ln(0) is undefined — handle as NaN; flag data error
- Identical consecutive closes: log return = 0, contributes zero variance (valid)
- Gap trading days (weekends skipped): log returns are calculated on consecutive available closes — gaps compress weekend/holiday moves into Friday→Monday returns (standard practice)
Section 6: Parameters & Optimization
Standard HV Periods
| Period | Name | Primary Use |
|---|---|---|
| 10 | Very short-term | Captures recent 2-week volatility spike; react fast |
| 20 | Short-term (most common) | Standard monthly HV; best comparison baseline against IV |
| 30 | Medium-term | 6-week view; less noise than HV(20) |
| 60 | Medium-long term | 3-month view; regime identification |
| 252 | 1-year realized vol | Annual volatility baseline; used in options pricing models |
Period Impact
| Change | Effect | When to Use |
|---|---|---|
| Shorter period (10) | Captures current volatility spike; noisy | Earnings/events — need to see current panic level |
| Default (20) | Balanced signal; matches monthly options pricing | Standard regime identification and IV comparison |
| Longer period (60+) | Smooths out events; reveals structural vol regime | Position-level context; long-term vol analysis |
Should I use N or N-1 in the denominator for variance?
Financial convention uses N (population standard deviation) for HV, not N-1 (sample). Most charting platforms and Bloomberg use N. Using N-1 slightly increases the HV value, which is more conservative (slightly higher estimate). For options pricing model comparisons, ensure you match the convention your platform uses — mixing N and N-1 creates a small but consistent discrepancy.
What annualization factor should I use for crypto?
Crypto markets trade 365 days per year, 24/7. Use annual_factor = 365 for crypto HV. Using 252 (equities) on crypto will understate annualized volatility by approximately 20% (sqrt(365/252) ≈ 1.20). When comparing crypto HV against crypto IV on options platforms (Deribit, LedgerX), ensure both use 365 — the platform should document its convention.
Section 7: Synergies & Conflicts
| Works Well With | Avoid Combining With | |
|---|---|---|
| Implied Volatility | The natural counterpart — HV is realized vol, IV is expected vol. The gap between them is the options pricing edge. Track HV(20) and current ATM IV together | — |
| ATR | ATR is the daily raw volatility; HV is the annualized statistical version. They tend to move together but HV gives context for regime; ATR gives actionable stop sizes | — |
| Bollinger Band Width | Band Width measures short-term volatility expansion/contraction; HV measures the same thing over a longer window. Both contracting together = strong squeeze signal | — |
| Donchian Channels | DC finds breakout direction; HV identifies volatility regime. Low HV before a DC breakout = pre-compression setup (high quality) | — |
| RSI / MACD | — | These are momentum indicators — conceptually unrelated to volatility measurement. Using them together creates category mixing (momentum vs. risk) without clear confluence logic |
| Simple Range (High-Low) | — | Simple range ignores gaps; log returns capture overnight gaps. HV is strictly superior for volatility measurement — do not substitute High-Low average |
Section 8: Common Mistakes
| Mistake | Root Cause | Solution |
|---|---|---|
| Using simple returns instead of log returns | Log returns are less intuitive but mathematically correct for compounding | Always use ln(Closei / Close{i-1}) — most platforms default to this |
| Comparing HV to IV without matching periods | HV(10) vs. IV(30-day) creates apples-to-oranges comparison | Match HV period to the options expiration you are comparing: 30-day IV → HV(20) or HV(30) |
| Using wrong annualization factor | Applying 252 to crypto (should be 365) | Check asset class: equities=252, crypto=365, some forex=260 |
| Treating HV as a signal generator | HV shows what happened, not what will happen | Use HV as a regime filter and IV comparison tool only — pair with a breakout or momentum signal for entries |
| Ignoring HV during calm periods | Low HV seems uninteresting | Low HV is when the premium-selling setup is being built — the subsequent IV spike is the opportunity |
Section 9: Cheat Sheet
USE WHEN: Comparing against IV to find options premium edge; identifying volatility regime (high/low/normal); calibrating stop sizes and position sizes to current risk environment
AVOID WHEN: Expecting directional buy/sell signals — HV is a measurement tool, not a signal
ENTRY SIGNAL: Not a standalone entry signal. Use HV regime context with breakout or momentum indicators
EXIT SIGNAL: Not applicable — HV calibrates risk management; does not time exits directly
PARAMETERS: HV(20) for IV comparison; HV(10) for current spike detection; HV(60) for regime identification. Annual factor: 252 equities, 365 crypto
CONFLUENCE: IV rank/percentile (options premium edge) + ATR (stop sizing) + Bollinger Squeeze (compression setup)
RISK: HV is backward-looking — cannot predict future vol spikes from earnings, geopolitics, or macro events
BEST TIMEFRAME: Daily chart closes for all HV calculations — intraday HV requires different methodology (realized vol using intraday bars)