Option prices contain the market's view of how uncertain the future is, which direction it fears, and when it expects trouble. SOAP2's VSkew (across strikes, one expiry) and HSkew (across expiries) tabs measure these. This guide shows how to read them, how to tell what changed since the previous run, and how to turn them into ranges and scenarios. It needs no mathematics and no knowledge of the Greeks.
For the definitions behind RR25 and BF25, the user-level page is
OA Risk Reversal & Skew. This page is the practical companion,
in the same family as Reading the Hedging Picture (GEX / VEX).
A section for an AI assistant (§8) uses the real field names of the
get_skew_read call.
Read this first. Skew describes how options are priced, which reflects demand for protection and upside as well as expectations. It is not a forecast, and a "steep" or "flat" skew has no fixed threshold. SOAP2 reports facts and sign words; judging whether a change is meaningful is yours. Nothing here is a trade signal.
Every option has an implied volatility (IV): the uncertainty its price implies, quoted as an annual percentage. Different strikes and expiries carry different IVs. Four simple readings summarise the pattern:
| Dial | Question | Measured by |
|---|---|---|
| Level | How uncertain is the market, overall? | ATM IV (the IV of the at-the-money option) |
| Tilt | Which direction does it fear more, down or up? | Risk reversal (RR25): call IV minus put IV at the same distance (25 delta) |
| Wings | How much does it pay for extreme moves, either way? | Butterfly (BF25): the average wing IV minus ATM IV |
| Time | Is the uncertainty now, or later? | Term structure: ATM IV across expiries, and its slope |
On equity indices the normal picture is: puts cost more than calls (negative RR: investors pay for protection), wings above the middle (positive BF), and far expiries above near ones (contango). Trading skew means watching for departures from "normal" and for changes in how far it is from normal.
Names in code are those the AI bridge returns. IVs are decimals (0.152 = 15.2%); changes are in vol
points when multiplied by 100 (0.003 = 0.3 vol points).
| Output | Plain meaning |
|---|---|
ATM IV (atm_iv) | The level dial. |
Risk reversal (risk_reversal, skew_side) | Call IV minus put IV at the target delta. Negative = put skew (downside protection richer), normal for indices; positive = call skew. More negative = more put skew. |
Butterfly (butterfly) | Wing premium over ATM: curvature, or how much tail risk is priced. Higher = fatter tails priced. |
Ratios to ATM (rr_to_atm_iv, bf_to_atm_iv) | RR or BF divided by ATM IV. Lets you compare skew across days with different volatility levels. |
Target delta (target_delta, delta_used, not_bracketed) | The delta RR and BF are solved at (0.25 gives RR25 and BF25). If the strike ladder does not reach it, SOAP2 uses the nearest reachable delta and says so (delta_used); if the solve fails, not_bracketed. RR and BF at different deltas are not comparable. |
Wings (wings) | VSkew: the call and put strikes the target delta landed on, their IVs, distance from spot in points, percent and standard deviations, the strike ladder's limits and headroom (how close the solved strike is to the edge of what SOAP2 could price; small headroom means the least robust RR/BF). |
Term curve (term_curve, term_slope, term_shape) | HSkew: ATM IV by expiry. Slope = longest minus shortest expiry. Positive = contango (normal); negative = backwardation (front above back: stress or an event priced near). |
History columns (vs_history, columns) | Current compared with the same clock time 1, 2 or 5 trading days earlier (1D, 2D, 1W), when selected in settings. Built from sparse 30-minute bars. |
Change since Previous (change) | Changes in ATM IV, RR, BF and slope, with sign words (more_put_skew, wings_richer, more_backwardation and their opposites) and changes_in_evidence. |
delta_used, not_bracketed and the wings' headroom. A wing near the edge of the ladder is the least robust number on the page.Is uncertainty high or low for this market? Compare with the history columns and with your own experience of the symbol. Convert it into a plain range with the expected move (§5). A level on its own says nothing about direction.
rr_to_atm_iv) before comparing with other days: the same RR means more when ATM IV is low.There are two kinds of comparison, and they must not be mixed:
| Latest versus Previous | Current versus history column (1D, 2D, 1W) | |
|---|---|---|
| What it is | The run before the latest, kept only when it is a distinct earlier run (tool left and re-entered, or 30+ minutes apart) | The same clock time N trading days earlier, within one run |
| Use it for | "What changed since I last looked?" | "Is this high or low compared with recent days?" |
| Warning | Always state elapsed time and whether it is the same session | Its reference moves from run to run by design: never compare a history column between two runs |
| You see | Possible reading | Check |
|---|---|---|
| ATM IV up, RR more negative | A fear premium: uncertainty rising and the market paying for downside. | Did price fall? In falling markets this is the usual pairing. |
| ATM IV down, RR less negative, BF lower | Relief: uncertainty and tail premium both fading (the "volatility crush" after an event). | Was there a scheduled event? |
| ATM IV flat, RR more negative | Demand for protection rising without a change in the overall level: more selective hedging. | Ratio rr_to_atm_iv; same delta in both runs? |
| ATM IV flat, BF up | More is being paid for extreme moves in both directions. | Headroom: is the wing near the ladder edge? |
| Slope turns negative (more backwardation) | The market prices trouble sooner than later: stress, or an event near. | 0DTE point at the front? Read the curve. |
| Slope more positive | The front is calming relative to the back. | Common term (below). |
| Change is a few tenths of a vol point only | Probably noise, especially in history columns built from sparse bars. | Judge materiality yourself; SOAP2's sign words have no threshold. |
Like for like. For HSkew, the slope change is taken on the expiries both runs share
(common_term); what was left out is listed. RR and BF changes are left empty when the two runs solved at
different deltas. Always read changes_in_evidence and columns (including its advice about which
history offsets to keep ticked so the next comparison is like for like).
Skew does not give support and resistance. It gives ranges and how the market weights each side.
SOAP2 defines one standard deviation to expiry as sd = spot × ATM IV ÷ 16 × √(trading days left): the
one-day move (the Risk Graph's 1-sigma line) scaled by the square root of the sessions remaining. Example: spot 5,000,
ATM IV 16%, 21 trading days: sd = 5,000 × 0.16 ÷ 16 × √21 ≈ 229 points. The market's pricing implies roughly a two-in-three
chance of finishing within ±1 sd (risk-neutral pricing, not a forecast).
expected_move block in get_market_read, and the "sd" distances of
the wings use it too (see Turning volatility into ranges).
The one exception is get_trade_probs, whose sigma is that of the distribution its odds are computed from
(ATM IV × √(days ÷ 360)), so it differs a little.In VSkew, wings gives the strikes where the 25-delta call and put sit, with their distance from spot in
points, percent and standard deviations. They mark, roughly, the "one-in-four" ends of the market's pricing. Use them to
see how asymmetric the market is: if the put strike is 1.0 sd away and the call strike 0.8 sd, the market
treats the downside as farther and costlier to reach.
The normal state. Ranges implied by ATM IV are narrow; shocks are priced modestly. The question is what would break it: an event, or a sudden steepening of RR.
RR becomes more negative and the front end lifts (a bump on the curve). Participants are buying protection ahead of the date. Expect IV to fall after the event unless it surprises; the drop is the "volatility crush", whose hedging effect is the Vanna story in the theory primer.
Front IV above back IV: the market is paying for uncertainty now. Typically a stress state. Read the term curve to see whether it is a single event date or the whole front end.
ATM IV, BF and RR all drop. Compare with the history columns: are you back to the pre-event level, or merely lower than the peak? Remember that comparing Latest with Previous across the event includes a session boundary or the event itself.
The front point is a same-day expiry and its IV varies with the clock. Slope can swing during the session; read the curve, and compare like times only.
Invented numbers to show the method. Not a forecast, not a real session.
| SPX, expiry in 30 days | Previous (60 min ago, same session) | Latest |
|---|---|---|
| Spot | 5,012 | 5,000 |
| ATM IV | 15.6% | 16.0% |
| RR25 | −3.2 | −3.9 |
| BF25 | +0.7 | +0.8 |
| RR25 / ATM IV | −0.21 | −0.24 |
| Term slope (common expiries) | +1.1 | +0.8 |
more_put_skew.The call is get_skew_read with optional symbol (default: the symbol selected in SOAP2) and
expiry (yyyy-MM-dd, a VSkew tab). The response has two blocks: hskew (term structure)
and vskew (one entry per stored expiry, nearest few by default). It reads stored results built by
Options Analysis windows in HSkew and VSkew mode; if nothing is stored, the block's hint says which OA mode to open.
Premium (or trial) and the AI bridge are required; a denied call answers NOT_LICENSED.
computed_at/age, crossed_session, the quality
note, delta_used, not_bracketed and wings headroom.atm_iv, risk_reversal with skew_side,
butterfly, the ratios rr_to_atm_iv and bf_to_atm_iv, and for HSkew
term_shape and the term_curve.elapsed_s and same_session, and every
changes_in_evidence item. Separate a move in skew from a move in the vol level (use the RR/ATM ratio) and from
the passage of time (DTE). Quote the sign words but judge materiality yourself.reference.as_of) and
as_of_session/bar_lag_min when it rests on the previous close.columns.advice when present (which History offsets to keep or re-tick so the next
comparison is like for like).get_market_read; GEX
(get_cboe_gex); sticky skew (get_sticky_skew); and outside information such as the event calendar.Data: SPX, expiry 2026-11-20, VSkew stored at 15:40 UTC (3 min ago), same session; 25-delta solved on both runs.
Level now: ATM IV 16.0%; RR25 −3.9 vol points (put skew), ratio −0.24; BF25 +0.8.
Change vs previous (60 min): ATM IV +0.4, RR25 −0.7 (more put skew), BF25 +0.1; spot −12. The shape tilted, not just the level.
Versus recent days: compared with yesterday's same time, RR25 is 0.5 more negative.
Term: contango, slope +0.8 (common expiries), slightly flatter than before.
Range: ±1 sd to expiry ≈ 229 points (4,771 to 5,229).
Reading (derived): mild risk-off tilt with a normal term structure. Invalidation: RR reverting or the slope turning negative.
Caveats: skew is a price, not a forecast; no materiality threshold; history columns come from sparse bars.
changes_in_evidence; never compare a history column across runs.Go back to the main help page: SOAP2 Help Guide