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

The Rule of 16 in Options, and When It Breaks

The rule of 16 turns implied volatility into a daily expected move: 16 is the square root of 252 trading days. Here is the math, and where it breaks.

The rule of 16 in options says that annualized implied volatility divided by 16 gives the size of a typical one day move. A chain quoting 32% implied volatility is pricing sessions of roughly 2%, up or down. The 16 is not a fudge factor: it is the square root of 252, the count of trading sessions in a year, rounded from 15.87.

What is the rule of 16 in options?

Implied volatility, the number an option chain quotes as IV, is annualized. It answers a question about a full year: one standard deviation of the stock's return over the next twelve months, stated in percent. One standard deviation is the ordinary middle of a distribution, about two thirds of outcomes under a normal bell curve, so a one sigma day is a normal day rather than a dramatic one. What implied volatility measures and how implied volatility is calculated cover where that quote comes from.

Almost nobody holds a position for a year. The rule of 16 rescales the annual figure down to the horizon a trader actually has: divide by 16 for one session. A 16% IV implies a 1% day, a 32% IV implies a 2% day, an 80% IV implies a 5% day.

Why 16, and where the other divisors come from

Volatility does not add up over time the way distance does. Variance, the square of the standard deviation, is the quantity that accumulates evenly across independent periods, so the standard deviation itself grows with the square root of time. Rescaling an annual number to a shorter window means dividing by the square root of how many of those windows fit inside a year.

That one idea generates every divisor in circulation:

  • About 252 trading sessions in a year. The square root of 252 is 15.87, which rounds to 16.
  • 52 weeks in a year. The square root of 52 is 7.2.
  • 12 months in a year. The square root of 12 is 3.46.
  • 4 quarters in a year. The square root of 4 is exactly 2.

A 40% IV works out to a 20% quarterly move, an 11.6% monthly move, a 5.6% weekly move and a 2.5% daily move, each at one standard deviation.

The scaling is testable rather than assumed. The panel below takes about three years of SPY sessions, measures how far the fund actually travelled over windows of one, two, five, ten, twenty one, forty two and sixty three sessions, then divides each figure by the square root of its own horizon.

QueryHow far SPY travels over one session, and over sixty three
The exact SQL behind every number
SELECT
    horizon,
    round(sqrt(arrayReduce('varPop', returns)) * 100, 2)           AS move_pct,
    round(sqrt(arrayReduce('varPop', returns)) * 100 / sqrt(h), 2) AS daily_equivalent_pct,
    length(returns)                                                AS sample_count
FROM
(
    SELECT
        hz.h                                                          AS h,
        concat(toString(hz.h), if(hz.h = 1, ' session', ' sessions')) AS horizon,
        arrayMap((later, earlier) -> (later / earlier) - 1,
                 arraySlice(spy.closes, hz.h + 1),
                 arraySlice(spy.closes, 1, length(spy.closes) - hz.h)) AS returns
    FROM
    (
        SELECT arrayJoin([1, 2, 5, 10, 21, 42, 63]) AS h
    ) AS hz
    CROSS JOIN
    (
        SELECT arrayMap(t -> t.2, arraySort(t -> t.1, groupArray((session_date, close_px)))) AS closes
        FROM
        (
            SELECT
                date                   AS session_date,
                toFloat64(max(close))  AS close_px
            FROM global_markets.stocks_daily_aggs
            WHERE ticker = 'SPY'
              AND date >= today() - 1100
              AND date <  today() - 1
            GROUP BY session_date
        )
    ) AS spy
)
WHERE length(returns) > 100
ORDER BY h
Run this yourself

The move column climbs from 0.97% over a single session to 5.89% over 63 sessions. Square root scaling predicts that sixty three times the elapsed time widens a move by a factor of 7.94, not by a factor of 63. The last column carries out exactly that correction, dividing each row by the square root of its own horizon: 0.97% at one session, 0.74% at sixty three. A curve that flat is what makes a single divisor usable at all.

Does the rule of 16 match what stocks actually do?

Converting a quote is one job. Measuring whether the quote matched what followed is a different one, and the two get confused constantly. The next panel sets them beside each other for six household names: the average implied volatility on near the money contracts with twenty to forty five days left, the rule of 16 conversion of that quote, and the standard deviation of the stock's own daily returns over the same six months.

QueryImplied volatility divided by 16, next to the realized daily move
The exact SQL behind every number
SELECT
    iv.symbol                AS symbol,
    round(iv.iv_pct, 1)      AS annual_iv_pct,
    round(iv.iv_pct / 16, 2) AS implied_daily_pct,
    round(rv.sigma_pct, 2)   AS realized_daily_pct
FROM
(
    SELECT
        underlying_symbol             AS symbol,
        avg(implied_volatility) * 100 AS iv_pct
    FROM global_markets.options_greeks
    WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')
      AND date >= today() - 190
      AND date <  today() - 1
      AND iv_converged = 1
      AND volume > 0
      AND underlying_close > 0
      AND days_to_expiry BETWEEN 20 AND 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
    GROUP BY symbol
) AS iv
INNER JOIN
(
    SELECT
        symbol,
        stddevPop(daily_return) * 100 AS sigma_pct
    FROM
    (
        SELECT
            symbol,
            close_px / lagInFrame(close_px) OVER (PARTITION BY symbol ORDER BY session_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS daily_return
        FROM
        (
            SELECT
                ticker                AS symbol,
                date                  AS session_date,
                toFloat64(max(close)) AS close_px
            FROM global_markets.stocks_daily_aggs
            WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')
              AND date >= today() - 190
              AND date <  today() - 1
            GROUP BY symbol, session_date
        )
    )
    WHERE isFinite(daily_return)
    GROUP BY symbol
) AS rv ON iv.symbol = rv.symbol
ORDER BY annual_iv_pct DESC
Run this yourself

NVDA carries the widest quote in the group at 41.5%, which the rule of 16 turns into a 2.59% session. Its realized daily standard deviation over the window measured 2.4%. At the quiet end, SPY quoted 16.5%, or 1.03% a day, against a realized 0.89%. The gap between the last two columns has a name of its own, the volatility risk premium. The rule of 16 says nothing about it. The rule moves a quote from one horizon to another, and stops there.

Break one: trading days against calendar days

The 252 in the derivation counts sessions, not calendar days. A calendar convention has to use 365, whose square root is 19.1. Both are internally correct. The failure mode is mixing them. A contract expiring next Friday is seven calendar days out and five sessions out. Scale a 32% IV by seven days over 252 and the answer is 5.33%. Scale it by five over 252, or by seven over 365, and the answer is 4.51% or 4.43%. The mixed version runs close to a fifth too wide on a contract with a week to run.

Applied consistently, the two conventions nearly agree from a week out: both put that 32% IV near 4.5% over a week and near 9.2% over a month. They part company at a single day, where one of them counts a weekend the market never traded through.

That weekend is where the abstraction becomes visible. A Friday close to Monday close return covers three calendar days and one session. If volatility accrued by the clock, a Monday would print about one and a half times the average weekday. The tape says otherwise.

QueryDoes a Monday move like three calendar days? SPY by weekday
The exact SQL behind every number
SELECT
    label,
    round(sigma * 100, 3)                AS sigma_pct,
    round(sigma / avg(sigma) OVER (), 2) AS vs_all_days_ratio,
    sessions
FROM
(
    SELECT
        formatDateTime(session_date, '%a') AS label,
        min(toDayOfWeek(session_date))     AS dow,
        stddevPop(daily_return)            AS sigma,
        count()                            AS sessions
    FROM
    (
        SELECT
            session_date,
            close_px / lagInFrame(close_px) OVER (ORDER BY session_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS daily_return
        FROM
        (
            SELECT
                date                  AS session_date,
                toFloat64(max(close)) AS close_px
            FROM global_markets.stocks_daily_aggs
            WHERE ticker = 'SPY'
              AND date >= today() - 1100
              AND date <  today() - 1
            GROUP BY session_date
        )
    )
    WHERE isFinite(daily_return)
    GROUP BY label
)
ORDER BY dow
Run this yourself

Across the last three years of SPY sessions, Monday's standard deviation measured 0.806%, which is 0.85 times the all weekday average, over 143 Mondays. Wednesday, a session that follows exactly one closed night, printed 1.182%. Two closed weekend days add far less than the calendar's three days of clock time. That is the empirical case for counting sessions and dividing by 16.

A converter you can run: IV to a move, on both conventions

Save this as rule_of_16.py and run it with python3 rule_of_16.py. It uses only the standard library. Change the IV input to the quote in front of you, and it prints the one standard deviation move on a trading day basis and a calendar day basis, plus the size of the mixed basis error.

import math

IV_PCT = 32.0  # annualized implied volatility, in percent

def move(iv_pct, days, basis):
    return iv_pct * math.sqrt(days / basis)

horizons = (
    ('one session', 1, 1),
    ('one week', 5, 7),
    ('one month', 21, 30),
    ('one quarter', 63, 91),
)

print(f'IV {IV_PCT:.1f}%: one standard deviation move')
for label, sessions, calendar_days in horizons:
    a = move(IV_PCT, sessions, 252)
    b = move(IV_PCT, calendar_days, 365)
    print(f'{label:>12}   252 basis {a:6.2f}%   365 basis {b:6.2f}%   gap {a - b:5.2f}pp')

print(f'7 calendar days on a 252 basis: {move(IV_PCT, 7, 252):.2f}% (the mixed basis error)')

The gap column shrinks to a rounding difference at a week and beyond. It is the single day row that carries the whole disagreement.

Break two: one scheduled date inside the window

The rule of 16 spreads a year of volatility evenly over every session. Real calendars are lumpy. A company reports results four times a year, and those dates carry ranges that dwarf an ordinary session. An implied volatility quote covering one of them is an average over very unequal days, and dividing that average by 16 returns a number describing none of them individually.

QueryThe largest single session against a typical one, by name
The exact SQL behind every number
SELECT
    symbol,
    round(quantileDeterministic(0.5)(abs_move_pct, toUInt32(session_date)), 2) AS typical_abs_move_pct,
    round(max(abs_move_pct), 2)                                               AS largest_abs_move_pct,
    round(max(abs_move_pct) / quantileDeterministic(0.5)(abs_move_pct, toUInt32(session_date)), 1) AS largest_to_typical_ratio,
    formatDateTime(argMax(session_date, abs_move_pct), '%b %e, %Y')           AS largest_move_on
FROM
(
    SELECT
        symbol,
        session_date,
        abs(close_px / lagInFrame(close_px) OVER (PARTITION BY symbol ORDER BY session_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1) * 100 AS abs_move_pct
    FROM
    (
        SELECT
            ticker                AS symbol,
            date                  AS session_date,
            toFloat64(max(close)) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')
          AND date >= today() - 400
          AND date <  today() - 1
        GROUP BY symbol, session_date
    )
)
WHERE isFinite(abs_move_pct)
  AND abs_move_pct > 0
GROUP BY symbol
ORDER BY largest_to_typical_ratio DESC
Run this yourself

Over the last year of sessions, the sharpest single day in this group belongs to MSFT: 15.51% on Jul 30, 2026, against a typical session of 0.95%, a ratio of 16.3 to one. A thirty day quote spanning a date of that size is averaging one such session together with twenty ordinary ones, and the rule of 16 hands back the average rather than the shape.

Option markets price scheduled dates in advance. A chain's front expiry IV commonly rises into a reporting date and settles afterwards, and the same stock can show two very different IV numbers on two expiries in the same week. The expected move an option chain implies is the practical form of that adjustment, and IV term structure maps the same lumpiness across expiries.

Break three: one standard deviation is a range, not a forecast

The output is a width. Under a normal distribution about 68% of sessions land inside one standard deviation, and about one in twenty exceeds two of them. Stock returns carry fatter tails than the bell curve, so the outliers arrive more often than those counts suggest. A one sigma number also says nothing about direction, and half of the distribution sits comfortably inside it.

The averaging problem is sharpest at the short end. A contract expiring today has one session left, so the daily number is the contract's entire remaining life, and a single scheduled event inside it dominates everything else. Zero days to expiration contracts live permanently in that regime.

Does the rule of 16 say whether an option is cheap?

No, and this is the question it gets asked most. Dividing by 16 is a unit conversion. It moves a quote from a yearly scale to a daily one and preserves everything else about it, including whatever the market has already priced in. A 60% IV restated as a 3.75% daily move is the same quote in different clothes.

Judging the level takes a comparison the arithmetic does not contain: where this IV sits against the same name's own history, and how it lines up with what the stock has actually been doing. Whether 30% implied volatility is high works through that comparison directly, and historical volatility against implied volatility sets the two measurements side by side.

How these panels are built

The realized figures are standard deviations of close to close returns from daily bars, not average moves. An average absolute move runs near 80% of a standard deviation under a normal distribution, so the two are not interchangeable.

The implied figures average near the money contracts, strike within 5% of the underlying close, at twenty to forty five days to expiry, keeping only rows where the pricing model converged and the contract traded that day.

The horizon panel uses overlapping windows, so the sixty three session observations share most of their data. The weekday panel labels each session by its own weekday, which means the Tuesday bucket quietly absorbs the sessions following a Monday holiday.

FAQ

What is the rule of 16 in options?

Divide a stock's annualized implied volatility by 16 to get the size of a typical one day move. A 48% IV implies a 3% session, up or down, at one standard deviation. The 16 comes from the square root of 252 trading sessions in a year, which is 15.87.

Why is it the rule of 16 and not the rule of 19?

19.1 is the square root of 365, the calendar day version of the same math. Implied volatility scales over trading sessions, and a year holds about 252 of them. Use 252 with session counts and 365 with calendar day counts, and never mix a count from one with the year length from the other.

How do I get a weekly or monthly move from implied volatility?

Divide by the square root of how many of those periods fit in a year: 15.87 for a session, 7.2 for a week, 3.46 for a month, 2 for a quarter. A 30% IV implies about a 4.2% week and an 8.7% month at one standard deviation.

Does the rule of 16 work for 0DTE options?

The arithmetic still converts, and a same day expiry leaves nothing to average over. One session is the contract's whole life, so a scheduled event inside it carries the entire number instead of one twenty first of it.

Is a one standard deviation move a prediction?

No, it is a width. Under a normal distribution roughly one session in three closes outside the one sigma band, and real stock returns have fatter tails than that, so the count of outliers runs higher.


Every panel here ships with the SQL that produced it, so both the divisor and the window stay visible. To run the same implied against realized comparison on a name you follow, ask for it in plain English on the Strasmore terminal.