Vol Basis

WTI implied vol · CBOE/USO · Kalshi · Polymarket · OVX anchor

← Perp Basis Live Last snapshot
Loading latest vol snapshot…
About this page · what each venue is

The thesis. Implied volatility derived from prediction markets should converge to (but in practice often diverges from) implied vol on the underlying option chain. When prediction-market IV is meaningfully richer than CBOE option IV — especially in the wings — that's a tradeable dislocation: sell the rich vol on the prediction market, buy the cheaper vol on the option chain.

CBOE/USO — the CBOE-listed option chain on USO (the largest oil ETF, tracks WTI front-month). Used as the TradFi reference smile because CL=F itself has no Yahoo-accessible option chain. Strikes are converted to crude-price scale via K_cl = K_uso × (CL=F_spot / USO_spot) so they line up with prediction-market strikes on the same x-axis. USO has roll/tracking-error baked in, so its IV differs slightly from "pure" CL IV — close enough for v1.

USO tracking caveat. The USO/CL spot ratio drifts ~0.5–2% per day (USO carries roll losses in contango, gains in backwardation; the ETF is rebalanced monthly so the basis to CL moves around). This means the same conceptual K can land at slightly different x-coordinates across different snapshots — apparent smile drift in §3/§4 may include a USO-tracking component, not just market repricing. Documented here, not corrected: a daily live-rescale would be a v2 enhancement.

OVX — CBOE Crude Oil Volatility Index, a single number representing 30-day forward ATM IV on USO options. The oil-market equivalent of VIX. Free via Yahoo (^OVX); used as the dashed grey reference line in the smile.

Kalshi — KXWTIW weekly settle-price binary markets ("Will WTI settle > $X on Friday?"). Each market gives one (strike, prob) point; we invert to IV via the lognormal CDF. Multi-strike → real smile shape.

Polymarket — "Will Crude Oil settle at $X-$Y in [Month]?" range markets. Each gives one (range, prob) point; inverted via P(lo < S_T < hi). We exclude "hit by end of [Month]" markets (path-dependent max-of-path; needs different math).

Vol cron is 20-min (vs basis cron at 5-min). Heavier per-tick (4 collectors, ~20-40 API calls). Sections that depend on history (§3, §4, §6) need a few hours of data to look meaningful.

idle

2 Probability space · what each market actually prices

Y-axis is probability, not IV. Each market is translated into the underlying probability it implies, with no IV-model assumption sitting in the middle. Survival lines (solid + circle markers) show P(ST > K) — direct from Kalshi above-strike binaries and from CBOE digitals (N(d2) using mid_iv). Bucket segments (thick horizontal bars) show P(Klo < ST < Khi) — direct from range markets (Polymarket settle-at, Kalshi between). Dashed OVX line is a model-derived reference (lognormal at OVX 30d σ centered on spot). Each venue's tenor is in the legend.

How to read this

Why probability space. Vanilla calls, binary "above" markets, range buckets, and "hit by" path-touch markets all price different probabilities over different distributions. Pushing them through an IV inversion forces them onto a common axis but at the cost of pretending the IV model holds for all of them. Plotting the raw probability they actually price avoids that fiction — at the cost of some venues showing different quantities (survival vs bucket density), which is the truth.

Reading the survival lines. Each venue's solid line is its implied P(ST > K) at that venue's expiry — monotonically decreasing in K. Two venues' lines crossing at a strike means they disagree about P(ST > that strike) — and since the gap is in raw probability units, you can size the trade directly: buy the venue pricing it lower, sell the venue pricing it higher.

Reading the bucket segments. A horizontal bar at level p spanning [Klo, Khi] means that venue prices P(Klo < ST < Khi) = p. Since P(S > Klo) − P(S > Khi) should equal that bucket prob, the bar should sit "inside" the gap between two CBOE survival points at Klo and Khi. When it doesn't, the venues disagree about that slice of the distribution.

Tenor caveat (still real). Kalshi at ~5d and Polymarket at ~58d are pricing different distributions even on the same strike — long-dated WTI has more spread to either tail. The legend tags every venue's median DTE so this is visible at a glance, but no chart trick fixes it; the only honest cure is term-structure interpolation per venue, which Kalshi/Polymarket don't have enough expiries to support.

3 Probability gap · pred-market vs traditional

Same question to every venue: "What's the chance WTI ends above $K by date T?" Pred markets sell this directly (the YES price). Option chains imply it via Breeden–Litzenberger. OVX implies it via the lognormal CDF. Plotted is pred − trad in probability points — positive = pred market thinks the right tail is richer. This is the headline apples-to-apples comparison.

How to read this · in plain English

Why probability instead of vol points. Vol points compare an "implied volatility number" between very different financial objects (binary markets, vanilla options, variance indexes) — never strictly apples-to-apples. Probability of crossing a strike IS the same financial question for all four venues, so disagreement here is real signal, not artifact.

What "+5 pp Kalshi vs CBOE" means in practice. Kalshi's market is pricing the right tail (e.g. "WTI > $107 by Friday") at 30%; the same probability extracted from the CBOE option chain is 25%; the gap is +5 percentage points. Trade interpretation: sell Kalshi YES, buy a CBOE call spread of equal payoff at the same strike. You collect 5 cents per dollar of risk — minus execution costs.

