Strasmore Research
Learn Matt ConnorBy Matt Connor · data as of August 28, 2026 · refreshed weekly

Implied Volatility vs Beta: What Each Tells You

Implied volatility vs beta: one is the option market's forward estimate of total movement, the other a backward slope against an index. Ten names, measured.

Implied volatility vs beta is a comparison of two numbers that answer different questions about the same stock. Implied volatility is the option market's forward-looking estimate of how far a stock moves in total over a defined horizon, in either direction. Beta is a backward-looking regression slope that captures only the part of a stock's past movement an index accounts for. A stock can print high on one and low on the other, and both readings can be correct at the same time.

What beta actually measures

Beta is the slope of a line fitted through two return series: a stock's and an index's. Written out, it is beta = covariance(stock returns, index returns) / variance(index returns). A beta of 1.30 says that across the window measured, the stock moved about 1.3 percent for every 1 percent move in the index, on average. A beta of 0.40 says it moved roughly four tenths as much.

Four choices sit inside every published beta before anyone quotes it: which index the stock is regressed against, how long the window runs, how often returns are sampled, and whether dividends count in the returns. Change one and the number changes. A beta quoted with no window attached is an unlabelled number, and two data providers can disagree about the same stock while both are right.

The statistic that travels with beta is R-squared: the share of the stock's return variance the index accounts for, on a scale of 0 to 1. Beta gives the slope. R-squared says whether the line is worth drawing. A beta of 1.40 with an R-squared of 0.65 describes a stock that mostly rides the index with extra amplitude. The same 1.40 with an R-squared of 0.10 describes a stock that moves on its own, with a faint index tilt on top. Only the first describes a stock an index hedge tracks closely.

What implied volatility measures

Implied volatility is the volatility number that makes an option pricing model return the price an option trades at right now. It is quoted as an annualized standard deviation. An IV of 30 percent prices roughly a 30 percent one standard deviation move over a year, and about 8.6 percent over the next 30 days, since volatility scales with the square root of time. Our guide to what implied volatility is walks through the mechanics, and implied volatility vs historical volatility covers how the forward number sits against what a stock actually did.

The difference that matters is what each number counts. IV prices every source of movement in one figure: an index-wide selloff, a trial readout, a guidance change, a takeover bid. Beta counts only the fraction of movement that travelled with the index. Everything R-squared leaves out is invisible to beta and fully priced in IV.

Implied volatility vs beta on ten household names

The panel below regresses ten liquid names on SPY, the S&P 500 ETF, over the twelve months ending August 21, 2026. It runs the same regression twice: once on daily closing returns, once on weekly returns from the identical window.

QueryBeta and R-squared against SPY: daily returns versus weekly, twelve months to Aug 21 2026
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
The exact SQL behind every number
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
Run this yourself

Each daily slope rests on 250 paired sessions. The highest daily beta in the set belongs to COIN at 2.83, alongside an R-squared of 0.28. The lowest belongs to XOM at -0.51, and its R-squared of 0.07 is the number that matters there: over this window the index accounted for a small share of that name's movement, so the slope describes very little of what the position did.

Now read the two beta columns against each other. Sampling weekly rather than daily, over the identical twelve months and against the identical index, is enough to move the slope. COIN prints 2.5 on weekly returns against 2.83 on daily ones. Neither is wrong. They answer slightly different questions.

What the option market charges on the same names

Beta comes out of past prices. This panel comes out of what traders pay now: near-the-money contracts, 20 to 45 days from expiry, averaged over the three weeks ending Aug 19, 2026. SPY joins the list here as the index reference. It is absent from the beta panel for a mechanical reason: regressed against itself, its beta is 1.00 and its R-squared 1.00.

QueryNear-the-money implied volatility, 20 to 45 days to expiry, three weeks to Aug 21 2026
symboliv_pctexpected_move_30d_pctcontract_countiv_through
COIN65.518.8598Aug 19
TSLA4111.7653Aug 19
NVDA40.311.6437Aug 19
XOM28.28.1463Aug 19
MSFT27.88922Aug 19
AAPL24.87.1599Aug 19
GLD22.96.62780Aug 19
JNJ22.86.5332Aug 19
KO18.65.3574Aug 19
SPY13.53.97451Aug 19
TLT11.73.41305Aug 19
The exact SQL behind every number
SELECT
    underlying_symbol                                                       AS symbol,
    round(avg(toFloat64(implied_volatility)) * 100, 1)                      AS iv_pct,
    round(avg(toFloat64(implied_volatility)) * 100 * sqrt(30.0 / 365.0), 1) AS expected_move_30d_pct,
    count()                                                                 AS contract_count,
    formatDateTime(max(date), '%b %e')                                      AS iv_through
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY','AAPL','MSFT','NVDA','TSLA','COIN','KO','JNJ','XOM','GLD','TLT')
  AND date >= '2026-08-03'
  AND date <= '2026-08-21'
  AND iv_converged = 1
  AND volume > 0
  AND days_to_expiry BETWEEN 20 AND 45
  AND underlying_close > 0
  AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol
