STRASMORE/EXPLORE 2,214 QUERIES

bracket_legs

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-12, from what-is-an-implied-volatility-index.

as of table 2×7read in context →
bracket_legs — 2 rows by 7 columns, computed from US exchange, SIP and OPRA data.
legexpirydteatm_iv_pctcontract_countweight_pctiv30_pct
nearJuly 10, 20262521.77628.621.83
farJuly 17, 20263221.85671.421.83
Rows × columns
2 × 7
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for bracket_legs, derived from the stored result.
ColumnTypeRangeNotes
leg text 2 distinct values (far, near)
expiry text 2 distinct values (July 10, 2026, July 17, 2026)
dte number 25 to 32
atm_iv_pct number 21.77 to 21.85 percent
contract_count number every row is 6 count
weight_pct number 28.6 to 71.4 percent
iv30_pct number every row is 21.83 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

the exact SQL behind every number
SELECT
    leg,
    leg_expiry                                              AS expiry,
    leg_dte                                                 AS dte,
    round(leg_iv * 100, 2)                                  AS atm_iv_pct,
    leg_contracts                                           AS contract_count,
    round(leg_weight * 100, 1)                              AS weight_pct,
    round(sqrt((near_iv * near_iv * near_dte * (far_dte - 30)
              + far_iv * far_iv * far_dte * (30 - near_dte))
              / (far_dte - near_dte) / 30) * 100, 2)        AS iv30_pct
FROM
(
    SELECT
        maxIf(days_to_expiry, days_to_expiry <= 30)                     AS near_dte,
        minIf(days_to_expiry, days_to_expiry > 30)                      AS far_dte,
        argMaxIf(atm_iv, days_to_expiry, days_to_expiry <= 30)          AS near_iv,
        argMinIf(atm_iv, days_to_expiry, days_to_expiry > 30)           AS far_iv,
        argMaxIf(expiry_label, days_to_expiry, days_to_expiry <= 30)    AS near_expiry,
        argMinIf(expiry_label, days_to_expiry, days_to_expiry > 30)     AS far_expiry,
        argMaxIf(contracts, days_to_expiry, days_to_expiry <= 30)       AS near_contracts,
        argMinIf(contracts, days_to_expiry, days_to_expiry > 30)        AS far_contracts
    FROM
    (
        SELECT
            concat(monthName(expiration_date), ' ', toString(toDayOfMonth(expiration_date)), ', ', toString(toYear(expiration_date))) AS expiry_label,
            days_to_expiry,
            avg(toFloat64(implied_volatility))  AS atm_iv,
            count()                             AS contracts
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'AAPL'
          AND date = '2026-06-15'
          AND iv_converged = 1
          AND volume > 0
          AND days_to_expiry BETWEEN 7 AND 90
          AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.025
        GROUP BY expiration_date, days_to_expiry
        HAVING contracts >= 2
    )
)
ARRAY JOIN
    ['near', 'far']                                     AS leg,
    [near_expiry, far_expiry]                           AS leg_expiry,
    [near_dte, far_dte]                                 AS leg_dte,
    [near_iv, far_iv]                                   AS leg_iv,
    [near_contracts, far_contracts]                     AS leg_contracts,
    [(far_dte - 30) / (far_dte - near_dte),
     (30 - near_dte) / (far_dte - near_dte)]            AS leg_weight
ORDER BY leg_dte

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysiswhat-is-an-implied-volatility-index
iv30_trace series 54×5 term_structure series 13×5 iv_screener ranking 6×4 The 2s10s spread, every print of the half table 124×2 The 2s10s spread, every print of the half table 124×2 Every half-year since 1976: the 2y and 10y change, the twist between them, and the half's lowest 2s10s print table 100×7 See all 2,214 queries →