STRASMORE/EXPLORE 2,749 QUERIES

beta_drift

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 ranking 6×4read in context →
beta_drift — 6 rows by 4 columns, computed from US exchange, SIP and OPRA data.
tickerbeta_last_12mbeta_prior_12mbeta_change
NVDA1.891.840.05
MSFT0.970.920.05
AAPL0.681.240.56
JNJ-0.170.050.22
KO-0.250.080.33
XOM-0.550.521.07
Rows × columns
6 × 4
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 beta_drift, derived from the stored result.
ColumnTypeRangeNotes
ticker text 6 distinct values (AAPL, JNJ, KO…)
beta_last_12m number -0.55 to 1.89
beta_prior_12m number 0.05 to 1.84
beta_change number 0.05 to 1.07

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.

WITH closes AS
(
    SELECT
        ticker,
        date,
        max(toFloat64(close)) AS px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('AAPL', 'JNJ', 'KO', 'MSFT', 'NVDA', 'SPY', 'XOM')
      AND date >= today() - 730
      AND date <  today() - 2
    GROUP BY ticker, date
),
rets AS
(
    SELECT
        ticker,
        date,
        px / prev_px - 1 AS ret
    FROM
    (
        SELECT
            ticker,
            date,
            px,
            lagInFrame(px) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
        FROM closes
    )
    WHERE prev_px > 0
)
SELECT
    ticker,
    beta_last_12m,
    beta_prior_12m,
    round(abs(beta_last_12m - beta_prior_12m), 2) AS beta_change
FROM
(
    SELECT
        s.ticker AS ticker,
        round(covarPopIf(s.ret, m.ret, s.date >= today() - 365) / varPopIf(m.ret, s.date >= today() - 365), 2) AS beta_last_12m,
        round(covarPopIf(s.ret, m.ret, s.date <  today() - 365) / varPopIf(m.ret, s.date <  today() - 365), 2) AS beta_prior_12m
    FROM rets AS s
    INNER JOIN
    (
        SELECT date, ret
        FROM rets
        WHERE ticker = 'SPY'
    ) AS m ON s.date = m.date
    WHERE s.ticker != 'SPY'
    GROUP BY s.ticker
    HAVING countIf(s.date >= today() - 365) > 60
       AND countIf(s.date <  today() - 365) > 60
)
ORDER BY beta_last_12m DESC
⌘/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
put_cost_curve ranking 4×3 → rounding_residual table 7×6 → hedge_math table 3×6 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years) ranking 25×3 → SPY options median spread by expiration date, near-the-money strikes only ranking 25×4 → See all 2,749 queries →