Tag: VIX

VIX and Trend-following

We are not big fans of using VIX for timing equities. Strategies that seem to work on US market data fall apart when applied to Indian equity indices. When Alpha Architect published their follow-on VIX and Trend Following results, we decided to test it on our own NIFTY large-, mid- and small-cap indices.

India VIX decides how much recent history to use:

  • When volatility is calm, rank the assets by their 10-month performance. This changes slowly and avoids reacting to short-term noise.
  • When volatility is elevated, use 3-month performance so the strategy can respond faster.
  • When volatility is very high, use only the latest month’s performance.

tl;dr: it kind of works – beats the NIFTY 50 after 25bps of costs post-COVID.

However, with an on-going 30% drawdown, it is not exactly self-recommending. Having said that, its pre-COVID results might be a better indicator of how the strategy manages to side-step large shocks.

It does a semi-decent job of switching between different market-cap indices.

The full-period metrics (2009 – 2026) are promising. Seems to hold its own against buy & hold – lower drawdowns with similar(ish) returns.

While 25bps of costs should cover transaction costs, the problem is surviving capital gains taxes require a much higher returns.

Details of the approach, descriptions of the strategies and code are on github.

VIX and Equity Index Returns, Part III

We had looked at using VIX for driving equity index positioning about eight years ago and had abandoned the idea having found no relationship between VIX levels and future returns (Part I, Part II). We found some modest success in using realized volatility to position towards a target volatility (Volatility Targeting). However, the idea of using VIX as a predictor of future equity returns refuses to die.

The correct time to take more equity risk is when VIX has been high for six months but has been trending down. The correct time to take less equity risk is when VIX has been low for six months but has been trending up. The target equity weight is then proportional to the target equity risk divided by VIX. Therefore, at most times, low VIX corresponds to high equity weight and high VIX to low equity weight.

Thanks to AI, we can now test this hypothesis out without wasting too much time. We got Claude to give us the long-only and long-short outlines and backtest plans (lo, ls). And then we got hermes + deepseek to execute this in R. The tl;dr is that inverse-volatility long-only is “good enough.”

The approach sounded good on the face of it but doesn’t bear scrutiny once you run the numbers through it.

Code and charts on github.

VVIX for VIX

Came across an intriguing post by Markku Kurtti: Employing volatility of volatility in long-term volatility forecasts (outcastbeta). The gist of it is that the volatility of volatility and average volatility is more predictable. So, predict them separately and then put them together to get a volatility forecast.

Our previous attempts at forecasting VIX have led us the conclude that nothing beats locf. Just extending the last value of VIX forward has beaten all of the models we’ve looked at.

What if, we applied the process outlined in Mr. Kurtti’s blog for VIX?

Not looking so good if you forecast out for 20-days.

A good forecasting model should be able to estimate large spikes and reversion to mean from them. If not the former, then at least the latter. So, if a model is good at the mean-reverting bit, then you can combine both locf and the model to get better predictions.

For example, if you only consider the 1-day forecast, then obviously locf has the upper hand.

However, as you try to predict farther away, you expect the model to nail the mean-reversion bit.

That is not the case here.

Once again, locf wins.

Code and charts up on github.

CGMM for VIX

Previously, we explored using Meta’s Prophet library to predict VIX. It turned out that simply extrapolating the last value of the index worked better (Prophet for VIX). In fact, locf (last one carried forward) works better than GARCH(1, 1) and most other approaches. Can the same be said about Conditional Gaussian Mixture Models?

We used the cgmm python library to forecast 20-day forward VIX and compared its root-mean-squared errors (rmse) to those of locf‘s.

locf is pretty hard to beat.

Especially so when the VIX index itself is volatile.

Code up on github.

Prophet for VIX

Open sourced by Meta back in 2017, Prophet is a procedure for forecasting time series data. How does it compare to GARCH(1,1) and locf (last one carried forward) for forecasting VIX 20 days out?

We fit 500-days of rolling VIX data using Prophet and GARCH(1,1) and forecast forward 20-days. We then calculate the RMSE (Root Mean Squared Error) of the forecast vs. actual of both the models and locf. Plot RMSE of all three.

Ideally, you want the error to be low and the tail of errors to be as short as possible. GARCH(1,1) looks worse than Prophet. However, locf beat both?

When in doubt, take the average.

Code on github.

Also: VIX Seasonality