Pricing the Term Structure of VIX Futures
The term-structure of VIX futures contains interesting information on broker-dealer risk appetite. This is because, during risk-offs, dealers bid up the price of insurance against market volatility (which is what the VIX measures) but they only do so at the short end. That is, they bid up VIX futures with short tenors. This is why the term-structure inverts (called backwardation) when volatility spikes. This is clear from the surface plot of VIX futures prices (x is date, y is tenor and z is price).
Here's another angle.
This insight, one I have been developing since last year, allows one to price the entire term-structure of VIX futures. The basic idea is that the risk that the marginal investor in VIX futures faces is that dealers will bid up the short end of the curve and push the term-structure into backwardation. Since VIX futures are stratified by tenor, and different tenors are differentially exposed to a risk-off, the expected returns on VIX futures of different tenors should be proportional to their sensitivity to the slope of the term-structure. In what follows, we test this hypothesis.
We estimate SLOPE at the end of any given day by robustly regressing the price of VIX futures on tenor (using the Andrew Wave norm). Note that this information is available at the end of day. In particular, it is not available to feed into any systematic trading strategy at the beginning of the day. (Note also that SLOPE tracks the difference between VIX3m and VIX, both of whom have ETFs that are available to retail investors.) The massive risk-off in 2020 is, of course, the COVID panic in March.
We use a version of Adrian et al. (2015)'s 3-pass OLS estimator for the special case of constant betas and time-varying prices of risk to estimate the latter. Specifically, we stratify returns by tenor (i) and estimate regressions of the following form in the time-series:
$latex R_{i, t+1} = \alpha_{i} + \gamma_{i} SLOPE_{t} + \beta_{i} U_{t+1} + e_{i, t+1}, \qquad t=0, \dots, T,$
where U is the change in SLOPE from end of day t to t+1, and e is the end of day pricing error. Our risk factor is contemporaneous innovations in SLOPE, while yesterday's SLOPE is our price-of-risk factor. That is, we estimate the price of the change in SLOPE today as a linear function of last night's SLOPE. So everything is done in real-time; with the information actually at hand on any given day. In the last pass, the cross-sectional regression along tenor, we project "the constants," $latex \alpha_{i}$, and the coefficient of last night's SLOPE, $latex \gamma_{i}$, onto the betas $latex \beta_{i}$, the sensitivity of exposure to today's innovations in SLOPE, in the cross-section, to obtain the price of risk parameters, $latex \lambda_{0}$ and $latex \Lambda$, respectively. That is, we run cross-sectional regressions of the form:
$latex \alpha_{i} = \bar\lambda_{0} + \lambda_{0}\beta_{i}, \qquad i=1, \dots, N,$
$latex \gamma_{i} = \bar\Lambda + \Lambda\beta_{i}, \qquad i=1, \dots, N.$
If my thesis is right, we should find a strong relationship between the betas and expected returns, the mean absolute pricing error should be small, and the time-variation in the risk premium should be intuitive, in that it should track fluctuations in market-wide risk appetite.
We find that the relationship between sensitivity to systematic risk (SLOPE) and expected returns looks allometric. The mean absolute pricing error is small and expected returns on VIX futures are very close to the least squares line. But it gets even more interesting.
If we look at it by tenor, we find similar tightness. SLOPE measures duration risk.
We can even go further and simply "empirically" estimate the term-structure with an ensemble of local regressions to obtain a piecewise linear model. The term-structure encodes the response function of the broker-dealers. What we are interested in is the diachronic pattern — the pattern over time.
The price of duration risk has done what we expect to see from the surface plot of VIX futures prices. It looks like inverted SLOPE because it is a linear function of last night's SLOPE, our price of risk factor.
We would like to distinguish between the futures' sensitivity to risk appetite and duration risk so to speak. We can see beta is a decreasing function of duration. VIX futures of short tenors are much more sensitive to SLOPE than those of long tenors.
So, in the cross-sectional regression, we control for tenor. That is, we estimate a cross-sectional regression of the form:
$latex \bar{R}_{i} = \delta_{0} + \delta_{TENOR} TENOR_{i} + \delta_{\beta}\beta_{i} + e_{i}.$
This is equivalent to, first, projecting both expected returns and betas onto tenor, and then regressing the residuals against each other. We do this for both the "constants" and the betas. The first yields an estimate of the zero-beta rate, and how it varies with sensitivity to SLOPE. The second yields the price of SLOPE over and above duration risk.
The slope of expected returns against the zero-beta rate vanishes (t = -0.469) after controlling for tenor, as expected — this is what we expect from a good pricing model — although the pattern is intriguing.
The slope of expected returns against the betas is robust (t = -18.541) even after controlling for tenor. The term-structure thus contains pricing information beyond duration risk. That is to say: we have shown that sensitivity to SLOPE explains the variation of expected returns across tenors, even after controlling for tenor. There is, in other words, a risk premium on SLOPE over and above that associated with shorttermism; sensitivity to the risk factor itself contains pricing information beyond the empirical pattern of the decay of expected returns by tenor. This extra pricing information is due to the behavioral regularities of broker-dealers.
We believe that our pricing model allows us to extract information on the real-time behavior of broker-dealers. What we have uncovered in the term-structure of VIX futures is the response function of the dealers.
You can find the python code to replicate this work on my GitHub.
Postscript. A different approach, independent of the 3-pass estimator, is to stratify by tenor and estimate a mixed-effects model. We admit random effects by tenor. The zero-beta rate turns out to be insignificant; as desired. Contemporaneous shocks to SLOPE turn out to be extremely significant (z = -178.826). And the predictive information contained in last night's SLOPE also turns out to be very significant (z = -18.562).
The random-effects are very large at the short end and vanish at the long end. But shouldn't we also stratify by last night's SLOPE?
Since the previous close of SLOPE is a continuous variable, we define a new variable called Backwardation that is True if last night's SLOPE is negative. We then estimate random effects by tenor conditional on Backwardation.
This yields a very intuitive result. Conditional on Backwardation, the random effects decay with tenor; conditional on Contango, the random effects increase with tenor. This pattern is the reason why you obtain such high risk-adjusted returns by tactically going-long or shorting SLOPE, conditional on last night's SLOPE. To first order, backwardation or inversion of the term-structure of VIX futures prices is an excellent indicator of a risk-off tomorrow.
What I want to do next is model the dynamic pattern of a risk-off. It takes a few days for dealers to get the word out to the traders to shed risk off their books. If we can detect this process in real time, we can front-run the dealers and make a shitload of money.