IV-Rank & IV-Percentile

In addition to the Volatility regime (VIX) we score implied volatility per underlying. This finds tickers whose IV is high or low relative to their own history - independent of the broader market.

Definitions

IV30 is the 30-day implied volatility (decimal: 0.32 = 32%).

IV-Rank

Position of the current IV between the min and max of the lookback window (default 252 trading days):

rank = (IV_now − IV_min) / (IV_max − IV_min), clamped to [0, 1]

IV-Percentile

Share of days with IV ≤ current value:

percentile = #{days with IV ≤ IV_now} / #{days total}

Endpoints

MethodPathPlan
POST/api/iv/{symbol}premium+
POST/api/iv/{symbol}/bulkpremium+
GET/api/iv/{symbol}/metricsall users
GET/api/iv/{symbol}/historyall users

Example:

GET /api/iv/AAPL/metrics?iv=0.31&lookback_days=252

Response:

{
  "symbol": "AAPL",
  "lookback_days": 252,
  "samples": 248,
  "current_iv": 0.31,
  "min": 0.18,
  "max": 0.55,
  "mean": 0.27,
  "iv_rank": 0.351,
  "iv_percentile": 0.78
}

Feeding data

With Wheel Premium you can write IV data, single or bulk:

POST /api/iv/AAPL
{
  "iv30": 0.31,
  "as_of_date": "2026-05-03",
  "source": "ibkr"
}
POST /api/iv/AAPL/bulk
{
  "rows": [
    {"as_of_date": "2026-04-30", "iv30": 0.30},
    {"as_of_date": "2026-05-01", "iv30": 0.32}
  ],
  "source": "csv"
}

Heuristics

  • IV-Rank > 0.5 → IV in the upper third of history → premiums for

short puts/calls relatively rich.

  • IV-Rank < 0.2 → historically calm → tend to wait.
  • IV-Percentile > 0.8 → 80% of days had a lower IV → classic IV

crush is often near.