HAVING contract_count >= 25
ORDER BY iv_pct DESC
Run this yourself

The widest implied volatility in the group is COIN at 65.5 percent, which prices a one standard deviation move of about 18.8 percent over 30 days. The narrowest is TLT at 11.7 percent. This panel ranks the names by total expected movement. The beta panel, headed by COIN, ranks them by the movement an index explains. Two of the eleven are ETFs, one holding gold and one holding long-dated Treasuries. Neither is an equity index bet, and a beta against an equity index is the wrong instrument for both.

The movement beta cannot see

Here is the gap made concrete. Take the sessions when SPY barely moved, an absolute close-to-close return under 0.25 percent, then measure what each of the ten names did on exactly those days. If beta were the whole story, a flat index would mean a flat stock.

QueryAverage absolute daily move on sessions when SPY moved less than 0.25 percent
symbolmove_on_flat_index_pctmove_full_sample_pctflat_index_count
COIN3.093.369
TSLA1.752.2769
NVDA1.321.8269
MSFT1.221.3569
XOM1.161.2469
GLD1.061.369
AAPL1.031.1369
KO0.980.8869
JNJ0.840.9169
TLT0.450.4869
The exact SQL behind every number
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
    ),
    idx AS
    (
        SELECT date, ret AS index_ret
        FROM daily_ret
        WHERE ticker = 'SPY' AND isFinite(ret)
    )
SELECT
    s.ticker                                                     AS symbol,
    round(avgIf(abs(s.ret) * 100, abs(i.index_ret) < 0.0025), 2) AS move_on_flat_index_pct,
    round(avg(abs(s.ret) * 100), 2)                              AS move_full_sample_pct,
    countIf(abs(i.index_ret) < 0.0025)                           AS flat_index_count
FROM daily_ret AS s
INNER JOIN idx AS i ON i.date = s.date
WHERE s.ticker != 'SPY' AND isFinite(s.ret)
GROUP BY symbol
HAVING countIf(abs(i.index_ret) < 0.0025) > 0
ORDER BY move_on_flat_index_pct DESC
Run this yourself

Over the same twelve months there were 69 of these near-flat index sessions. On them, COIN moved an average of 3.09 percent in absolute terms, against 3.3 percent across the full sample. The quietest of the ten on those days, TLT, averaged 0.45 percent. Everything in that column is movement beta assigns to nothing, and it is movement an option seller quotes a price for.

Beta is an estimate, and estimates move

A beta is not a property of a stock the way a share count is. It is a statistic computed over a window, and it moves as the window rolls forward. The panel below re-estimates NVDA's beta against SPY at the start of every month, each point built from the twelve months of daily returns before it.

QueryNVDA beta against SPY, re-estimated monthly over a rolling twelve-month window
48 rows (showing 20)
monthmonth_labelrolling_beta_1yr_squared
2022-09Sep 20222.320.65
2022-10Oct 20222.260.64
2022-11Nov 20222.210.65
2022-12Dec 20222.220.71
2023-01Jan 20232.190.71
2023-02Feb 20232.190.7
2023-03Mar 20232.170.65
2023-04Apr 20232.080.63
2023-05May 20232.040.62
2023-06Jun 20232.060.51
2023-07Jul 20232.050.47
2023-08Aug 20232.080.46
2023-09Sep 20232.030.43
2023-10Oct 20232.110.43
2023-11Nov 20232.180.4
2023-12Dec 20232.050.33
2024-01Jan 202420.3
2024-02Feb 20241.950.28
2024-03Mar 20242.020.29
2024-04Apr 20242.220.29
The exact SQL behind every number
WITH
    px AS
    (
        SELECT
            ticker,
            date,
            toFloat64(close) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('SPY','NVDA')
          AND date >= '2021-08-01'
          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
    ),
    paired AS
    (
        SELECT
            s.date AS d,
            s.ret  AS stock_ret,
            i.ret  AS index_ret
        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 = 'NVDA' AND isFinite(s.ret)
    ),
    anchors AS
    (
        SELECT DISTINCT toStartOfMonth(d) AS anchor
        FROM paired
        WHERE d >= '2022-09-01'
    )
