STRASMORE/EXPLORE 3,256 QUERIES

Beta and R-squared against SPY: daily returns versus weekly, twelve months to Aug 21 2026

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-26, from Implied Volatility vs Beta: What Each Tells You.

as of table 10×5read in context →
Beta and R-squared against SPY: daily returns versus weekly, twelve months to Aug 21 2026 — 10 rows by 5 columns, computed from US exchange, SIP and OPRA data.
symbolbeta_dailybeta_weeklyr_squaredreturn_count
COIN2.832.50.28250
TSLA2.231.920.38250
NVDA1.881.660.43250
MSFT0.941.580.14250
AAPL0.710.830.13250
GLD0.70.760.1250
TLT0.170.120.05250
JNJ-0.2-0.520.02250
KO-0.27-0.040.03250
XOM-0.51-0.930.07250
Rows × columns
10 × 5
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 and R-squared against SPY: daily returns versus weekly, twelve months to Aug 21 2026, derived from the stored result.
ColumnTypeRangeNotes
symbol text 10 distinct values (AAPL, COIN, GLD…)
beta_daily number -0.51 to 2.83
beta_weekly number -0.93 to 2.5
r_squared number 0.02 to 0.43
return_count number every row is 250 count

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
    px AS
    (
        SELECT
            ticker,
            date,
            toFloat64(close) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('SPY','AAPL','MSFT','NVDA','TSLA','COIN','KO','JNJ','XOM','GLD','TLT')
          AND date >= '2025-08-22'
          AND date <= '2026-08-21'
    ),
    daily_ret AS
    (
        SELECT
            ticker,
            date,
            close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
        FROM px
    ),
    weekly_px AS
    (
        SELECT
            ticker,
            toMonday(date)         AS week_start,
            argMax(close_px, date) AS week_close
        FROM px
        GROUP BY ticker, week_start
    ),
    weekly_ret AS
    (
        SELECT
            ticker,
            week_start,
            week_close / lagInFrame(week_close) OVER (PARTITION BY ticker ORDER BY week_start ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
        FROM weekly_px
    ),
    daily_beta AS
    (
        SELECT
            s.ticker                                           AS symbol,
            round(covarSamp(s.ret, i.ret) / varSamp(i.ret), 2) AS beta_daily,
            round(pow(corr(s.ret, i.ret), 2), 2)               AS r_squared,
            count()                                            AS return_count
        FROM daily_ret AS s
        INNER JOIN
        (
            SELECT date, ret FROM daily_ret WHERE ticker = 'SPY' AND isFinite(ret)
        ) AS i ON i.date = s.date
        WHERE s.ticker != 'SPY' AND isFinite(s.ret)
        GROUP BY symbol
    ),
    weekly_beta AS
    (
        SELECT
            s.ticker                                           AS symbol,
            round(covarSamp(s.ret, i.ret) / varSamp(i.ret), 2) AS beta_weekly
        FROM weekly_ret AS s
        INNER JOIN
        (
            SELECT week_start, ret FROM weekly_ret WHERE ticker = 'SPY' AND isFinite(ret)
        ) AS i ON i.week_start = s.week_start
        WHERE s.ticker != 'SPY' AND isFinite(s.ret)
        GROUP BY symbol
    )
SELECT
    d.symbol       AS symbol,
    d.beta_daily   AS beta_daily,
    w.beta_weekly  AS beta_weekly,
    d.r_squared    AS r_squared,
    d.return_count AS return_count
FROM daily_beta AS d
INNER JOIN weekly_beta AS w ON w.symbol = d.symbol
ORDER BY beta_daily 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 analysisImplied Volatility vs Beta: What Each Tells You
Near-the-money implied volatility, 20 to 45 days to expiry, three weeks to Aug 21 2026 table 11×5 → NVDA beta against SPY, re-estimated monthly over a rolling twelve-month window series 48×4 → Average absolute daily move on sessions when SPY moved less than 0.25 percent ranking 10×4 → Highest ATM implied volatility: liquid single names and funds, latest session table 12×5 → Near the money 30 day calls ranked by dollar premium table 12×5 → Where IV percentile sits furthest above IV rank, latest session table 12×6 → See all 3,256 queries →