Smoothing Historical Volatility Ranks to Reduce Noise
Summary
The document examines a volatility-ranking procedure used in a regime-switching trading example. The process first estimates historical volatility from recent log returns and ranks each estimate against a trailing history. It then smooths those percentile ranks with a moving average and ranks the smoothed series again. The question is why both smoothing and a second ranking step are used.
The answer explains the moving average as a way to reduce noise in the estimated quantity. It characterizes the result as a smoothed measure of volatility, while noting that the example later uses a GARCH(1,1) model to estimate volatility. The explanation is brief and does not separately justify the final ranking of the smoothed ranks, compare alternative ranking schemes, or provide performance evidence. Thus, the practical takeaway is about smoothing noisy volatility estimates, not proof that the full sequence of transformations improves a trading strategy.
Key ideas
- The example ranks historical volatility estimates relative to a rolling history.
- A moving average of the ranks is used to smooth noise in the estimated volatility signal.
- The strategy example later relies on GARCH(1,1) to estimate volatility.
- The response gives no empirical comparison establishing that ranking the smoothed series adds value.
Tags
Full text
# Question about historical volatility ranking # Question about historical volatility ranking I have seen this strategy example, which uses garch in a regime switching context: https://systematicinvestor.wordpress.com/2012/01/06/trading-using-garch-volatility-forecast/ The author classifies volatility by percentile using a 252 day look back period. Volatility is defined as the standard deviation of the past 21 log returns. So far, so good. However, the way the author ranks volatility is strange to me. Instead of simply taking the percentile rank of the current day counting the past 252, he does this, in R: ``` vol.rank = percent.rank(SMA(percent.rank(hist.vol, 252), 21), 250) ``` So, assuming hist.vol is a vector of historical volatilities, he first assigns to each day its percentile rank according to the past 252 days. That should be enough to me, but then he proceeds to take the simple moving average of the percentile ranks, and then again classify each of these SMAs of percentile ranks into their own percentile ranks. What is the rationale in doing that? ## Answer by jaamor (score 2) https://quant.stackexchange.com/a/16777 Using a simple moving average is a trick to take the noise out of the estimated quantity. He calculates a measure of volatility that is the SMA of the estimates of historical volatilities for the past 21 days. This is a crude way to estimate volatility. If you read further you will see that the author uses a GARCH(1,1) model to estimate volatility.
Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.