Skip to content

Why this was measurable without buying anything

Every regime record since 2026-09-11 carries iv30_status: "PROVISIONAL_VIX_PROXY — canonical IV30 pending ThetaData". The assumption was that closing it required procuring data.

It did not. The VolSurfAE project on ai-rig already ingests option chains and stores SVI-fitted volatility surfaces at data/feature_store/svi_params/, hive-partitioned by ticker and month, 56 MB, written daily — and it covers all four charter underlyings. Canonical IV30 is a 30-day ATM read off that surface, so it is a parquet read, not a purchase.

The subscription question was also moot: THETADATA_TIER = "STANDARD" is already configured in that project (2016 history, Greeks, IV). The credential file is not on ai-rig's disk at the path the code expects, which is a separate open question.

Method

Raw SVI stores total implied variance, w(k) = a + b(ρ(k−m) + √((k−m)² + σ²)). At the money k = 0, so w_atm = a + b(−ρm + √(m² + σ²)), and σ = √(w/T).

IV30 is w interpolated in total variance, linearly in T to T = 30/365, then converted back. Interpolating total variance is the standard choice — it is what keeps the term structure arbitrage-free under linear interpolation; interpolating implied vol directly does not.

Quality gating was explicit rather than incidental, because most of the store's rows are not usable:

SVI rows scanned 28,325
used (fit_status == SUCCESS, non-null params, T > 0) 24,767 (87%)
skipped, did not converge 3,558
dates scored 1,188
dates dropped for want of expiries bracketing 30 days 1

A date is scored only when two successful fits bracket 30 days. Extrapolating a smile fit past its last expiry to reach 30 days would have produced a number with no data behind it.

Result: 1,188 days, 2022-01-03 → 2026-09-29, IV30 median 15.07%, range 9.39%–42.69%.

Finding 1 — the gap is systematic and one-directional

Over the 1,181-day overlap with the regime series:

canonical IV30 − VIX proxy vol points
mean −2.62
median −2.51
standard deviation 1.06
minimum −9.92
maximum +0.14

The maximum is the striking number. Canonical IV30 is below the VIX proxy on essentially every one of 1,181 days. This is not noise around a correct value; it is a wedge.

And it is structural, not an error in either series. VIX is the SPX 30-day variance swap rate; canonical IV30 here is SPY at-the-money implied vol. The variance swap rate exceeds ATM vol by the skew/convexity premium, so VIX overstates ATM IV30 by construction. The framework's VRP is defined as implied minus forecast realised, and forecast_rv30 is HAR fitted on SPY closes. The consistent implied measure for that comparison is ATM vol. Using VIX injects the variance premium into a quantity intended to measure the vol premium.

The wiki estimated "a systematic 1–2 vol points." Measured: 2.6, and nearly always in the same direction.

Finding 2 — 41% of VRP signs flip

Only the third axis can move: the VIX band and term ratio come from VIX and VIX3M and are untouched. So the entire effect lands on the vrp+ / vrp− suffix — which is what gates premium selling.

band flips of share
calm 380 788 48.2%
normal 91 332 27.4%
stressed 10 61 16.4%
all 481 1181 40.7%

Because canonical IV30 is lower, flips run overwhelmingly vrp+ → vrp−: days the proxy called premium-rich were not.

The flips are mostly not marginal. On flip days the median |vrp_proxy| was 1.18 vol points and the maximum 4.22; only 45% had |vrp_proxy| < 1.0 vol point. So more than half of the flips reverse a VRP sign the proxy stated with apparent confidence.

calm-contango-vrp+ is the row that admits condors, credit spreads, calendars and diagonals. Nearly half of the calm days the gate called sell-eligible were, on the consistent measure, not.

Finding 3 — this corrects two of my own prior findings

The θ evidence (2026-09-27:amendment-vrp-threshold-evidence) understates the problem. It noted that canonical IV30 would shift the level and that every θ conclusion would need recomputing. The shift is −2.6 vol points against a proposed θ of 3.0 — so θ = 3.0 on the proxy corresponds to roughly θ = 0.4 on the consistent measure. The threshold is almost entirely consumed by the measurement wedge.

The long-vol finding (2026-09-30:regime-mapping-straddle-gap-finding) is materially changed. It used vrp_realised = VIX/100 − RV_fwd. Recomputed on canonical IV30, over the same 1,154 days — so this is a within-sample comparison, not a window artifact:

band n long-win % proxy long-win % canonical mean proxy mean canonical
calm 761 12.6% 27.5% +0.0307 +0.0068
normal 332 23.2% 35.5% +0.0312 +0.0025
stressed 61 3.3% 23.0% +0.0774 +0.0353
all 1154 15.2% 29.5% +0.0333 +0.0070

The share of days on which realised vol exceeded implied roughly doubles, and the mean premium collapses toward zero. Two regimes invert to favour the buyer: calm-flat-vrp+ (−0.0206, n=38) and normal-contango-vrp+ (−0.0010, n=123).

Yesterday's headline — "mean is positive in all sixteen regimes; in seventeen years there is no regime where realised exceeded implied on average" — is substantially an artifact of the VIX proxy. The premium is real but much smaller than the proxy shows, and it is not universal.

What this does not establish

  • Not P&L. Still a per-unit-vega proxy; still cannot price gamma, path, or an exit path.
  • Whether SPY ATM IV30 is the right canonical measure is a modelling choice, and the owner should confirm it. VIX is not wrong, it is a different quantity. But the framework's own field is named iv30 and flagged "canonical IV30 pending", so ATM IV30 was always the intent; this confirms the intent rather than inventing it.
  • Coverage is 2022-01 onward, not 2009. The regime series runs to 2009; canonical IV30 for the earlier period would need a chain pull against the STANDARD subscription (2016+), and 2009–2015 is out of reach at any tier below PRO.
  • The store covers 50 tickers but not EIX or PCG, two of the current paper book's positions.

Recommendation

Take the dependency, but measure once more before wiring it into the daily gate.

The measurement answers the question that was actually open: the proxy is materially wrong, in the direction that flatters premium selling, on nearly every day. That is worth fixing.

But wiring hermes to read ai-rig's parquet store daily re-couples a machine deliberately removed from the OKF pipeline on 2026-09-20, and makes the regime gate depend on another project's ingestion schedule and schema. That schema has visibly churned — svi_params_refit, .pre_jja0_backup, .pre_25al_backup exist alongside the primary store, and the ticker column is large_string in some partitions and string in others, which breaks a naive dataset read.

So, in order:

  1. Correct the record first. File correction notes against the θ evidence and the long-vol finding. Both are published and both now understate or misstate their case.
  2. Decide the canonical measure — owner confirmation that SPY ATM IV30, not VIX, is what iv30 means.
  3. Then choose the plumbing. Either a daily pull from ai-rig with the staleness guard covering absence (36 KB per ticker-month, trivial), or give hermes the ThetaData credential so it derives IV30 itself and stays self-contained. The second avoids the cross-project coupling and is the one I would pick if the credential can be located.