STRASMORE/EXPLORE 2,985 QUERIES

implied_vs_realised

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-10-03, from aapl-earnings-day-moves.

as of series 3×4read in context →
implied_vs_realised — 3 rows by 4 columns, computed from US exchange, SIP and OPRA data.
report_dateimplied_move_pctrealised_move_pctrealised_minus_implied_pct
2025-01-306.280.67-5.61
2026-01-295.580.46-5.12
2026-07-3011.837.35-4.48
Rows × columns
3 × 4
Period covered
to
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 implied_vs_realised, derived from the stored result.
ColumnTypeRangeNotes
report_date date 2025-01-30 to 2026-07-30
implied_move_pct number 5.58 to 11.83 percent
realised_move_pct number 0.46 to 7.35 percent
realised_minus_implied_pct number -5.61 to -4.48 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.

WITH
reports AS
(
    SELECT DISTINCT filing_date AS report_date
    FROM global_markets.stocks_8k_text
    WHERE ticker = 'AAPL'
      AND startsWith(form_type, '8-K')
      AND filing_date >= '2023-09-01'
      AND (positionCaseInsensitive(items_text, 'Results of Operations') > 0
           OR positionCaseInsensitive(items_text, 'Item 2.02') > 0)
),
bars AS
(
    SELECT
        date,
        toFloat64(any(open))  AS open_px,
        toFloat64(any(close)) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2023-08-01'
    GROUP BY date
),
seq AS
(
    SELECT date, open_px, close_px, row_number() OVER (ORDER BY date) AS n
    FROM bars
),
per_report AS
(
    SELECT
        d0.date                                  AS report_date,
        abs(d1.close_px / d0.close_px - 1) * 100 AS abs_full_day_pct
    FROM seq AS d0
    INNER JOIN seq AS d1 ON d1.n = d0.n + 1
    INNER JOIN reports AS r ON r.report_date = d0.date
),
atm_raw AS
(
    SELECT
        date,
        days_to_expiry,
        implied_volatility
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= '2023-09-01'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry BETWEEN 1 AND 10
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.025
),
nearest AS
(
    SELECT date, min(days_to_expiry) AS dte
    FROM atm_raw
    GROUP BY date
),
atm AS
(
    SELECT
        a.date                                                                   AS date,
        round(avg(a.implied_volatility * sqrt(a.days_to_expiry / 365)) * 100, 2) AS implied_move_pct
    FROM atm_raw AS a
    INNER JOIN nearest AS n ON n.date = a.date AND a.days_to_expiry = n.dte
    GROUP BY a.date
    HAVING count() > 0
)
SELECT
    toString(p.report_date)                                   AS report_date,
    a.implied_move_pct                                        AS implied_move_pct,
    round(p.abs_full_day_pct, 2)                              AS realised_move_pct,
    round(p.abs_full_day_pct - a.implied_move_pct, 2)         AS realised_minus_implied_pct
FROM per_report AS p
INNER JOIN atm AS a ON a.date = p.report_date
ORDER BY p.report_date
⌘/Ctrl + Enter

Work with this data in your AI assistant

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