How "trad" probabilities are computed. A digital call paying $1 if S>K is approximately −∂C/∂K (the slope of vanilla call prices across strikes). We estimate it by finite difference between the two CBOE strikes straddling K. For OVX: assume a lognormal at σ = OVX, integrate the right tail. Same K, same T as the pred leg.

Strike choice — locked per loaded window. Across all snapshots in your selected date range, we pick each pred venue's highest-volume "above K" market and lock that K for the whole window. The chart title and legend show the actual K used. Reload with a different range and K is repicked. (Earlier versions repicked K per snapshot, which made the line jump as liquidity migrated.)

Tenor. The CBOE leg uses the chain expiry closest to the pred's expiry (skipping any already-expired); OVX is a 30d index so we evaluate at the pred's expiry under flat-vol assumption (small approximation when pred T ≈ 30d, larger for Kalshi at 7d — hover shows the term mismatch in days, typically biases ~2-5 vol pts on Kalshi pairs).

"⚠ wide BL strike spacing" in CBOE hovers means the chain's two adjacent strikes around K are more than $2 apart — the digital estimate is noisier than usual. Treat those points with extra skepticism.

4 Per-venue ATM IV · solo time evolution ⚠ MIXED TENORS — NOT FOR CROSS-VENUE READING

At-the-money IV (~spot strike) per venue. Each line is its own venue's own tenor — Kalshi ~4-7d, Polymarket ~30-60d, CBOE/USO ~30d, OVX 30d. The lines are NOT directly comparable in level. Use this only for per-venue trends (is Kalshi's vol rising?) and co-movement (does Polymarket follow CBOE?). For tradeable cross-venue gaps with proper tenor + strike matching, see §3 above.

How to read this · what is and isn't meaningful

The mixed-tenor problem. Pred markets have specific resolution dates and we can't pick "30-day" Kalshi because Kalshi only lists weekly WTI markets. So this chart plots different tenors on the same axis — a 4-day Kalshi IV is naturally different from a 30-day CBOE IV (vol term structure: typically backwardated in a calm market, contangoed when stressed).

What's still meaningful here. (a) Time evolution per venue — is Kalshi's vol drifting up or down? (b) Co-movement — when CBOE moves, do pred markets follow? (c) Sustained level differences far beyond what term structure alone explains — a 20-vol-pt Kalshi-vs-CBOE gap is way more than what term structure alone could justify, so the level gap itself is a hint (but §3 above is the rigorous comparison).

What's NOT meaningful. Reading absolute spread between two lines and calling it edge. The whole point of §3 (probability space) is to do the cross-venue comparison properly.

Heads-up about ATM. "Closest strike to spot" can jump as spot moves. For Polymarket the closest market is often a $5-10-wide range (so ATM is approximate). Tooltip flags both DTE and strike distance.

5 Top IV-dislocation events

Largest pred-mkt-vs-CBOE gaps in the selected range. "vs CBOE" = pred-mkt IV − nearest CBOE strike IV (positive = pred-mkt richer).

How to read this · what makes a real opportunity

The setup. For each prediction-market quote we find the nearest CBOE strike at the same timestamp and compute gap = pred_iv − cboe_iv. Positive = prediction market is pricing higher vol than the option chain. Sorted descending by absolute gap.

Why "nearest CBOE strike" instead of an interpolated curve. Simpler, more conservative. If the nearest CBOE strike is $5 away in a 1-vol-pt-per-$ skew regime, you're already absorbing ~5 vol pts of strike-mismatch noise. Take the gaps with a grain of salt at wing strikes; treat ATM gaps as the most signal-y.

Filters that matter. The "Min 24h vol" filter is the one to actually use — a 30 vol-pt gap on a $50/day market isn't real (you can't enter at the printed mid). $1k is a soft floor for tradeable; $10k means there's actually a counterparty.

What to do with a real one. Sell the rich vol on the prediction market (sell the YES at price > fair, or buy the NO at price < fair); buy the cheaper vol on the CBOE option (long straddle near the same strike). Hedge frequency is the practical limit — if the prediction market resolves in 7 days and CBOE expiry is 30 days, you have a tenor mismatch that needs management.

Loading…

6 Vol-market depth · 24h notional volume per venue

Total 24h notional traded per venue. Tells you whether the prediction-market smile is actually tradeable — a 10-vol-point dislocation on a $100/day market isn't a real opportunity.

How to read this

Why this section exists. A "real" trade needs a counterparty. Sections 2-5 don't gate on liquidity, so a beautiful 20-vol-pt gap on a Polymarket strike with $5 of 24h volume looks tempting but isn't tradeable at any meaningful size. Use this as the sanity check before acting on §5.

What the numbers mean. Per-venue total 24h notional in USD. CBOE/USO is summed across all strikes (typically $1M+/day for the front-month chain). Kalshi and Polymarket are summed across their per-strike contracts (Kalshi reports notional in cents-per-contract converted to USD; Polymarket reports USDC volume). OVX is excluded — it's an index, not a market.

Live vs Daily avg. Live = per-snapshot 24h-rolling. Daily avg = mean per UTC day; better for spotting weekday/weekend patterns once you have a few weeks of data. Prediction-market volume is heavily weekday-loaded.

Rule of thumb. Need at least ~$10k/day on a venue before you'd consider it for an actual trade. Below that, the spread eats the carry.

Mode: