4 & 20 Period Historical Volatility - Reversals and Trend Exhaustion


New member
This simple indicator highlights bars in green when the 4 period historical volatility is less than half of the 20 period historical volatility. It highlights when volatility has declined and is, therefore, likely to increase in the near future. In practice, it can show when prices are about to reverse trend or when the existing trend has exhausted itself.

This indicator's based on observations of volatility Larry Connors made 20+ years ago in his book “Connors On Advanced Trading Strategies.” Connors points out that prices don't revert to a mean but volatility does. Prices may do a “random walk” but volatility is more predictable. When the 6 day or 10 day historical volatility is less than half of the 100 day historical volatility, volatility tends to revert to the mean with increased volatility by way of price reversals or just larger price swings.

Years ago, I noticed that the 6 or 10 day interval didn't work as well on stock indices as a 4 day interval did. With the intervals set at 4 and 20 days, the pattern seems to work well on some stocks too.

The basic trade signal is the following:
If the first red bar after a green bar trades through the high of the last green bar, go long.
If the first red bar after a green bar trades through the low of the last green bar, go short.

I wouldn't go purely off that, of course. I use it with Candlesticks, Bollinger Bands, the Hull MA, and other indicators.

I spot checked this indicator on other assets like currencies and other commodities and it seems to have mixed success. It works well on some securities and not so well on others. Also, it can work on one minute charts but on some of the longer intraday periods it doesn't seem to work at all.

I like how it called the absolute high and low in the Feb-Mar 2020 selloff.

Here's a one minute chart of the S&P 500 from September.


I know the code could be much better but it works and I've been too lazy to fix it up.

# 4 period historical volatility
def HV = stdev(log(close / close[1]), 4) * sqrt(252) * 100;
# 20 period historical volatility
def HV1 = stdev(log(close / close[1]), 20) * sqrt(252) * 100;

assignPriceColor(if HV/HV1<.5 then Color.Green else if HV/HV1>.5 then Color.Red else Color.White);

Similar threads