DEV Community

tomasz dobrowolski
tomasz dobrowolski

Posted on • Originally published at flashalpha.com

How to Read Volatility Term Structure: Contango, Backwardation & Event Pricing

Volatility term structure is one of the fastest regime indicators available. A single glance tells you whether the market is calm, fearful, or pricing a discrete event. Each state implies a different optimal trading strategy.

If you trade options without checking term structure, you are ignoring half the information the market is giving you.


What is term structure

Term structure plots at-the-money implied volatility across all available expirations for a given underlying. Each point is the market's annualized volatility expectation for that time horizon. A 30-day option priced at 25% IV means the market expects annualized 25% volatility over the next month. A 90-day option at 28% IV means slightly higher volatility over the next quarter.

The shape of this curve is what matters. Two stocks can have identical front-month IV but completely different term structures, and those shapes carry very different information about expectations, event risk, and trading opportunities.

This is distinct from the volatility smile or skew, which plots IV across strikes for a single expiration. Term structure plots IV across time at a fixed delta (typically ATM). Together they form the full volatility surface.


Contango: the normal state

In calm markets the curve slopes upward. Shorter-dated options have lower IV than longer-dated options. This is contango.

It's the default because of a fundamental property of uncertainty: the further into the future you look, the more things can happen. A stock might be quiet this week, but over the next six months it faces earnings cycles, macro events, sector rotations, and general market risk. Longer-dated options must price all of that in.

SPX is in contango roughly 65% of trading days. The typical slope from 30d to 90d in calm markets is 2-5%.

Steepness carries information too. A steep contango means the market is extremely complacent short-term but sees risk on the horizon. A flat contango means it expects current conditions to persist.


Backwardation: the warning signal

When shorter-dated IV exceeds longer-dated IV, the curve inverts. This is backwardation, and it signals one of two things.

Stress-driven backwardation. During selloffs, fear spikes short-term IV far above long-term. Traders rush to buy near-term puts for protection. The back end stays anchored because the market assumes the crisis will eventually resolve. VIX term structure inverted during COVID (March 2020), the 2022 rate shock, and every meaningful correction in between.

Event-driven backwardation. Individual stocks frequently enter backwardation before earnings, FDA decisions, or other binary events. The front expiration inflates while expirations after the event stay normal. This is not fear. It is the market pricing a known uncertainty that resolves on a specific date.


Extracting the implied earnings move

This is where it gets practical. You can isolate the market's consensus earnings move using the total variance method.

The key insight: variance (IV squared times time) is additive, but volatility is not. By comparing total variance across expirations that straddle the event, you can isolate the event's contribution.

Example. A stock has a weekly option expiring before earnings with 30% IV (T = 0.02 years) and a weekly expiring after earnings with 55% IV (T = 0.04 years).

import math

# Total variance before event
tv_before = 0.30**2 * 0.02   # = 0.00018

# Total variance after event (includes earnings)
tv_after = 0.55**2 * 0.04    # = 0.01210

# Isolate the event
event_var = tv_after - tv_before  # = 0.01192

# Implied move
implied_move = math.sqrt(event_var) * 100
print(f"Earnings implied move: +/-{implied_move:.1f}%")
# Output: +/-10.9%
Enter fullscreen mode Exit fullscreen mode

The market is pricing roughly an 11% move from the earnings announcement. Compare this to the stock's historical earnings moves. If it typically moves 7%, the market is overpricing the event and that's a premium selling opportunity. If it typically moves 15%, the market is underpricing it and that's a buying opportunity.

This is the standard approach used by institutional desks and volatility arbitrage funds.


Term structure slope as a regime indicator

You don't need sophisticated models. The signal is in the shape.

