GK Vol -- Garman-Klass Volatility Estimator

Contents


Overview

Garman-Klass Volatility is the most efficient single-estimator for historical volatility because it uses all four OHLC prices -- open, high, low, and close -- from each candle. Developed by Mark Garman and Michael Klass in 1980, it extracts the maximum amount of volatility information from standard OHLC data.

The formula incorporates two components:

GK = sqrt( (1/N) * sum( 0.5 * ln(H/L)^2 - (2*ln(2) - 1) * ln(C/O)^2 ) )

The first term ln(H/L)^2 captures the intraday range (similar to Parkinson). The second term ln(C/O)^2 captures the open-to-close movement. By combining both, Garman-Klass achieves approximately 7.4x the efficiency of close-to-close volatility -- meaning it produces equally accurate estimates with far fewer data points.

This makes Garman-Klass the gold standard among single-estimator volatility measures. It is strictly better than Parkinson because it uses additional information (open and close) at no extra cost. The only limitation it does not address is overnight gaps -- the drift between one candle's close and the next candle's open. For that, you need Yang-Zhang volatility.


Format

gk_vol_{period}

The period defines how many candles the estimator averages over.

ExamplePeriodUse Case
gk_vol_1010Short-term -- tracks recent volatility changes quickly
gk_vol_2020Standard -- the recommended default for most strategies
gk_vol_5050Long-term -- captures the broader volatility regime, very smooth

Period range: 5 to 500.

Value range: 0 to infinity (annualized volatility, always positive). Typical crypto range: 0.005 to 0.15.


Understanding GK Vol Values

Like Parkinson, GK Vol values are annualized volatility estimates expressed as decimals. They are not bounded to a fixed range. Values depend on the asset, timeframe, and market conditions.

GK Vol RangeInterpretation
Below 0.01Ultra-low volatility -- extreme squeeze. The market is barely moving on any dimension (range or body). Strong breakout potential.
0.01 -- 0.04Low volatility -- calm, orderly market. Ideal environment for squeeze-based entry strategies.
0.04 -- 0.08Moderate volatility -- normal trading conditions for major crypto pairs. Healthy for trend-following strategies.
0.08 -- 0.15High volatility -- large moves with significant candle bodies and wicks. Elevated risk per trade.
Above 0.15Extreme volatility -- crisis or euphoria. Exercise extreme caution with new entries.

Note

GK Vol tends to produce slightly higher values than Parkinson because it incorporates the open-close component. Do not use Parkinson thresholds for GK Vol directly -- recalibrate through backtesting. The ranges above are approximate for major crypto pairs on hourly timeframes.


Understanding Operators with GK Vol

Each operator behaves differently with GK Vol. As a filter indicator measuring market conditions rather than direction, GK Vol is almost always combined with directional triggers.

< (Less Than) -- State-Based

What it does: The trigger is true on every candle where GK Vol is below the threshold.

On the chart: Volatility is compressed across all dimensions -- small wicks and small candle bodies. The market is coiling. This state-based trigger stays active for as long as GK Vol remains below the threshold.

[[actions.triggers]]
indicator = "gk_vol_20"
operator = "<"
target = "0.03"
timeframe = "1h"

Typical use: Squeeze detection. When GK Vol is low, both the range and the body of candles are small. This is an even more comprehensive squeeze signal than Parkinson alone, because it confirms that neither the wicks nor the closes are showing significant movement.

> (Greater Than) -- State-Based

What it does: The trigger is true on every candle where GK Vol is above the threshold.

On the chart: Volatility is elevated. Candles have large bodies, large wicks, or both. The market is making decisive moves.

[[actions.triggers]]
indicator = "gk_vol_20"
operator = ">"
target = "0.08"
timeframe = "1h"

Typical use: High-volatility filter. Either avoid entries during chaotic conditions, or require that enough volatility exists for trades to be profitable after fees and slippage.

cross_below -- Event-Based

What it does: Fires once, at the exact candle where GK Vol transitions from above the threshold to below it. The previous candle had GK Vol >= the target, and the current candle has GK Vol < the target.

[[actions.triggers]]
indicator = "gk_vol_20"
operator = "cross_below"
target = "0.04"
timeframe = "1h"

Typical use: Detect the transition into a low-volatility regime. The market has just calmed down after a volatile period. This can signal the beginning of a consolidation phase that will eventually resolve with a breakout.

