Before reading dealer positioning (GEX, TRACE) or the shape of skew, it helps to know the volatility backdrop: how uncertain the market is, how far it expects prices to travel, when it expects the trouble, and whether volatility is cheap or dear compared with its own history. This guide covers the tools that answer those questions: the ATM IV term structure, the VIX term structure, the expected move, the IV rank and percentile in the distribution statistics, and the volatility surface. It needs no mathematics and no knowledge of the Greeks.
It sits upstream of Reading Skew and Term Structure and
Reading the Hedging Picture (GEX / VEX). A section for an
AI assistant (§8) uses the real field names of the
get_market_read call and the on-demand VIX forward curve.
Read this first. Volatility is the price of uncertainty. It is not a forecast of direction, and "high" or "low" is always relative: to the symbol's own past, to the calendar, to other expiries. SOAP2 reports facts with no verdicts; the judgement is yours. Nothing here is a trade signal.
Every other tool in the family is sized by volatility. The strikes GEX cares about, the corridor TRACE shows, the wings skew prices: all scale with how uncertain the market is. Read volatility first and you know the size of the stage before looking at the actors.
Three questions cover it:
Names in code are those returned by get_market_read (block vol and block
expected_move). IVs are decimals (0.152 = 15.2%).
| Output | Plain meaning |
|---|---|
ATM IV term (vol.atm_iv_term) | The ATM implied volatility of every expiry the option analysis has: expiry, days to expiry (dte), atm_iv, the ATM strike, and whether it is a monthly. The shape across expiries is the term structure. |
| Contango / backwardation | Far expiries above near ones is contango (normal, calm). Near above far is backwardation (stress, or an event close). A bump at one expiry is an event premium. |
VIX term (vol.vix_term) | The VIX index (spot), plus VX/VXM futures when SOAP2 has them (futures: contract, expiry, days, price). m1m2_spread = second future minus first, in points (positive = rising front of the curve). spot_m1_spread = first future minus spot. m1m2_spread_pct is the first as a fraction of the first future. |
Expected move (block expected_move) | The range the ATM IV implies. one_day_move = spot × ATM IV ÷ 16. to_expiry_move = one-day move × √(trading days to expiry). move_range is spot minus and plus that move. The method is named in the block. |
IV rank and percentile (vol.stat_calcs: iv_rank_total, iv_pct_total, iv_rank100, iv_pct100) | Where today's IV sits in its own history: rank is its position between the history's low and high; percentile is, in the usual definition, the share of past days on which IV was lower. "Total" is the whole history, "100" the last 100 days. |
Distribution statistics (vol.stat_calcs) | Skewness and kurtosis of returns (skew_total, kurt_total, and the 100-day versions), correlation, annualised return and volatility, and 95% value-at-risk and expected shortfall. They describe how returns have been distributed, to compare with what options price. |
Volatility surface (vol.vol_surface) | A fitted surface of IV across strikes and expiries (degree of the polynomial, rmse and r_squared of the fit). It tells you how well the surface describes the market, not what the market will do. The Risk Graph can price with it ("Use VolSurface"). |
| Skew and regimes | HSkew, VSkew, Sticky Skew and Dispersion also sit in this block. See the skew guide and the Sticky Skew and Dispersion pages. |
A note on the expected move. The market read, the Risk Graph's 1-sigma line and the skew call's wing distances all use one convention: spot × ATM IV ÷ 16 per trading day, scaled by √trading days. The one exception is the trade-probabilities call, whose sigma is that of the distribution its odds are computed from (ATM IV × √(days ÷ 360)), so it differs a little; say which you quote.
live or the one the ATM term was computed at).expected_move: one_day_move and to_expiry_move for the expiry you trade. This is the stage size.spot_m1_spread positive) and second above first: contango, the usual state.stat_calcs): rich IV against calm returns, or the reverse.The stored volatility items are mostly updating series, not Latest-versus-Previous pairs, so the change you read is the change over time and against history:
| You see | Possible reading |
|---|---|
| ATM IV up, front end up more than the back | A near-term fear or event premium is building. Backwardation is approaching if it continues. |
| ATM IV down, front end down most | Event or stress premium leaving: the post-event "volatility crush". |
| Whole curve shifts up in parallel | A general rise in uncertainty, not tied to a date. |
| VIX up with the futures not following | A short-lived spike: the curve is pricing a return to normal. |
| VIX curve flips from contango to backwardation | Stress. The state of the market has changed, not just its level. |
| Rank or percentile high while realised moves are small | The market pays for uncertainty that has not appeared. Why: an event ahead, or a hedging bid. |
Within a session, wait for confirmation: an IV change of a few tenths of a point is often noise, especially in thinly quoted expiries.
The expected move is the most practical output of this page.
Use the range as a scenario frame:
Normal and calm. Ranges are narrow. The risk is complacency: what is not priced. Check the calendar.
The curve has a hump at the expiry that spans the date. Premium sellers are paid for the event, and the premium leaves quickly afterwards. Compare the size of the bump with the move you consider plausible.
Near IV above far IV, VIX above its futures. The market is paying for uncertainty now. Expect wide ranges and fast conditions; verify with skew (put side) and GEX (accelerator regime).
IV falls, curve normalises, rank drops. The directional effect, if any, is the vanna story in the theory primer. Compare with the pre-event level to see how much premium has left.
The market is pricing more uncertainty than it is delivering. Possible reasons: an event on the horizon, a hedging bid, or a regime that has not caught up. A mismatch is a question to ask, not a signal.
Invented numbers to show the method. Not a forecast, not a real session.
| Value | |
|---|---|
| SPX spot | 5,000 |
| ATM IV by expiry | 1 day 14.0%, 7 days 16.5%, 30 days 17.0%, 90 days 18.5% |
| VIX / futures | VIX 16.0; first future 17.2; second future 18.0 |
| IV rank / percentile (100 days) | 0.35 / 0.40 |
| Annualised realised volatility | 11% |
| Question | Call | Notes |
|---|---|---|
| The overall backdrop (level, term, expected move, rank) | get_market_read (blocks vol and expected_move; optional symbol) | Stored items, each with its own age. Hints say what to open when something is missing. |
| The VIX forward curve without VIX futures in the watchlist | run_analysis with name="vix_term_structure" | Needs SOAP2 running; own in-flight gate (already_running); stored source plus on-demand forwards. |
| A broad statistical briefing | run_analysis with name="comprehensive" (size 250, 500 or 1000; bar_size daily or hourly) | Large payload: tell the user it uses significant AI credits and context. Daily or hourly, never both. |
| Skew detail | get_skew_read | See the skew guide. |
crossed_session), and any hint such as VIX_TERM_NEVER_COMPUTED or ATM_TERM_NEVER_COMPUTED.atm_iv for the expiry in question, one_day_move, to_expiry_move and move_range; state the method and the spot_source.atm_iv_term points. Do not infer a shape from one point.spot_m1_spread and m1m2_spread with their signs (first future minus spot; second minus first).stat_calcs, and say which window (total or last 100 days).TEMP_SNAPSHOT and labelled VIX fwd {expiry}. Say they are derived, give shape and spreads, and never present them as VX prices. They are never stored in the result store.get_market_read and get_skew_read (ATM IV ÷ 16 per trading day, scaled by √trading days). get_trade_probs sigma is on the pricing basis (ATM IV × √(days ÷ 360)); name which one you quote.Data: SPX, ATM IV term stored at 15:40 UTC (3 min ago); VIX term at 15:40; spot 5,000 (live).
Level and range: ATM IV 16.5% at 7 days; rank 0.35 over 100 days. One-day move ≈ 52 points; to expiry ≈ 116 points, a band of 4,884 to 5,116 (ATM IV ÷ 16 per trading day, scaled by the square root of 5 trading days).
Term: contango from 14.0% at one day to 18.5% at 90 days.
VIX curve: index 16.0, first future +1.2, second +0.8 over the first: contango.
Against realised: annualised realised volatility 11%.
Reading (derived): a calm, normal backdrop. Invalidation: the front end rising above the back, or the VIX above its first future.
Caveats: implied volatility is a price, not a forecast; ranges are pricing statements; stored items have their own ages.
Go back to the main help page: SOAP2 Help Guide