STRASMORE/EXPLORE 2,749 QUERIES

rounding_residual

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-28, from how-many-puts-to-hedge-a-portfolio.

as of table 7×6read in context →
rounding_residual — 7 rows by 6 columns, computed from US exchange, SIP and OPRA data.
portfolio_sizeexact_contractscontracts_rounded_downunhedged_usd_thousandsunhedged_pctoverhedge_pct
$60k0.8206310522.94
$120k1.64149.241.0322.94
$180k2.46235.519.7122.94
$300k4.147.92.6522.94
$500k6.84664.412.882.47
$700k9.57944.16.34.66
$900k12.311223.82.655.88
Rows × columns
7 × 6
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 rounding_residual, derived from the stored result.
ColumnTypeRangeNotes
portfolio_size text 7 distinct values ($120k, $180k, $300k…)
exact_contracts number 0.82 to 12.31 count
contracts_rounded_down number 0 to 12 count
unhedged_usd_thousands number 7.9 to 64.4 US dollars
unhedged_pct number 2.65 to 105 percent
overhedge_pct number 2.47 to 22.94 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.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

SELECT
    portfolio_size,
    round(exact_raw, 2)                                                                AS exact_contracts,
    toUInt16(floor(exact_raw))                                                         AS contracts_rounded_down,
    round((beta_notional - floor(exact_raw) * contract_notional) / 1000, 1)             AS unhedged_usd_thousands,
    round(100 * (beta_notional - floor(exact_raw) * contract_notional) / portfolio, 2)  AS unhedged_pct,
    round(100 * (ceil(exact_raw) * contract_notional - beta_notional) / portfolio, 2)   AS overhedge_pct
FROM
(
    SELECT
        v.portfolio                                          AS portfolio,
        concat('$', toString(intDiv(v.portfolio, 1000)), 'k') AS portfolio_size,
        v.portfolio * 1.05                                   AS beta_notional,
        s.px * 100                                           AS contract_notional,
        v.portfolio * 1.05 / (s.px * 100)                    AS exact_raw
    FROM
    (
        SELECT arrayJoin([60000, 120000, 180000, 300000, 500000, 700000, 900000]) AS portfolio
    ) AS v
    CROSS JOIN
    (
        SELECT argMax(toFloat64(close), date) AS px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= today() - 30
    ) AS s
)
ORDER BY exact_contracts
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysishow-many-puts-to-hedge-a-portfolio
hedge_math table 3×6 → beta_drift ranking 6×4 → put_cost_curve ranking 4×3 → 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,749 queries →