cross_above -- Event-Based

What it does: Fires once, at the exact candle where GK Vol transitions from below the threshold to above it. The previous candle had GK Vol <= the target, and the current candle has GK Vol > the target.

[[actions.triggers]]
indicator = "gk_vol_20"
operator = "cross_above"
target = "0.06"
timeframe = "1h"

Typical use: Detect the moment volatility expands. This captures the exact transition from a quiet market to an active one. A volatility expansion often marks the start of a new trend -- combine with a directional indicator (RSI, ROC, EMA cross) to determine which side to trade.

Why: GK Vol produces floating-point values calculated to many decimal places. Exact equality will almost never be true. Use < or > instead.

Choosing the right operator

  • Use < for squeeze detection -- low GK Vol means the market is quiet on all fronts.
  • Use > to filter for sufficient volatility or to block entries during chaos.
  • Use cross_below / cross_above to detect the exact moment a volatility regime shifts.

TOML Examples

Moderate Volatility with Trend Entry

Enter when GK Vol shows the market is in a healthy range (not too quiet, not too chaotic) and the EMA signals a bullish trend.

[[actions]]
type = "open_long"
amount = "100 USDC"

  [[actions.triggers]]
  indicator = "gk_vol_20"
  operator = ">"
  target = "0.02"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "gk_vol_20"
  operator = "<"
  target = "0.08"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "ema_21"
  operator = ">"
  target = "ema_55"
  timeframe = "1h"

GK Vol Band Filter -- Goldilocks Zone

Only trade when volatility is in the "goldilocks zone" -- enough movement for profitable trades, but not so much that risk is uncontrollable. Combine with an RSI dip entry.

[[actions]]
type = "open_long"
amount = "100 USDC"

  [[actions.triggers]]
  indicator = "gk_vol_20"
  operator = ">"
  target = "0.025"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "gk_vol_20"
  operator = "<"
  target = "0.07"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "rsi_14"
  operator = "<"
  target = "30"
  timeframe = "1h"

EMA Cross with Volatility Confirmation

Only act on an EMA crossover when GK Vol confirms the market has enough energy for the trend to follow through.

[[actions]]
type = "open_long"
amount = "100 USDC"

  [[actions.triggers]]
  indicator = "ema_9"
  operator = "cross_above"
  target = "ema_21"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "gk_vol_20"
  operator = ">"
  target = "0.03"
  timeframe = "1h"

Volatility Regime Change Detection

Detect the exact moment the market transitions from low to higher volatility. When GK Vol crosses above the threshold while momentum is positive, ride the expansion.

[[actions]]
type = "open_long"
amount = "75 USDC"

  [[actions.triggers]]
  indicator = "gk_vol_20"
  operator = "cross_above"
  target = "0.04"
  timeframe = "1h"

  [[actions.triggers]]
  indicator = "roc_10"
  operator = ">"
  target = "1"
  timeframe = "1h"

Tips

Most efficient single estimator

Garman-Klass is theoretically 7.4x more efficient than close-to-close volatility, meaning it needs far fewer candles to produce an equally accurate estimate. This makes it the best single indicator for volatility measurement when you have standard OHLC data. If you can only pick one volatility estimator, GK Vol is the strongest choice.

Compare across all three volatility estimators

Running Parkinson, GK Vol, and Yang-Zhang simultaneously gives you a complete volatility picture. If all three agree that volatility is low, you have a high-confidence squeeze. If Parkinson is low but GK Vol is moderate, it means the open-close moves are significant even though the high-low range is small -- the market is trending within its range. These divergences provide additional strategic insight.

Asset-specific calibration is mandatory

Like all volatility estimators, GK Vol values differ dramatically between assets. BTC/USDC might show GK Vol of 0.04 in normal conditions, while a volatile altcoin might sit at 0.12. Never reuse thresholds across different trading pairs. Backtest on each specific pair and timeframe to determine what "low," "moderate," and "high" mean for that asset.

Does not account for overnight gaps

Garman-Klass assumes that the open of each candle equals the close of the previous candle -- it ignores any gap between them. While cryptocurrency markets trade 24/7 (minimizing true overnight gaps), there can still be significant jumps between candle closes and opens during exchange maintenance, liquidity gaps, or fast-moving markets. If gap-driven volatility is important to your strategy, use Yang-Zhang volatility which explicitly accounts for inter-candle drift.