Hey everyone,
In today's post, I'll dive into a recent adventure (and misadventure) with the VIX, the infamous "fear gauge" of the stock market. For those not in the loop, the VIX, or CBOE Volatility Index, gauges the 30-day expected volatility in the market, derived from S&P 500 index options. While it's not something you can invest in directly, you can trade VIX futures and options as well as VIX-related exchange-traded products (ETPs). It’s kind of like the market’s mood ring, and I thought it would be a great addition to QuantMage. The ETPs, which had been already available in QuantMage, are based on VIX futures, so don’t closely follow the index itself.
VIX as a Canary
I integrated the VIX into QuantMage alongside some other indices, and initially, the results were nothing short of spectacular. A simple check - if the VIX stayed below 20 for 10 days - yielded impressive returns and a risk-adjusted performance that seemed almost too good to be true:
I was on cloud nine, experimenting with various VIX-based strategies, all showing great promise. Below are some of the canaries I quickly came up with:
I even dove into the literature (e.g. this and this), absorbing all I could about using the VIX as a predictive tool. Some intriguing ideas included comparing the VIX's implied volatility against SPY’s historical volatility and playing around with VIX futures term structures (hello, contango and backwardation). But, something was off. Why was no one else raving about the simple yet effective threshold strategy I had stumbled upon?
Expanding the Volatility Horizon
Curiosity and excitement led me to explore beyond the VIX. I added indices like VIX1D, VIX3M, VIX6M, VIX1Y (different durations), VVIX (volatility of VIX), VXD (volatility of DJIA), and VXN (volatility of NASDAQ-100) to QuantMage. A word of caution here: when you bring in new data sources (I had to, since Tiingo doesn’t support these), always double-check for accuracy and timely updates.
While doing this, I uncovered a quirky detail in the VIX data that I had initially missed.
Assumptions Kill
Here's where things got interesting. January 15th, 2024, was Martin Luther King Jr. Day, a market holiday. But there was a VIX entry for that day according to CBOE:
Oddly enough, this wasn't the case for other volatility indices, like VIX3M:
No clue why CBOE decided to be unique with the VIX that day. This anomaly was exacerbated by the fact that the data provider erroneously had entries even for other market holidays like New Year’s Day and Christmas. These exposed a critical flaw in QuantMage's assumptions about market-day data, leading to a disastrous look-ahead bias. Essentially, QuantMage's backtesting with VIX data was inadvertently time-traveling! 🤦🏻♂️
Future is Everything We Don’t Know
After fixing this misalignment, the rosy picture painted by the VIX strategies crumbled:
As you can see in my last portfolio update, I had been using a levered version of the VIX-canary strategy called Power of VIX Leverage. Long Volatility was another strategy based on VIX-based signals in my portfolio. Both turned out to be duds and I’ve since retired them.
The Takeaway
This experience was a harsh but valuable lesson in data assumptions. I've now fortified QuantMage with more rigorous checks for data anomalies.
As for the VIX, the jury is still out. I haven’t found a winning strategy with it yet, but I’m not throwing in the towel. Stay tuned, and I’ll share any breakthroughs in future posts.
Ah, I was just now messing around with a volatility of volatility strategy in QM, basically holding SVXY when the volatility of SVXY is low or declining. Also, could you explain Trend Clarity sometime? https://quantmage.app/grimoire/cc6c07b2545dfe94500ae6025f1d9beb
Boy does this resonate with me. I did exactly the same kind of thing, fitting predictive relationships to a back sample. Various VIX durations. Very nice edge in sample.
But it turned that predictability was zero for even one day in the future, much less a week.
-Hydromod