Help us double down on what's working, instead of guessing. Takes 5 seconds, totally optional.
realizedvolatility · 42 min read
Yang-Zhang vs Close-to-Close Volatility: Formulas, Worked Example and a 10-Year Study
Close-to-close volatility is the standard deviation of daily closing returns; Yang-Zhang adds the open, high and low to measure the overnight gap and the session separately. This reference compares five estimators (close-to-close, Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang) with formulas, a worked NVDA example you can check by hand, a simulation with known volatility, and a 2017-2026 study of 20 US stocks and ETFs covering accuracy, forecasts and IV-RV signals. Free CSV, spreadsheet, notebook and research pack.
This is a reference for the five daily-bar estimators: what each one measures, the formulas with their sources, a worked NVDA calculation you can check line by line, and two original studies. The first is a simulation where the true volatility is known. The second covers 20 US stocks and ETFs from 2017 to 2026 and asks how far the estimators disagree, which one tracks intraday data best, which forecasts best, and how often the choice flips an IV-RV signal. Every number on the page is in the free download pack.
7.2-8.2×Yang-Zhang efficiency at a 20-day window in theory (14× needs a 2-day window)
37%-43%Share of daily variance that happens overnight for SPY, QQQ, IWM, XLK, AAPL, NVDA, TSLA
3.4×Closer to a 5-minute benchmark than close-to-close (median, 11 symbols)
1 in 6Days where switching to Yang-Zhang flips the sign of IV minus RV
Free account
Compute it yourself
Reference Python code, a spreadsheet with live formulas, and the full research pack.
The "14 times more efficient" figure is a maximum for a 2-day window. Yang-Zhang's efficiency is 1/(f² + k(1 − f)²), where f is the overnight share of variance: at 20 days, 7.2 with no gaps and at most 8.2 (1 + 1/k). Our simulation follows the formula within 4% once the overnight share is 20% or more.
Overnight moves are a large part of daily variance. 37% to 43% for large US stocks and equity ETFs, 55% for TLT, 61% for GLD and 69% for EEM. Estimators that ignore the gap miss about that share of the variance.
Yang-Zhang tracks intraday data best. Against a 5-minute benchmark over the same 20 sessions, its mean error was 0.40 to 1.77 volatility points, against 1.35 to 5.81 for close-to-close. It was closer on all 11 symbols.
Its advantage shrinks as the gap share grows. In simulation, Yang-Zhang is about 4.5 times as accurate as close-to-close when 40% of variance is overnight and 2.0 times at 70%.
The estimators disagree most around gaps and earnings. The median Yang-Zhang vs close-to-close difference was 1.97 points over 20 days, 3.70 in windows with the largest gaps and 3.63 in windows with an earnings report.
A better trailing estimate forecasts better, at short windows. Yang-Zhang's 10-day estimate beat close-to-close out of sample on all 20 symbols, and all 20 survive a Holm correction across symbols. At 20 days it was ahead on 19 of 20 but significant on only 5 after the correction; at 60 days, on none.
The estimator choice changes IV-RV signals. Switching from close-to-close to Yang-Zhang flipped the sign of the 20-day IV-RV spread on 17.3% of days, and switching to Parkinson on 31.4%.
Data: 49,420 20-session windows on 20 symbols, Jan 2017 to Oct 2026. Method and limitations in the market study; code and results in the research pack.
Which realized volatility estimator should you use?
Use Yang-Zhang for US stocks and ETFs when you have clean daily open, high, low and close prices. Use close-to-close when you only have closes, when the highs and lows are unreliable, or when you need the number everyone else computes. The table matches the choice to the situation; the evidence for each row is further down the page.
Table 1. Choosing an estimator.
Situation
Use
Why
US stocks and ETFs, clean daily bars
Yang-Zhang
Counts the overnight gap, is unaffected by drift, and was closest to the 5-minute benchmark on every symbol we tested.
Only closing prices
Close-to-close
The only option. Use 20 or more sessions; a 10-session reading moves a lot from noise alone.
Highs and lows you do not trust
Close-to-close
One 5% bad print a year cut Yang-Zhang's 20-day advantage from 7.9× to 2.3× in simulation. Closes are cleaner than extremes.
Markets with no overnight break
Garman-Klass
With no gap to miss, it was the most accurate of the five in our simulation. Rogers-Satchell is the drift-free alternative in theory, but lost more to one-minute sampling.
Comparing realized vol with implied vol
One estimator, stated
The choice flipped the sign of IV minus RV on 17.3% of days (Yang-Zhang) to 31.4% (Parkinson).
Forecasting next month's volatility
A model, or Yang-Zhang as a baseline
Yang-Zhang over 10 to 20 sessions beat close-to-close as a forecast. In our earlier study, 30-day implied vol beat every historical model at a one-month horizon.
Figure 1. The five estimators at a glance
Prices each estimator reads (struck out = not used), what it handles, and how accurate it was relative to close-to-close in our simulation: 20-day windows, one-minute prices, without and with overnight gaps (Study 1). The grey tick marks 1×, the close-to-close level.
Efficiency in theory: 1/k = 7.2 with no gaps, at most 8.2 at 20 days [5]
Close-to-close
Standard deviation of daily close-to-close log returns.
CprevOHLC
✓Overnight gap: yes
✓Drift-free: yes
✕Uses the range: no
Accuracy vs close-to-close
No overnight gaps1.0×
40% of variance overnight1.0×
Efficiency in theory: 1 (the baseline)
Parkinson1980 [1]
Squared high-low range of each session.
CprevOHLC
✕Overnight gap: no
✕Drift-free: no
✓Uses the range: yes
Accuracy vs close-to-close
No overnight gaps4.5×
40% of variance overnight0.5×
Efficiency in theory: 4.9 [4]
Garman-Klass1980 [2]
Range plus the open-to-close move, session only.
CprevOHLC
✕Overnight gap: no
✕Drift-free: no
✓Uses the range: yes
Accuracy vs close-to-close
No overnight gaps5.2×
40% of variance overnight0.5×
Efficiency in theory: 7.4 [4]
Rogers-Satchell1991 [3]
Range measured from the open and close, drift-free.
CprevOHLC
✕Overnight gap: no
✓Drift-free: yes
✓Uses the range: yes
Accuracy vs close-to-close
No overnight gaps4.4×
40% of variance overnight0.5×
Efficiency in theory: 6.0 with zero drift [4]
The widely shared table of "1, 5.2, 7.4, 8, 14" comes from a 2012 bank research note [7], not from the original papers. Parkinson's estimator is about 4.9 times as efficient as one squared return, Rogers-Satchell about 6.0 with zero drift, and Yang-Zhang's 14 is its maximum for a 2-day window [5][6].
What quantity are we estimating?
All five estimators target the same thing: the variance of the daily log return, measured from one close to the next. That day has two parts. The overnight part runs from yesterday's close to today's open; the session part runs from the open to the close.
One trading day, in log returns
$$ r_i = \ln\frac{C_i}{C_{i-1}} = \underbrace{\ln\frac{O_i}{C_{i-1}}}_{o_i,\ \text{overnight}} + \underbrace{\ln\frac{C_i}{O_i}}_{c_i,\ \text{session}} $$
The estimators differ in which pieces of the bar they read. Close-to-close sees only \(r_i\). Parkinson sees only the session's high and low. Garman-Klass and Rogers-Satchell see the whole session but not the gap. Yang-Zhang sees both parts. Each estimator returns a daily variance; this page annualizes it as \(100\sqrt{252 \times \text{variance}}\) to get volatility in percent.
Figure 2. What each estimator reads from two daily bars
Close-to-close sees only r. Parkinson sees the high-low range. Garman-Klass and Rogers-Satchell see the session (u, d, c). Yang-Zhang adds the overnight gap o.
The overnight gap (blue) happens outside the session. Only close-to-close and Yang-Zhang include it; close-to-close sees it only netted with the session move (orange).
Variance or volatility? The sample variance is unbiased, but its square root is not: a 20-session close-to-close volatility reads about 1.2% below the true value on average, and about 2.6% at 10 sessions (Study 1). Average variances, not volatilities, when you combine windows.
The shared assumptions. The theory behind every range estimator assumes the log price is a random walk with constant volatility inside the window, observed continuously, without bid-ask noise. Real prices are observed at discrete times, so the recorded high is below the true high and the recorded low above the true low, which pulls range estimators down [2][3][4]. Yang-Zhang also assumes the overnight and session returns are independent of each other.
The five estimators: formulas, assumptions and limits
Notation for a window of \(n\) bars: \(o_i\), \(c_i\) and \(r_i\) as above, \(u_i = \ln(H_i/O_i)\), \(d_i = \ln(L_i/O_i)\). A bar over a symbol is its mean over the window. These are the definitions the FlashAlpha API uses.
The sample variance of daily log returns. Removing the mean makes it unaffected by drift, and because \(r_i = o_i + c_i\) it includes the overnight move. Its weakness is noise: one number per day. A common variant skips the mean and divides by \(n\) (zero-mean, as in many risk systems). The two differ most when the window trends, because the zero-mean version counts the trend as variance.
The constant \(1/(4\ln 2)\) converts the expected squared range of a driftless random walk into its variance. Parkinson ignores the open and close, so it misses the overnight gap and is biased by drift: a steady trend widens the range without adding variance. Efficiency is about 4.9 [4].
This is the form most software implements. It contains no previous close, so it does not see the overnight gap. Garman and Klass also gave a version that adds the gap with weight \(a = 0.12\), where \(f\) is the fraction of the day the market is closed: \(\sigma^2 = a\,(\ln O_i - \ln C_{i-1})^2/f + (1-a)\,\sigma^2_{\text{GK}}/(1-f)\), efficiency about 8.4 [2]. The session-only form is about 7.4 times as efficient as the squared open-to-close return [4], and is biased by drift.
Unbiased for any drift, which is what it was designed for. It still misses the overnight gap. Efficiency is about 6.0 with zero drift and above 2 for any drift [4]; the "8" in many tables is not supported by the theory. Rogers and Satchell also show that discrete observation biases the estimate down and give a correction [3].
\(\sigma^2_o\) and \(\sigma^2_c\) are the sample variances of \(o_i\) and \(c_i\) (mean removed, divided by \(n-1\)); \(\sigma^2_{\text{RS}}\) is Rogers-Satchell. Yang and Zhang show the estimator is unbiased in the continuous limit, independent of drift and consistent with opening jumps, and that it has "the smallest variance among all estimators with similar properties" [5]. That is the class its optimality applies to. The 0.34 comes from \(\alpha - 1\) with \(\alpha = 1.34\), the value the authors suggest for small drift [5][8].
Under the paper's assumptions its efficiency relative to close-to-close depends on \(f\), the share of daily variance that happens overnight [5]:
With no overnight variance it is \(1/k\): 12.8 at \(n = 2\) and 7.2 at \(n = 20\). Its maximum, \(1 + 1/k\), is reached when a share \(k/(1+k)\) of the variance is overnight (about 12% at \(n = 20\)): 13.8 at \(n = 2\) and 8.2 at \(n = 20\). The "14 times" figure is that maximum for a 2-day window [6]. As the overnight share grows, the overnight term carries more of the variance and is estimated from \(n\) gaps, like close-to-close, so the advantage falls toward 1: at 40% overnight and 20 days the formula gives 4.8. Study 1 checks it.
Worked example: NVDA, 10 sessions with an earnings gap
NVDA reported earnings after the close on November 19, 2025. The next morning it opened 4.9% higher, then fell 8.1% during the session. In six of the 10 sessions from November 13 to November 26, the stock moved against its overnight gap during the session, including after the two largest gaps. Every input is in Table 2 and in the CSV; the close on November 12 seeds the first overnight return.
Figure 3. NVDA daily bars, Nov 13 to Nov 26, 2025
Dashed blue: overnight gap from the previous close (grey tick) to the open. Hover a candle for its values.
Source: daily regular-session bars from Yahoo Finance, rounded to cents. The two largest gaps (+4.9% on Nov 20 and −4.3% on Nov 25) both reversed during the session.
Table 2. NVDA daily bars and the per-bar terms. o = ln(O/Cprev), c = ln(C/O), r = o + c, u = ln(H/O), d = ln(L/O), RS term = u(u − c) + d(d − c). Log returns in percent; the CSV download has full precision.
Sample variances (divide by \(n - 1 = 9\)): \(s_o^2\) = 0.00072303, \(s_c^2\) = 0.00104499, \(s_r^2\) = 0.00060893. The last one is the close-to-close daily variance.
Range terms. Mean RS term = 0.00075720; \(\sum \ln(H/L)^2\) = 0.02322874; mean Garman-Klass term = 0.00078848.
Yang-Zhang weight for \(n = 10\): \(k = 0.34 / (1.34 + 11/9)\) = 0.132697. Then combine the three terms and annualize:
so²0.000723overnight variance
+
k · sc²0.000139k = 0.1327
+
(1 − k) · RS0.000657range term
=
daily variance0.001518Yang-Zhang
→
100 √(252 × var)61.86%annualized
Figure 4. Five estimators, same 10 NVDA sessions
Annualized volatility in percent. Dashed line: FlashAlpha's 5-minute benchmark for the same sessions.
5-minute benchmark 59.3%
Yang-Zhang61.86%
Close-to-close39.17%
Parkinson45.95%
Garman-Klass44.58%
Rogers-Satchell43.68%
0%10%20%30%40%50%60%70%80%90%
Yang-Zhang lands near the intraday benchmark; close-to-close nets each gap against its reversal and reads 22.7 points lower.Table 3: the daily variances behind Figure 4
Table 3. NVDA, 10 sessions to Nov 26, 2025: daily variance and annualized volatility, 100 × √(252 × variance). Same bars for every estimator.
Estimator
Daily variance from
Daily variance
Annualized vol
vs close-to-close
Close-to-close
Sample variance of r
0.00060893
39.17%
Parkinson
Σ ln(H/L)² / (4 · 10 · ln 2)
0.00083780
45.95%
+6.78 pts
Garman-Klass
mean of 0.5 ln(H/L)² − (2 ln 2 − 1) c²
0.00078848
44.58%
+5.40 pts
Rogers-Satchell
mean RS term
0.00075720
43.68%
+4.51 pts
Yang-Zhang
so² + k sc² + (1 − k) RS, k = 0.1327
0.00151842
61.86%
+22.69 pts
5-minute benchmark
Mean of squared 5-minute midpoint returns plus squared overnight return (FlashAlpha archive)
0.00139727
59.34%
+20.17 pts
Yang-Zhang reads 22.7 points above close-to-close, and the 5-minute benchmark for the same sessions (59.3%) sits close to Yang-Zhang. Close-to-close sees only the net move on each reversal day: on November 20 it records −3.2% where the stock travelled 4.9% up and 8.1% down. The three session-only estimators see the session ranges but not the gaps. If your code reproduces Table 3 to two decimals from Table 2's bars, it matches this page and the FlashAlpha API's definitions.
Try it with your own bars
Four cases that show where each estimator breaks
Each card is one constructed week: five sessions after a prior close of 100, drawn as candles (dashed blue = overnight gap), with the annualized volatility each estimator reports. The spreadsheet recomputes them with live formulas.
Figure 5. Four ways to break an estimator
Wide ranges, flat closes
Every session opens at 100, trades from 97 to 103 and closes at 100.
Yang-Zhang63.2%
Close-to-close0.0%
Parkinson57.2%
Garman-Klass67.4%
Rogers-Satchell67.4%
Closing prices never move, so close-to-close reads zero. The range estimators see a volatile week.
Big gaps, quiet sessions
Alternating 2% overnight gaps; each session trades in a 0.4% range and closes where it opened.
Yang-Zhang35.0%
Close-to-close34.8%
Parkinson3.8%
Garman-Klass4.5%
Rogers-Satchell4.5%
The session-only estimators (Parkinson, Garman-Klass, Rogers-Satchell) see only the quiet sessions and miss almost all of the movement.
Gap, then intraday reversal
A 2% gap every morning, fully reversed by the close, alternating direction.
Yang-Zhang38.1%
Close-to-close0.0%
Parkinson21.0%
Garman-Klass14.8%
Rogers-Satchell10.5%
Closes never change, so close-to-close reads zero. Yang-Zhang counts both legs: the negative covariance between gap and session is what separates them.
The same week, clean
The bad-print week next to it, with the correct high. Same bar scale.
Yang-Zhang13.1%
Close-to-close13.4%
Parkinson11.7%
Garman-Klass12.2%
Rogers-Satchell11.8%
One bad high
A normal week, except one session's high is recorded 8% above its open (a bad print).
Yang-Zhang51.1%
Close-to-close13.4%
Parkinson35.7%
Garman-Klass41.5%
Rogers-Satchell54.0%
Close-to-close does not move. Every range estimator jumps, because one high enters a squared log range.
Why can Yang-Zhang be lower than close-to-close?
Both estimators include the overnight move, so readers often expect Yang-Zhang to agree with close-to-close on average and to differ only by noise. On the same bars, the close-to-close variance splits exactly into an overnight part, a session part and their covariance:
The range part, \((1-k)(s^2_{\text{RS}} - s^2_c)\). When sessions trade wide ranges but close near the open, Rogers-Satchell exceeds the open-to-close variance and Yang-Zhang moves up. Narrow ranges with directional closes move it down.
The covariance part, \(-2\,\text{Cov}(o,c)\). Gaps that reverse during the session (negative covariance) push Yang-Zhang above close-to-close, because close-to-close nets the two legs. Gaps that continue push it below.
Figure 6. From close-to-close to Yang-Zhang, NVDA window
Annualized variance, in volatility points squared. The two middle bars are the exact parts of the identity above.
In the NVDA window, in annualized variance (volatility points squared): close-to-close 1,534.5, range part −629.0, covariance part +2,920.9, which sum to Yang-Zhang's 3,826.4 (= 61.86²). The whole gap comes from reversals; the range part pulls the other way. The practical point: Yang-Zhang minus close-to-close is not a measure of overnight risk. It measures how gaps and sessions co-move and how wide the sessions trade.
Across 20 symbols from 2017 to 2026, Yang-Zhang was below close-to-close in 33% to 53% of 20-session windows (average 45%). The median overnight-session correlation is close to zero for every symbol, so both parts are small on a typical day and large in specific windows.
Table 4: the split for all 20 symbols
Table 4. Yang-Zhang minus close-to-close, split into its two exact parts, 20-session windows from 2017 to 2026. Medians as a percent of the close-to-close variance. Positive = pushes Yang-Zhang above close-to-close.
Symbol
Range part (1 − k)(RS − sc²)
Covariance part −2 Cov(o, c)
Windows with YZ below CC
Median corr(o, c)
Overnight share of r²
SPY
+4.4%
+0.9%
42%
-0.01
42%
QQQ
-0.1%
+3.6%
50%
-0.04
38%
IWM
+3.8%
+3.5%
39%
-0.04
39%
DIA
+4.1%
+1.4%
44%
-0.02
43%
GLD
+2.9%
-4.4%
49%
+0.05
57%
TLT
-1.7%
-3.3%
53%
+0.04
55%
XLF
+4.8%
+3.1%
39%
-0.03
48%
XLK
-2.9%
+2.8%
52%
-0.03
41%
XLE
+5.5%
+1.8%
39%
-0.02
42%
EEM
+0.7%
-0.3%
50%
+0.00
69%
AAPL
+5.2%
+0.4%
42%
-0.00
41%
MSFT
+2.6%
+2.5%
43%
-0.03
39%
NVDA
-0.2%
+1.1%
50%
-0.01
38%
AMZN
+1.5%
+2.6%
43%
-0.03
46%
GOOGL
+4.1%
+2.4%
41%
-0.03
45%
META
+5.1%
+0.8%
41%
-0.01
52%
TSLA
-4.4%
+0.8%
53%
-0.01
37%
JPM
+7.6%
+5.0%
33%
-0.06
44%
XOM
+4.8%
+0.1%
44%
-0.00
41%
NFLX
+2.2%
+0.6%
44%
-0.01
40%
Study 1: simulation with known volatility
The papers' efficiency figures assume ideal conditions. To see what each estimator delivers when those conditions fail, we simulated prices with a known volatility and measured each estimator's error.
Simulation method
True volatility
20% a year (daily variance 0.04/252), constant.
A day
An overnight jump (normal, a set share of the daily variance), then a session of 390 one-minute steps (4,680 five-second steps in the ideal case). High and low are the extremes of the recorded path.
Scenarios
Ideal; one-minute prices; overnight gaps carrying 40% of variance; a strong trend (drift of half a daily standard deviation per day); one 5% bad print a year on a random session price. A second run varies the overnight share from 0% to 70%.
Size
240,000 simulated days per scenario (120,000 in the ideal case and the sweep), split into non-overlapping windows of 2, 5, 10, 20 and 60 bars. Fixed seeds.
Measures
Efficiency (ratio of estimate variances) and accuracy (ratio of mean squared errors, which also counts bias), both relative to close-to-close.
Table 5. Efficiency relative to close-to-close by window length, ideal conditions (no gaps, no drift, 4,680 price steps a day). Efficiency = variance of the close-to-close variance estimate divided by the variance of the other estimate. Yang-Zhang theory with no overnight variance is 1/k; 1 + 1/k is its maximum, reached when a share k/(1 + k) of the variance is overnight.
Window (bars)
k
Yang-Zhang theory, no gaps (1/k)
Yang-Zhang, simulated
Theory maximum (1 + 1/k)
Garman-Klass
Rogers-Satchell
Parkinson
2
0.0783
12.8
13.4
13.8
15.3
12.4
10.0
5
0.1197
8.4
8.8
9.4
9.7
7.7
6.3
10
0.1327
7.5
7.9
8.5
8.5
6.8
5.6
20
0.1390
7.2
7.8
8.2
8.2
6.5
5.4
60
0.1432
7.0
7.3
8.0
7.7
6.1
5.1
With no gaps, the simulated Yang-Zhang efficiency lands 4% to 8% above \(1/k\): prices recorded at discrete times give slightly smaller ranges, which lowers the variance of the range terms along with their level (the accuracy measure in Figure 7 also counts that bias). With overnight gaps the formula tracks the simulation within 4% for overnight shares from 20% to 70% at 20 days; at 40% the 240,000-day scenario measured 4.75 against 4.76 predicted. Efficiency falls as the window grows because close-to-close spends one of its \(n\) observations on estimating the mean, which costs less as \(n\) grows.
Figure 7. Accuracy relative to close-to-close, 20-session windows
Mean squared error of close-to-close divided by each estimator's. Blue cells beat close-to-close, red cells do worse; darker = further from 1.
Scenario
Yang-Zhang
Parkinson
Garman-Klass
Rogers-Satchell
Ideal prices (no gaps, no drift)
7.5×
5.3×
7.8×
6.3×
One-minute prices
5.5×
4.5×
5.2×
4.4×
Overnight gaps, 40% of variance
4.3×
0.5×
0.5×
0.5×
Strong trend
5.2×
4.0×
6.2×
4.2×
One 5% bad print a year
2.2×
3.4×
3.1×
1.7×
Worse than close-to-closeBetter
Without overnight gaps, Garman-Klass is the most accurate of the five, even in a strong trend, where its drift bias partly offsets the downward bias from one-minute sampling. One-minute prices bias the range estimators down by 6.5% (Parkinson) to 9.1% (Rogers-Satchell) in variance, and Yang-Zhang by 7.8%. With 40% of variance overnight, the session-only estimators read 44% low and fall below close-to-close (0.52×); Yang-Zhang keeps a 4.3× advantage. A strong trend shifts the variance bias by +9.0 percentage points for Parkinson and +3.0 for Garman-Klass, against -0.5 for Rogers-Satchell and -0.5 for Yang-Zhang (compared with one-minute prices and no trend).
Figure 8. How the overnight share changes each estimator's accuracy
20-session windows, one-minute prices. Vertical lines: measured overnight share of daily variance for five ETFs.
Yang-Zhang's advantage peaks with a small overnight share and falls to 2.0× at 70%. Parkinson, Garman-Klass and Rogers-Satchell drop below close-to-close once the overnight share passes about 25% (1.39× at 20%, 0.80× at 30%). For most US equities the measured share is about 40%.
Daily regular-session open, high, low and close from Yahoo Finance (yfinance 1.2.0, auto_adjust=False): split-adjusted, not dividend-adjusted. Oct 3, 2016 to Oct 30, 2026; no invalid candles or zero-range days found.
Windows
Rolling 10, 20, 30 and 60 sessions ending on every trading day from Jan 3, 2017 to Oct 30, 2026. All five estimators use the same bars.
Benchmark
For SPY, QQQ, IWM, GLD, TLT, XLF, XLK, EEM, AAPL, NVDA and TSLA, from FlashAlpha's 1-minute quote archive: each day's squared 5-minute midpoint returns from 09:30 to 16:00 ET (13:00 on early closes; 78 returns on a full day, 42 on an early close), plus the squared overnight return from the previous close to the 09:30 midpoint, averaged over the window. Sessions with fewer than 30 five-minute returns are skipped; isolated bad quotes (a 10% jump that reverts) are dropped; returns across splits use the split-adjusted previous close. Days without a 09:30 quote, and split days, are excluded. The inputs are in the research pack.
Implied vol
Constant-maturity 30-calendar-day ATM implied vol from FlashAlpha's daily SVI fits (total variance interpolated between the expiries around 30 days). It is compared with the next 21 sessions, which approximates 30 calendar days; the match is not exact.
Conditions
Largest gaps: the window's biggest overnight move is in the symbol's top 10%. Earnings: the window contains the first session after a report. Trending: the 20-session move exceeds 2 standard deviations, measured on the previous 60 sessions. Stress: SPY's 20-session close-to-close vol above 25% (250 days).
How far apart are the estimates?
Table 6. Distance from close-to-close by lookback, 20 symbols, every trading day from Jan 3, 2017 to Oct 30, 2026. Median and 90th percentile of the absolute difference in volatility points, and the median ratio to close-to-close.
Window
Windows
Yang-Zhang median |diff|
Yang-Zhang 90th pct
Yang-Zhang ratio
Parkinson median |diff|
Parkinson 90th pct
Parkinson ratio
Rogers-Satchell ratio
10 sessions
49,420
2.81
9.2
1.029
3.95
13.3
0.822
0.817
20 sessions
49,420
1.97
6.6
1.019
3.98
12.8
0.811
0.806
30 sessions
49,420
1.62
5.5
1.016
4.13
12.4
0.806
0.800
60 sessions
49,420
1.24
4.2
1.015
4.50
12.3
0.796
0.796
Yang-Zhang and close-to-close differ by a median 1.97 points over 20 sessions, and by 6.6 points or more in one window in ten. The gap shrinks with the window (2.81 at 10 sessions, 1.24 at 60) because both converge to the same quantity. The session-only estimators do not converge: Parkinson stays about 4.50 points below at 60 sessions, because missing the overnight move is a bias, not noise.
Figure 9. When do the estimates disagree most?
Median absolute difference from close-to-close, 20-session windows, in volatility points. Each line runs from the calm case (hollow) to the extreme case (filled).
Yang-ZhangParkinsonCalm windowsExtreme windows
Windows with the largest overnight gaps roughly double the Yang-Zhang difference (1.58 to 3.70 points) and multiply the Parkinson difference by five (2.5 to 13.2). Earnings windows and market stress widen both differences too. In stress, Yang-Zhang ran slightly below close-to-close (median ratio 0.964).
Which estimate tracks intraday data best?
Figure 10. Distance from the 5-minute benchmark, by symbol
Mean absolute error over the same 20 sessions, in volatility points. Further left is closer.
Yang-ZhangClose-to-closeParkinson
Table 7: error and bias by symbol
Table 7. Distance from the 5-minute benchmark over the same 20 sessions, 11 symbols. CC = close-to-close, YZ = Yang-Zhang. MAE = mean absolute error in volatility points; bias = median log ratio to the benchmark. The benchmark is itself an estimate (squared 5-minute midpoint returns, 09:30 to 16:00 ET, plus the squared overnight return).
Symbol
Windows
CC MAE
YZ MAE
Parkinson MAE
CC bias
YZ bias
Parkinson bias
SPY
2,311
1.51
0.57
2.96
-1.2%
+1.3%
-21.2%
QQQ
2,320
2.03
0.58
4.07
+0.6%
+0.8%
-21.0%
IWM
2,320
2.33
0.79
4.30
-3.0%
+0.1%
-19.1%
GLD
2,181
1.64
0.49
5.51
+1.8%
+0.6%
-43.2%
TLT
2,452
1.35
0.40
4.58
+0.2%
-0.8%
-42.1%
XLF
2,053
1.93
0.67
4.67
-3.5%
-0.2%
-20.7%
XLK
2,081
2.36
0.64
5.29
+0.8%
-0.6%
-23.2%
EEM
2,175
1.82
0.49
8.47
-1.3%
+0.4%
-55.3%
AAPL
1,557
3.51
0.93
5.91
-3.7%
+0.4%
-18.6%
NVDA
2,021
4.95
1.41
9.11
+0.2%
+0.7%
-18.3%
TSLA
2,189
5.81
1.77
10.49
+2.0%
+0.9%
-17.0%
Yang-Zhang was closer to the benchmark than close-to-close on all 11 symbols, with a median bias of 1.3% or less. The session-only estimators read 17% to 55% low, worst for TLT, GLD and EEM, whose underlying markets trade while US equity exchanges are closed. Treat this as agreement with a second estimate, not distance from the truth: the benchmark shares the overnight returns with close-to-close and Yang-Zhang, and 5-minute sampling has its own noise.
Figure 11. 20-session realized volatility by estimator, 2024-10-01 to 2026-10-30
Annualized percent. Hover or use the arrow keys to read each date. The three session-only estimators move together and sit below close-to-close and Yang-Zhang most of the time.
Measuring the past vs forecasting the future
The sections above measure how well each estimator describes the window it covers. A different question is how well today's estimate predicts the next month. The two can disagree: an estimator can be precise about the past and still be a poor forecast if volatility changes.
We used each estimate as-is, with no fitted parameters, as the forecast of the mean daily variance over the next 21 sessions. That makes the test out of sample by construction. The target was measured two ways: the next 21 squared close-to-close returns (20 symbols) and the 5-minute benchmark (11 symbols). Losses use QLIKE, which ranks forecasts correctly even when the target is a noisy proxy [9]. Because the session-only estimators are biased low, we also report a calibrated version that rescales each estimate using only earlier, fully observed periods.
Table 8. Forecasting the next 21 sessions from today's estimate, out of sample. QLIKE loss relative to close-to-close (median across symbols; below 1 = better), and the number of symbols where the difference is significant at 5% (Diebold-Mariano, Newey-West, 25 lags), before and after a Holm correction across symbols. "Calibrated" rescales each estimate by the ratio of realized to estimated variance over all earlier, fully observed periods (at least 252). All versions are scored on the same dates per symbol (1,255 to 2,178 forecasts).
Target, window
Version
Yang-Zhang
Parkinson
Garman-Klass
Rogers-Satchell
Next 21 sessions' squared returns, 20 symbols, 10-session window
As estimated
0.68 20↑ 0↓ · Holm 20↑ 0↓
1.21 1↑ 4↓ · Holm 0↑ 3↓
1.20 1↑ 4↓ · Holm 1↑ 3↓
1.22 1↑ 4↓ · Holm 0↑ 3↓
Calibrated
0.68 20↑ 0↓ · Holm 20↑ 0↓
0.64 15↑ 0↓ · Holm 15↑ 0↓
0.62 15↑ 0↓ · Holm 14↑ 0↓
0.63 15↑ 0↓ · Holm 14↑ 0↓
Same, 20-session window
As estimated
0.84 13↑ 0↓ · Holm 5↑ 0↓
1.52 0↑ 8↓ · Holm 0↑ 4↓
1.52 0↑ 8↓ · Holm 0↑ 4↓
1.53 0↑ 7↓ · Holm 0↑ 4↓
Calibrated
0.85 12↑ 0↓ · Holm 6↑ 0↓
0.88 9↑ 0↓ · Holm 8↑ 0↓
0.87 9↑ 0↓ · Holm 7↑ 0↓
0.86 10↑ 0↓ · Holm 5↑ 0↓
Same, 60-session window
As estimated
0.95 4↑ 0↓ · Holm 0↑ 0↓
1.71 0↑ 11↓ · Holm 0↑ 5↓
1.77 0↑ 9↓ · Holm 0↑ 5↓
1.79 0↑ 10↓ · Holm 0↑ 4↓
Calibrated
0.95 3↑ 0↓ · Holm 0↑ 0↓
1.01 2↑ 1↓ · Holm 0↑ 0↓
1.00 1↑ 1↓ · Holm 0↑ 0↓
1.00 1↑ 1↓ · Holm 0↑ 0↓
5-minute benchmark, 11 symbols, 10-session window
As estimated
0.64 11↑ 0↓ · Holm 11↑ 0↓
1.36 0↑ 4↓ · Holm 0↑ 3↓
1.35 0↑ 3↓ · Holm 0↑ 3↓
1.34 0↑ 3↓ · Holm 0↑ 3↓
Calibrated
0.67 11↑ 0↓ · Holm 11↑ 0↓
0.64 7↑ 0↓ · Holm 7↑ 0↓
0.64 8↑ 0↓ · Holm 7↑ 0↓
0.70 8↑ 0↓ · Holm 6↑ 0↓
Same, 20-session window
As estimated
0.85 6↑ 0↓ · Holm 3↑ 0↓
1.73 0↑ 7↓ · Holm 0↑ 4↓
1.83 0↑ 5↓ · Holm 0↑ 4↓
1.89 0↑ 5↓ · Holm 0↑ 4↓
Calibrated
0.80 6↑ 0↓ · Holm 3↑ 0↓
0.92 3↑ 0↓ · Holm 0↑ 0↓
0.89 3↑ 0↓ · Holm 2↑ 0↓
0.88 3↑ 0↓ · Holm 2↑ 0↓
Same, 60-session window
As estimated
0.95 1↑ 0↓ · Holm 0↑ 0↓
1.92 0↑ 5↓ · Holm 0↑ 4↓
1.97 0↑ 5↓ · Holm 0↑ 4↓
1.98 0↑ 6↓ · Holm 0↑ 4↓
Calibrated
0.88 0↑ 0↓ · Holm 0↑ 0↓
1.04 0↑ 0↓ · Holm 0↑ 0↓
1.02 1↑ 0↓ · Holm 0↑ 0↓
1.04 2↑ 0↓ · Holm 0↑ 0↓
↑ = significantly better than close-to-close, ↓ = significantly worse, count of symbols. Holm: the same count after controlling the family-wise error rate at 5% across the symbols in that cell.
Short windows: Yang-Zhang's 10-session estimate cut QLIKE loss to 0.68 of close-to-close's and was significantly better on all 20 symbols, all 20 after a Holm correction (and 11 of 11 against the 5-minute benchmark). The calibrated range estimators did about as well (0.64 for Parkinson).
20 sessions: Yang-Zhang 0.84, ahead on 19 of 20 symbols, significant on 13 before and 5 after the correction (6 and 3 of 11 against the benchmark). Treat this as a tendency, not a firm result. Uncalibrated Parkinson was worse than close-to-close (1.52) because of its level bias, and competitive once calibrated (0.88).
60 sessions: the estimator barely matters (0.95 for Yang-Zhang). With long windows, noise averages out and the level of volatility changes faster than any trailing estimate can follow.
A trailing estimate is a baseline, not a model. Our earlier study of volatility forecasts for option sellers tested EWMA, HAR, GARCH and HEAVY on the same symbols; at a one-month horizon none of them beat 30-day implied vol.
What this means for IV-RV comparisons and earnings
Two different quantities both get called the volatility risk premium:
Trailing IV minus RV: implied vol today minus realized vol over the past window. Known today, and what most dashboards show, including FlashAlpha's vrp_20d.
The forward premium: implied vol (or variance) today minus the volatility realized over the option's life. Known only afterwards. Academic measures define it in variance terms and match the horizons, for example the variance swap rate against the realized variance over the contract [10]; others pair implied variance with the past month's realized variance [11].
Table 9. 30-day ATM implied vol minus trailing 20-session realized vol, by estimator. 11 symbols, 2017 to 2026. Spread statistics use all 25,874 symbol-days with today's inputs; the forward premium (implied vol minus the 5-minute benchmark over the next 21 sessions, about 30 calendar days) and the correlation use the 23,326 days whose next 21 sessions are known.
Realized vol from
Median spread
Positive
Sign differs vs CC
4-point rule differs vs CC
Corr. with forward premium
Close-to-close
+1.3 pts
62%
n/a
n/a
+0.04
Yang-Zhang
+1.1 pts
63%
17.3%
13.8%
+0.02
Parkinson
+5.5 pts
93%
31.4%
43.2%
+0.08
Garman-Klass
+5.6 pts
93%
31.9%
43.9%
+0.07
Rogers-Satchell
+5.6 pts
92%
32.2%
44.4%
+0.06
With close-to-close, the 20-session spread was positive on 62% of days (median 1.3 points); with Yang-Zhang on 63% (median 1.1); with Parkinson on 93% (median 5.5), because Parkinson misses the overnight move. A rule such as "sell when IV exceeds RV by 4 points" gives a different answer than with close-to-close on 13.8% of days with Yang-Zhang and 43.2% with Parkinson. None of the trailing spreads tracked the forward premium closely (correlations 0.02 to 0.08); the forward premium itself had a median of 1.4 points and was positive on 65% of days. Read a trailing spread as a description of the recent past, and state which estimator it uses.
Earnings. Trailing windows and implied vol treat a scheduled event differently. Before a report, 30-day implied vol prices the coming move and trailing realized vol does not, so the spread looks wide. After the report, the trailing window contains the move and implied vol no longer prices it. NVDA on November 26, 2025: 30-day implied vol was 39.9% (down from 52.6% before the report). Against the 10-session window above, IV minus RV was +0.7 points with close-to-close, -6.1 with Parkinson and -22.0 with Yang-Zhang; over 20 sessions, -2.2 and -14.7. Three estimators, three conclusions, and all of them mostly measure an event that has passed. To judge the event itself, compare the move implied for the next report with the stock's past earnings moves, which is what FlashAlpha's /v1/earnings/vrp/{symbol} returns (Alpha).
Data conventions and failure cases
Two correct implementations can disagree by several points because of data conventions, not formulas. State these when you publish a number, and check them when you reconcile with another source.
Table 10. Calculation specification used on this page and in the downloads.
Item
This page
Why it matters
Session and time zone
US regular session, 09:30 to 16:00 ET
Extended-hours prints widen the high-low range and move the open, which shifts variance between the overnight and session terms.
Price type
Exchange trades (official open and close)
Trade highs and lows include bid-ask bounce (higher range); quote midpoints remove it. One-minute midpoints miss extremes (lower range).
Adjustments
Split-adjusted, not dividend-adjusted
An unadjusted split is a huge false overnight return. A cash dividend appears as a small negative gap on the ex-date; dividend-adjusting removes it.
Missing and short sessions
Holidays skipped; half-days kept as sessions
A half-day has a narrower range; a missing session doubles the next overnight return.
Invalid candles
Reject if H < max(O, C), L > min(O, C) or any price ≤ 0
One bad high lifts every range estimator; Figure 5 shows how much.
Returns
Natural log; o, c, r as defined above
Simple returns give slightly different numbers.
Denominators
n − 1 for close-to-close, so², sc²; n for Parkinson, Garman-Klass, Rogers-Satchell
Matters at short windows: 9 vs 10 is 11%.
Observations
An n-bar window needs n + 1 closes
A 20-session close-to-close or Yang-Zhang window needs the close before the first bar.
Annualization
100 × √(252 × daily variance)
365 for markets that trade every day; mixing conventions changes vol by about 20%.
Units and rounding
Percent, rounded to 2 decimals for display only
Round prices only at the input stage, never intermediate terms.
Failure cases to test for: a high or low far outside its neighbours (bad print); an open equal to the previous close every day (a feed that fills missing opens, which zeroes the overnight term); a day with the open, high, low and close all equal (no trades); a split day without adjustment; and windows that mix trade-based and quote-based bars. Each one changes the range estimators far more than close-to-close.
Python reference implementation and downloads
The reference implementation computes all five estimators from arrays and keeps data retrieval separate. It reproduces Table 3 exactly and, run on FlashAlpha's own bars, matched every value of the live /v1/volatility/realized response for SPY and NVDA on November 10, 2026 (all 15 values, to 0.01).
import numpy as np
def components(o, h, l, c, prev_c):
o, h, l, c, prev_c = (np.log(np.asarray(x, float)) for x in (o, h, l, c, prev_c))
oc, u, d = c - o, h - o, l - o
return {"o": o - prev_c, "c": oc, "r": (o - prev_c) + oc,
"hl2": (h - l) ** 2, "gk": 0.5 * (h - l) ** 2 - (2 * np.log(2) - 1) * oc ** 2,
"rs": u * (u - oc) + d * (d - oc)}
def window_variances(comp):
n = len(comp["o"])
k = 0.34 / (1.34 + (n + 1) / (n - 1))
rs = comp["rs"].mean()
return {"close_to_close": comp["r"].var(ddof=1),
"parkinson": comp["hl2"].sum() / (4 * n * np.log(2)),
"garman_klass": comp["gk"].mean(),
"rogers_satchell": rs,
"yang_zhang": comp["o"].var(ddof=1) + k * comp["c"].var(ddof=1) + (1 - k) * rs}
annualize = lambda var: 100 * np.sqrt(252 * var)
# NVDA, Table 2 (prev_c is the previous row's close; the first is Nov 12's 193.80)
# expected: close_to_close 39.17, parkinson 45.95, garman_klass 44.58,
# rogers_satchell 43.68, yang_zhang 61.86
To run it on any symbol with public data, pin the download settings: in yfinance 1.x, yf.download returns multi-level columns and adjusts prices by default. yf.Ticker("SPY").history(period="1y", auto_adjust=False) returns flat Open, High, Low, Close columns, split-adjusted but not dividend-adjusted, which is the convention used here. Tested with yfinance 1.2.0, pandas 2.3.3 and NumPy 2.3.5.
The files are free with a FlashAlpha account. Sign in or create one, and the download starts. Everything on this page stays open to read.
The research pack (v1.1) holds everything needed to rerun both studies: the code, the FlashAlpha benchmark and implied vol inputs for the 11 benchmark symbols, the published results, and manifest.json with the SHA-256 hash, row count and date range of every input file. The Yahoo bars are downloaded by fetch.py; compare them with the manifest, because Yahoo can revise history. study.py --public-only reruns the agreement, condition, decomposition and squared-return forecast results from the Yahoo bars alone.
Get all five estimators from the FlashAlpha API
/v1/volatility/realized/{symbol} returns close-to-close, Parkinson, Garman-Klass, Rogers-Satchell and Yang-Zhang over 10, 20 and 30 sessions in one call, using the definitions on this page. It needs the Alpha plan. The API computes from split-adjusted daily bars built from FlashAlpha's quote archive, so its values can differ from a calculation on exchange trade bars such as the Yahoo bars in this study.
import httpx
r = httpx.get("https://lab.flashalpha.com/v1/volatility/realized/NVDA",
headers={"X-Api-Key": "YOUR_API_KEY"}, timeout=30)
r.raise_for_status()
est = r.json()["estimators"]
for name in ("close_to_close", "parkinson", "garman_klass", "rogers_satchell", "yang_zhang"):
print(f"{name:16s} rv10 {est[name]['rv10']:6.2f} rv20 {est[name]['rv20']:6.2f} rv30 {est[name]['rv30']:6.2f}")
Two related endpoints: /v1/volatility/forecast/{symbol} (Alpha) returns EWMA, HAR, GARCH and realized-measure model forecasts for 1, 5 and 21 sessions next to 30-day implied vol, and /v1/volatility/{symbol} (Growth) returns close-to-close realized vol over 5 to 60 days with ATM implied vol and IV-RV spreads. To compare estimators on one symbol, use the CC and YZ values from the same /realized response so the bars are identical.
Alpha plan
Skip the plumbing: five estimators and the forecast models, one API key
Realized volatility by estimator, EWMA, HAR, GARCH and HEAVY forecasts next to 30-day implied vol, earnings VRP and historical replay.
The market study covers 20 large, liquid US symbols; smaller stocks have wider spreads and more bad prints, which favours close-to-close.
The bars (exchange trades) and the benchmark (quote midpoints) come from different sources, so part of the measured distance is source difference.
Rolling windows overlap; the forecast tests correct for this with Newey-West variances, the descriptive percentiles do not.
QLIKE ranks forecasts correctly when the target is conditionally unbiased for the variance [9]. Squared returns meet that; the 5-minute benchmark does only approximately, so we report both targets.
The testing family for the Holm correction (symbols within each target, window and estimator) was chosen after the first release, as a robustness check.
Earnings dates come from Yahoo Finance and were not checked against company filings.
The simulation uses constant volatility and normal returns; real returns have fat tails and volatility clustering.
Close-to-close volatility is the standard deviation of daily close-to-close log returns. Yang-Zhang combines three pieces from the open, high, low and previous close: the variance of overnight returns, the variance of open-to-close returns and the Rogers-Satchell range term, weighted by k = 0.34 / (1.34 + (n+1)/(n-1)). Both estimate the same daily variance; Yang-Zhang needs fewer days for the same precision: in theory 7.2 to 8.2 times fewer at a 20-day window, depending on how much of the variance happens overnight.
No. 14 is its maximum for a 2-day window. Under the paper's assumptions its efficiency is 1/(f^2 + k(1 - f)^2), where f is the share of daily variance that happens overnight: 12.8 at 2 days and 7.2 at 20 days with no overnight variance, and at most 1 + 1/k (13.8 and 8.2). With 40% of variance overnight, as for many large US stocks, it is about 4.8 at 20 days, and our simulation measured 4.75. One bad 5% print a year cuts it to about 2.3 times.
On the same bars, Yang-Zhang minus close-to-close equals (1 - k)(RS - s_c^2) - 2 Cov(o, c). Yang-Zhang comes out lower when overnight gaps continue in the same direction during the session (positive covariance) or when sessions trade narrow ranges with directional closes. The difference is not a measure of overnight risk. In our 2017-2026 sample, Yang-Zhang was below close-to-close in 33% to 53% of 20-session windows, depending on the symbol.
They use only the trading session, so they miss the move from the previous close to the open. For large US stocks and equity ETFs that overnight move carries 37% to 43% of daily variance. On 20 symbols from 2017 to 2026 the session-only estimators read a median 19% below close-to-close over 20 days. Sampling prices at discrete times lowers them further, because recorded highs and lows fall inside the true ones.
Use one estimator consistently and say which. For US stocks and ETFs with clean bars, Yang-Zhang is the better default. The choice matters: switching from close-to-close to Yang-Zhang flipped the sign of the 20-day IV-RV spread on 17.3% of days, and to Parkinson on 31.4%, because Parkinson makes the spread look positive almost every day. A trailing spread describes the past; the premium you earn depends on volatility over the option's life.
It depends on the precision you need. For a stock whose true volatility is 20%, a 20-session close-to-close estimate has a typical error of about 3.2 volatility points under ideal conditions, against 1.2 for Yang-Zhang. Short windows are where Yang-Zhang helps most: as a forecast of the next month it beat close-to-close on all 20 symbols at 10 sessions, while at 60 sessions the estimator barely mattered.
Yes. With no overnight break the open is close to the previous close, so the gap that hurts Parkinson, Garman-Klass and Rogers-Satchell on stocks mostly disappears, and those estimators become precise choices. Yang-Zhang still works and then relies mostly on its session and range terms. Annualize with 365 days instead of 252, and check where the data provider starts and ends its daily bar.
Yes. /v1/volatility/realized/{symbol} returns close-to-close, Parkinson, Garman-Klass, Rogers-Satchell and Yang-Zhang over 10, 20 and 30 sessions on the Alpha plan, with the formulas on this page. /v1/volatility/{symbol} on the Growth plan returns close-to-close realized volatility over 5 to 60 days alongside ATM implied volatility and IV-RV spreads, and /v1/volatility/forecast/{symbol} on Alpha returns model forecasts.
References
Parkinson, M. (1980). The extreme value method for estimating the variance of the rate of return. The Journal of Business, 53(1), 61-65. https://doi.org/10.1086/296071
Garman, M. B., & Klass, M. J. (1980). On the estimation of security price volatilities from historical data. The Journal of Business, 53(1), 67-78. https://doi.org/10.1086/296072
Rogers, L. C. G., & Satchell, S. E. (1991). Estimating variance from high, low and closing prices. The Annals of Applied Probability, 1(4), 504-512. https://doi.org/10.1214/aoap/1177005835
Yang, D., & Zhang, Q. (2000). Drift-independent volatility estimation based on high, low, open, and close prices. The Journal of Business, 73(3), 477-492. https://doi.org/10.1086/209650
Carr, P., & Wu, L. (2009). Variance risk premiums. The Review of Financial Studies, 22(3), 1311-1341. https://doi.org/10.1093/rfs/hhn038
Bollerslev, T., Tauchen, G., & Zhou, H. (2009). Expected stock returns and variance risk premia. The Review of Financial Studies, 22(11), 4463-4492. https://doi.org/10.1093/rfs/hhp008
Shu, J., & Zhang, J. E. (2006). Testing range estimators of historical volatility. Journal of Futures Markets, 26(3), 297-313. https://doi.org/10.1002/fut.20197
Alizadeh, S., Brandt, M. W., & Diebold, F. X. (2002). Range-based estimation of stochastic volatility models. The Journal of Finance, 57(3), 1047-1091. https://doi.org/10.1111/1540-6261.00454
Further reading on range estimators in real markets: Shu and Zhang find the estimators close to integrated variance on S&P 500 data but sensitive to opening jumps and large drift [12]; Alizadeh, Brandt and Diebold show range-based proxies are efficient and robust to microstructure noise [13].
How to cite this page
Article: Dobrowolski, T. (2026). Yang-Zhang vs close-to-close volatility: Formulas, worked example and a 10-year study (Version 1.1). FlashAlpha. https://flashalpha.com/articles/yang-zhang-vs-close-to-close-realized-volatility
Research pack: FlashAlpha (2026). Realized volatility estimator study (Version 1.1) [Data set and code]. https://flashalpha.com/downloads/realized-volatility-estimators/realized-volatility-study-v1.1.zip
Author: Tomasz Dobrowolski, Quant Engineer. Results last re-run: 2026-11-10.
@misc{flashalpha_yz_cc_2026,
author = {Dobrowolski, Tomasz},
title = {Yang-Zhang vs Close-to-Close Volatility: Formulas, Worked Example and a 10-Year Study},
year = {2026},
version = {1.1},
publisher = {FlashAlpha},
url = {https://flashalpha.com/articles/yang-zhang-vs-close-to-close-realized-volatility},
note = {Accessed: YYYY-MM-DD}
}
@misc{flashalpha_rv_study_2026,
author = {FlashAlpha},
title = {Realized Volatility Estimator Study},
year = {2026},
version = {1.1},
howpublished = {Data set and code},
url = {https://flashalpha.com/downloads/realized-volatility-estimators/realized-volatility-study-v1.1.zip}
}
Changelog. Version 1.1 (2026-11-10): Yang-Zhang theory comparator corrected (\(1/k\) with no gaps; \(1 + 1/k\) is the maximum), Holm-adjusted forecast counts, raw and calibrated forecasts scored on identical dates, IV-RV signal statistics on all days with today's inputs, the benchmark specified in full, and its inputs added to the research pack with a manifest and a public-only mode. Version 1.0 (2026-11-10): rewritten as a reference with corrected efficiency figures (Yang-Zhang 1 + 1/k; Parkinson 4.9; Rogers-Satchell 6.0), the session-only Garman-Klass form identified as such, close-to-close correctly described as unaffected by drift, a hand-checkable NVDA example replacing an illustrative one, and two original studies. First published March 17, 2026.
Conclusion
Close-to-close and Yang-Zhang measure the same close-to-close variance; Yang-Zhang gets there with fewer days by reading the open, high and low, and it counts the overnight move that Parkinson, Garman-Klass and Rogers-Satchell miss. The efficiency gain at 20 days is 7.2 times with no overnight gaps and at most 8.2, not 14, and it shrinks when gaps dominate or the highs and lows are dirty. On real data the choice moves a 20-day reading by 1.97 points at the median and much more around gaps and earnings, enough to flip an IV-RV signal on 17.3% of days. Pick one estimator, state it, and check your numbers against the worked example. Or pull all five from the realized volatility endpoint on the Alpha plan.