What is Volatility O-H-L-C?
Volatility O-H-L-C estimates annualised volatility using the Garman-Klass method. Instead of looking only at closes, it uses all four prices of each bar, the range from high to low and the move from open to close, so it picks up how far price travelled inside the bar. The result is averaged over Length bars, scaled to a year and plotted in its own pane.
It is an estimate of how much price has been varying, not a forecast and not a direction. Its assumptions about how price moves inside a bar do not always hold, and when they fail the reading is off rather than merely noisy.
How to use Volatility O-H-L-C
- Rising line. Recent bars have had wider ranges relative to price. Volatility is increasing, whichever way price is moving.
- Falling or low line. Bars are getting tighter. The market is quietening.
- Reading the number. The value is a fraction of price per year, not a percentage. A reading of 0.6 means about 60% annualised volatility.
- Against close-to-close. Plotted next to Volatility Close-to-Close, this line is usually steadier for the same window, because each bar contributes more information.
These are ways to read volatility, not entry signals on their own.
Settings
| Setting | Default | What it changes |
|---|---|---|
| Length | 10 | Bars the per-bar estimate is averaged over. Shorter reacts sooner; longer is smoother. Minimum 1. |
| Days Per Year | 252 | The number of bars treated as one year when annualising. 252 is a trading-day count; crypto trades every day, so 365 is the natural figure on a daily chart of a crypto market. It only rescales the line. From 1 to 100000. |
Adjust the averaging window and the annualisation factor in the indicator settings.
Calculation
For each bar, the Garman-Klass term combines the log of the high-low range with the log of the open-close move. The indicator averages that and scales it to a year:
range = ln(high / low)
body = ln(close / open)
gk = 0.5 * range^2 - (2 * ln(2) - 1) * body^2
vol = sqrt( SMA(gk, 10) * 252 )
The constant 2 * ln(2) - 1, about 0.386, is not a tuning value. It comes from the method's model of price as a continuous random walk with no drift and no gaps, and the method depends on that model holding. A 24-hour market such as crypto has fewer gaps than an exchange that closes, which suits it better.
The second term is subtracted, so a bar that closes far from its open relative to its range can give a negative term. The indicator does not guard against this. If the window's average turns negative, the square root has no value and the line shows a gap for that bar.
The annualisation assumes each bar is one of the Days Per Year periods. On a daily chart that holds; on an hourly chart the absolute level is not a true annual figure, although its shape over time is still useful.
Limitations
- It rests on a model. The estimator assumes price wanders randomly without drift or gaps. Strong trends, halts, gaps and thin order books break that assumption.
- Gaps in the line. When bars close far from their open relative to their range, the window average can turn negative and the line shows no value.
- The annual figure depends on timeframe. The scaling is right only when each bar is one Days Per Year period. Change the setting or read the line for its shape on intraday charts.
- The live candle moves. The current bar's high, low and close can still change, so its value moves until that bar closes.
- It is not a strategy. It measures volatility. It gives no entry, exit, sizing or risk management on its own.
Frequently asked questions
It is an annualised volatility estimate using the Garman-Klass method, which reads the open, high, low and close of every bar. Because the high and low show how far price travelled within the bar, it extracts more information per bar than a measure based on closes alone.
The line is a fraction of price per year, so 0.4 means about 40% annualised volatility. Read rises and falls against its own history on the same chart and timeframe; the absolute level is only a true annual figure when each bar is one of the Days Per Year periods.
Yes. The indicator declares two inputs: Length, default 10 with a minimum of 1, and Days Per Year, default 252, from 1 to 100000. Open the indicator's settings on the chart to change them. For a daily crypto chart, 365 matches a market that trades every day.
No. Each value uses only that bar and the ones before it, so values on closed bars are not revised. The current candle's reading moves while that candle is live and settles when it closes.
The per-bar term subtracts the size of the open-to-close move. If bars in the window close far from their open compared with their range, the average can go below zero, and the square root of a negative number has no value. The indicator leaves that bar blank rather than inventing a figure.
Use the Add to chart button at the top of this page. It opens BTC/USDT on Binance in the Altrady Charts terminal with the built-in Volatility O-H-L-C already applied. On any other market, open the indicator picker on the chart and choose Volatility O-H-L-C from the Volatility group.