OPEN-SOURCE SCRIPT

Garman & Klass Estimator Historical Volatility Bands [Loxx]

Updated
Garman & Klass Estimator Historical Volatility Bands [Loxx] are constructed using:

  • Average as the middle line.
  • Upper and lower bands using the Garman & Klass Estimator Historical Volatility (instead of "regular" Historical Volatility ) for bands calculation.


What is Garman & Klaus Historical Volatility?
Garman Klass is a volatility estimator that incorporates open, low, high, and close prices of a security. The Garman and Klass estimator for estimating historical volatility assumes Brownian motion with zero drift and no opening jumps (i.e. the opening = close of the previous period). This estimator is 7.4 times more efficient than the close-to-close estimator. Garman-Klass volatility extends Parkinson's volatility by taking into account the opening and closing price. As markets are most active during the opening and closing of a trading session, it makes volatility estimation more accurate. Garman and Klass also assumed that the process of price change is a process of continuous diffusion (geometric Brownian motion). However, this assumption has several drawbacks. The method is not robust for opening jumps in price and trend movements. Despite its drawbacks, the Garman-Klass estimator is still more effective than the basic formula since it takes into account not only the price at the beginning and end of the time interval but also intraday price extremums.

The Garman & Klass Estimator is as follows:

GKE = sqrt((Z/n)* sum((0.5*(log(high./low)).^2) - (2*log(2) - 1).*(log(close./open)).^2))

The color of the middle line, unlike the bands colors, has 3 colors. When colors of the bands are the same, then the middle line has the same color, otherwise it's white.

Included
  • Alerts
  • Signals
  • Loxx's Expanded Source Types
  • Bar coloring


Related indicators:
Parkinson's Historical Volatility Bands
Parkinson's Historical Volatility Bands [Loxx]
Release Notes
Garman & Klass Estimator Historical Volatility isn't meant for intraday time frames, but you can use this for intraday now. You'll have to adjust the multiplier value to accommodate the asset. Forex will generally require a number of 10, other tickers a value of 100. Low sat coins a value less than 1 but greater than 0.
Release Notes
I wasn't going to extrapolate or add more to this indicator, but I decided to run the deep fix anyway to show others how to use Garman-Klass volatility on intraday timeframes. Enjoy!

Converted calculation to raw current timeframe volatility calculation. The function garmamKlass returns the current TF volatility in percent form which is then used to create the volatility bands. This should now work in every time and with every asset.

The Garman-Klass volatility measure can be viewed as an extension of the Parkinson volatility measure that includes opening and closing prices.


In 1980, Parkinson introduced the first advanced volatility estimator [6] based only on high and low prices (HL), which can be daily, weekly, monthly, or other:

VP= n∑4ln2(ui−di)2

Step 1: Calculate Parkinson sum: (1 / (2* period) ) * ∑math.log(high/low)^2


As it does not take into account the opening jumps, the Parkinson volatility estimator tends to underestimate the volatility. On the other hand, since it does not handle drift (μ = 0), in a trendy market VP may overestimate the volatility in the pertinent time interval.

In the same year (1980), and in the same journal issue as Parkinson, Garman and Klass proposed their estimator, which is based on all commonly available prices of the current day of trading (OHLC):

Step 2: Calculate the sum of Garman–Klass modifier that adds open/close prices: (1 / period) * (2 * math.log(2) − 1) * ∑math.log(close/open)^2

The Garman–Klass estimator includes opening and closing prices for the current trading day. From this perspective, the VGK estimator extends and improves the performance offered by the Parkinson estimator. It does not include the overnight jumps though; therefore, it may underestimate the volatility. If the opening price is not available, the estimator may use the closing price for the previous day of trading. In this context, the VGK estimator handles the overnight jumps but does not isolate potential opening jumps.

Step 3: Subtract the GK modifier from the Parkinson sum: (step 1 output) - (step 2 output)


Step 4: Take the square root of Step 3 output: math.sqrt(step 3 output)

This final output is the current timeframe volatlity as a percent.


Step 5: Multiply this % volatility by the input source price yeilding a deviation in price

Step 6: Create upper/lower bands by adding and subtracting this deviation multiplied by the input multiplier to the MA you choose


Step 2: Calculate Parkinson sum: (1 / (2* period) ) * SUM => 0 to per [math.log(high/low)^2]
Release Notes
Corrected lagged close.
Bands and ChannelsgarmanklassgarmanklausestimatorHistorical VolatilityhistoricalvolatityVolatilityvolatity

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in publication is governed by House rules. You can favorite it to use it on a chart.

Want to use this script on a chart?


Public Telegram Group, t.me/algxtrading_public

VIP Membership Info: patreon.com/algxtrading/membership
Also on:

Disclaimer