Skip to content
On this page
  1. Key Takeaways
  2. What It Is
  3. The Intuition
  4. How It Works
  5. Worked Example
  6. Common Mistakes
  7. Frequently Asked Questions
  8. Sources
  9. Disclaimer
← All concepts
Technical AnalysisAdvanced5 min read

Garman-Klass Volatility: A Sharper OHLC Estimator

The Garman-Klass volatility estimator uses the daily open, high, low, and close to measure realised variance with far less sampling error than the standard close-to-close formula. It was published by Mark Garman and Michael Klass in 1980 and remains one of the most widely cited range-based estimators in quant finance.

Key Takeaways

  • Garman-Klass volatility combines the high-low range with the open-close move to estimate daily variance from OHLC bars.
  • The estimator is roughly 7 to 8 times more efficient than close-to-close variance under its assumptions.
  • It assumes zero drift and no overnight gap, so trending markets and gappy assets bias the result upward.
  • Use it on liquid intraday data where the recorded high and low are reliable, not on illiquid bars with stale prints.

Key Takeaways

  • Garman-Klass volatility combines the high-low range with the open-close move to estimate daily variance from OHLC bars.
  • The estimator is roughly 7 to 8 times more efficient than close-to-close variance under its assumptions.
  • It assumes zero drift and no overnight gap, so trending markets and gappy assets bias the result upward.
  • Use it on liquid intraday data where the recorded high and low are reliable, not on illiquid bars with stale prints.

What It Is

Garman-Klass volatility is a daily variance estimator that reads all four OHLC prices instead of only the close. Each trading day produces a single variance number, which you typically average over a rolling window and annualise by multiplying by the square root of the number of trading days per year.

The output sits in the same units as any other historical volatility figure, so you can plug it into option pricing, position sizing, or risk reports as a drop-in replacement for close-to-close vol.

The Intuition

The close-to-close formula throws away most of the information in a daily bar. A day that opens at 100, prints a high of 110, a low of 95, and closes at 100 looks identical to a flat day, but the realised volatility was clearly very different.

Garman and Klass started from a Brownian-motion model of intraday price and asked which combination of OHLC observations minimises the variance of the volatility estimate itself. Adding the high-low range alone gives the Parkinson estimator. Adding the open-close move on top, with the right weights, gives Garman-Klass and a further efficiency gain.

How It Works

The estimator for a single trading day, using natural logs of prices, is:

sigma^2_GK = 0.5 * (ln(H/L))^2 - (2*ln(2) - 1) * (ln(C/O))^2

Where H, L, O, and C are the high, low, open, and close. The first term is the squared log range, scaled. The second term subtracts a piece of the open-close move because the high-low range already carries some of that information; subtracting prevents double counting.

Average the daily values over N days to get a rolling variance estimate, then take the square root to get volatility. Annualise by multiplying by sqrt(252) for daily US equity data.

The constant 2*ln(2) - 1, roughly 0.386, is not arbitrary. Garman and Klass derived it from a minimum-variance condition on the joint distribution of the open-close move and the high-low range under geometric Brownian motion with zero drift.

Worked Example

Take one day on a hypothetical stock: open 100, high 104, low 99, close 102.

ln(H/L) = ln(104/99)  = 0.04930
ln(C/O) = ln(102/100) = 0.01980

(ln(H/L))^2 = 0.002430
(ln(C/O))^2 = 0.000392

sigma^2_GK = 0.5 * 0.002430 - (2*0.6931 - 1) * 0.000392
           = 0.001215 - 0.3863 * 0.000392
           = 0.001215 - 0.000151
           = 0.001064

Daily standard deviation is sqrt(0.001064) = 3.26%. Annualised, that is 3.26% * sqrt(252) = 51.7%.

For comparison, the close-to-close return that day was only 2.0%, so a one-day close-to-close estimate would have read about 31.5% annualised. The range-based number captures the swing the bar actually delivered.

Common Mistakes

  1. Applying it to gappy assets. Garman-Klass assumes no overnight jump. If the open is far from the prior close, the day's variance is split across the gap and the intraday range, and the formula misses the gap piece. Use Yang-Zhang for assets with persistent overnight moves.

  2. Using it in trending markets. The estimator assumes zero drift. A strongly trending bar inflates the range relative to the diffusion, and Garman-Klass biases up. Rogers-Satchell fixes this case.

  3. Reading the high and low naively in thin sessions. A single thin print can set a spurious high or low and blow up the estimator. Filter or use exchange-cleaned OHLC for illiquid names.

  4. Forgetting to scale. The raw formula is daily variance. Annualising requires multiplying by sqrt(252) for daily bars and adjusting for any other frequency.

  5. Comparing across formulas without recalibration. Garman-Klass returns lower noise than close-to-close at the same window length. If you switch estimators inside a system, retune your bands and thresholds.

Frequently Asked Questions

What is Garman-Klass volatility in simple terms? Garman-Klass volatility estimates how much a stock moved in a day by using the open, high, low, and close together. It produces a steadier reading than using only daily closes.

How does Garman-Klass volatility affect investment decisions? Lower-noise volatility feeds straight into option pricing, stop placement, and position sizing. Using Garman-Klass instead of close-to-close lets you size more accurately at shorter window lengths.

What is a real-world example of Garman-Klass volatility? Many risk systems publish a daily Garman-Klass figure on major indices like the S&P 500. The estimator is built into common data libraries and TradingView indicators.

How can investors use Garman-Klass effectively? Pair it with a regime filter and only trust the number when bars are liquid and gaps are small. For gappy or trending assets, switch to Yang-Zhang or Rogers-Satchell.

How is Garman-Klass different from Parkinson volatility? Parkinson uses only the high-low range. Garman-Klass adds the open-close move with a calibrated weight, which lowers estimation variance further but adds the same drift and no-gap assumptions.

Sources

  1. Garman, M.B. and Klass, M.J. (1980). "On the Estimation of Security Price Volatilities from Historical Data." Journal of Business, 53(1), 67-78. https://www-2.rotman.utoronto.ca/~kan/3032/pdf/FinancialAssetReturns/Garman_Klass_JB_1980.pdf
  2. CME Group reprint of Garman & Klass (1980). https://www.cmegroup.com/trading/fx/files/a_estimation_of_security_price.pdf
  3. Portfolio Optimizer. "Range-Based Volatility Estimators: Overview and Examples of Usage." https://portfoliooptimizer.io/blog/range-based-volatility-estimators-overview-and-examples-of-usage/
  4. IVolatility Education. "Parkinson's Historical Volatility." https://www.ivolatility.com/education/parkinsons-historical-volatility/

Disclaimer

This article is educational content only and is not financial advice. Nothing here is a recommendation to buy, sell, or hold any security. Consult a licensed advisor before making investment decisions.

The IWP Substack

You understand the concept. Now see it applied.

The Investing With Purpose Substack turns ideas like this into research and risk-managed trade plans on real stocks, updated every week.

Read on Substack (opens in a new tab)

Related concepts