SELECT
    formatDateTime(a.anchor, '%Y-%m')                                    AS month,
    formatDateTime(a.anchor, '%b %Y')                                    AS month_label,
    round(covarSamp(p.stock_ret, p.index_ret) / varSamp(p.index_ret), 2) AS rolling_beta_1y,
    round(pow(corr(p.stock_ret, p.index_ret), 2), 2)                     AS r_squared
FROM anchors AS a, paired AS p
WHERE p.d < a.anchor
  AND p.d >= subtractYears(a.anchor, 1)
GROUP BY a.anchor
ORDER BY a.anchor
Run this yourself

The line holds 48 monthly estimates. The first, for the year ending Sep 2022, prints 2.32. The most recent, ending Aug 2026, prints 1.87 with an R-squared of 0.44. Same stock, same index, same method, different window. A hedge sized off a beta from a stale window is sized off a number the data has already moved past.

Implied volatility carries the same warning in another form. It is a live price that changes every session, and IV is normally read against its own history rather than in isolation. Is 30 percent IV high? works through that comparison.

Which number fits which job

Beta answers index questions. How much S&P 500 exposure does a book carry, and what size of index position offsets it? That is beta weighting, and beta weighting a portfolio sets out the arithmetic. It is also the number that exposes a portfolio of names all loading on one market factor, the situation concentration risk measures from the other side.

Implied volatility answers single-name questions over a fixed horizon. What is the market charging for movement in this stock over the next 30 days, and is that price high or low against the same stock's own history? An index does not enter either question.

Neither number forecasts direction. Beta describes co-movement that already happened. IV is a price for magnitude, quoted without a sign. A stock with a beta of 1.8 and an IV of 25 percent, and a stock with a beta of 0.2 and an IV of 80 percent, are both ordinary. They carry different kinds of risk, measured by instruments built for different jobs.

FAQ

Can a stock have high implied volatility and a low beta?

Yes, and it is common. Beta counts only movement that travels with the index, while implied volatility prices all movement, including a single-company event the index knows nothing about. A stock waiting on one binary announcement can carry very high IV while its regression slope against a broad index sits near zero.

Is beta a measure of risk?

Beta measures one kind of risk: sensitivity to a chosen index over a chosen past window. It is silent on company-specific risk, and silent on anything outside that window. Two stocks with identical betas can have completely different total volatility.

What does R-squared tell you that beta does not?

R-squared is the share of a stock's return variance the index accounts for, on a scale of 0 to 1. A low R-squared means the regression line fits poorly, so the beta computed alongside it is a slope through a scattered cloud of points rather than a description of how the stock behaves.

Does implied volatility predict which way a stock will move?

No. IV is a magnitude with no direction attached. An IV of 40 percent prices a 40 percent one standard deviation move over a year, up or down with no preference between them, and the stock can move much more or much less than the price implied.

What window and return frequency go into a beta?

There is no single standard. Common conventions run from one year of daily returns to five years of monthly returns, and the first panel above shows that daily and weekly sampling over the identical year produce different slopes. A beta is comparable only to another beta computed the same way.

How these numbers were measured
  • Beta and R-squared: daily and weekly closing returns for each name and for SPY over the twelve months ending August 21, 2026, with beta as the covariance of the two return series divided by the variance of the SPY returns, and R-squared as the square of their correlation.
  • Implied volatility: contracts with 20 to 45 days to expiry and a strike within 5 percent of the underlying close, converged solves only, and only contracts that traded that day. Values are averaged over the three weeks ending Aug 19, 2026.
  • Near-flat index sessions: sessions where the absolute SPY close-to-close return came in under 0.25 percent, over the same twelve months.
  • Rolling beta: NVDA against SPY, re-estimated at the start of each month from the trailing twelve months of daily returns, covering 48 monthly points.

Every panel above ships with the SQL that produced it, so the window and the filters sit one click under each chart. To measure beta or implied volatility on a name you follow, ask for it in plain English on the Strasmore terminal.

#implied volatility#beta#risk metrics#options#portfolio