Slope State Trading Implication
Steep contango (30d IV well below 90d IV) Near-term complacency, longer-term risk priced Calendar spreads and front-month premium selling favored
Flat (30d IV roughly equal to 90d IV) Transition zone Avoid calendars, prefer verticals. Watch for directional shift
Mild backwardation (30d IV exceeds 90d by 1-3%) Elevated near-term risk or event premium Sell front-month premium. Calendars work (short front, long back)
Steep backwardation (30d IV far exceeds 90d IV) Crisis or extreme event pricing Hedge aggressively. Do not sell naked front-month

Tracking the slope over time reveals regime transitions before they become obvious in price. When a stock's term structure flattens from steep contango over several days, it often precedes a volatility expansion. The market is gradually pricing in growing uncertainty even before a visible catalyst appears.


Calendar spreads: trading the term structure

Calendar spreads are the natural expression of a term structure view. Sell the expiration with relatively high IV, buy the expiration with relatively low IV, and profit when the structure normalizes.

Selling backwardation (the most common setup): before earnings, the front expiration is inflated. Sell front, buy back at the same strike. After earnings, front IV collapses while the back leg holds its value. You capture the normalization.

Selling steep contango (less common): when back-end IV is unusually elevated, go long front and short back. Riskier because contango can persist for extended periods. Works best when the elevation is driven by a specific identifiable catalyst like an election or regulatory decision.

Important: calendar spreads are not pure volatility bets. A large gap in the underlying can overwhelm the vol differential. Size to the maximum loss (the debit paid). Use ATM strikes to minimize directional exposure.


Practical workflow

  1. Check term structure state. Is the curve in contango or backwardation? What's the slope?

  2. Identify the cause. If backwardated, is it market stress, earnings, or a macro event? The trade differs for each.

  3. Extract the implied move. Use total variance to isolate the event contribution. Compare to historical moves.

  4. Structure the trade. Sell the inflated expiration, buy the adjacent one. ATM strikes for the cleanest expression.

  5. Monitor post-event. After the catalyst, front IV should collapse. Close the spread on normalization rather than holding to full expiration.


Pulling term structure via API

Here's a Python script that pulls term structure, identifies the regime, and extracts the earnings-implied move:

from flashalpha import FlashAlphaClient
import math

client = FlashAlphaClient(api_key="your_api_key")
vol = client.get_volatility("NVDA")

print(f"ATM IV: {vol['atm_iv']}%")
print(f"State:  {vol['term_structure']['state']}")
print(f"Slope:  {vol['term_structure']['slope_pct']}%")

for exp in vol["term_structure"]["expirations"]:
    print(f"  {exp['expiry']}  IV={exp['atm_iv']}%  DTE={exp['dte']}")

# Earnings implied move
exps = vol["term_structure"]["expirations"]
earnings_date = "2026-04-23"

pre = [e for e in exps if e["expiry"] < earnings_date][-1]
post = [e for e in exps if e["expiry"] >= earnings_date][0]

tv_pre = (pre["atm_iv"]/100)**2 * (pre["dte"]/365)
tv_post = (post["atm_iv"]/100)**2 * (post["dte"]/365)
event_var = tv_post - tv_pre

if event_var > 0:
    print(f"\nEarnings implied move: +/-{math.sqrt(event_var)*100:.1f}%")
Enter fullscreen mode Exit fullscreen mode

Sample output:

ATM IV: 42.8%
State:  backwardation
Slope:  -6.2%
  2026-03-21  IV=48.5%  DTE=4
  2026-03-28  IV=46.1%  DTE=11
  2026-04-17  IV=41.3%  DTE=31
  2026-04-25  IV=52.7%  DTE=39
  2026-05-16  IV=39.8%  DTE=60

Earnings implied move: +/-8.7%
Enter fullscreen mode Exit fullscreen mode

The volatility endpoint (/v1/volatility/{symbol}) returns term structure state, slope, per-expiration IV, and VRP. The free tier gives you 10 requests/day for the vol surface endpoint. Full volatility analysis is on the Growth plan.


Further reading

Top comments (0)