STRASMORE/EXPLORE 2,170 QUERIES 22Y EQUITIES · 12Y OPTIONS

2,170 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

The 3-5-7 Rule in Options, Examined
One-day move profile, seven household names, July 2025 to June 2026table · 2026-08-15 · 7×6 S&P 500 tracker (SPY): down sessions by calendar year, 2016 to mid-2026table · 2026-08-15 · 11×5 Worst five-session stretch and deepest in-window drawdown, July 2025 to June 2026ranking · 2026-08-15 · 7×4Preview: 7 ranked values, smallest first.
What Are Put Options?
One SPY $740 put vs the stock's distance from the strike (expired Jun 18 2026)series · 2026-08-13 · 31×3Preview: a 16-point series, ending lower. The same put at SPY's June peak vs its June troughseries · 2026-08-13 · 2×6Preview: a 2-point series, ending lower. The SPY put's delta stayed negative through its whole lifeseries · 2026-08-13 · 31×2Preview: a 16-point series, ending higher.
How to Read an Option Chain, Column by Column
Where the trading happened: SPY contract volume by strike, August 21 2026 expiry, July 15 2026ranking · 2026-07-31 · 8×3Preview: 8 ranked values, smallest first. Median quoted bid and ask by strike: SPY calls expiring August 21 2026, regular session of July 15 2026table · 2026-07-31 · 7×5 Implied volatility by strike: SPY options expiring August 21 2026, as of July 15 2026ranking · 2026-07-31 · 11×3Preview: 11 ranked values, largest first. SPY option volume by time to expiration, July 15 2026ranking · 2026-07-31 · 5×4Preview: 5 ranked values, largest first. One expiration of the SPY chain: closing prices and delta by strike, August 21 2026 expiry, as of July 15 2026table · 2026-07-31 · 8×6
One-day move profile, seven household names, July 2025 to June 2026

One-day move profile, seven household names, July 2025 to June 2026

most recentas of table 7×6read in context →
One-day move profile, seven household names, July 2025 to June 2026 — 7 rows by 6 columns, computed from US exchange, SIP and OPRA data.
tickersessionsmedian_abs_move_pctp95_abs_move_pctpct_days_beyond_3worst_day_pct
SPY2500.461.620-2.69
KO2500.652.111.2-2.56
JNJ2500.632.211.6-2.42
AAPL2500.683.237.2-6.15
MSFT2500.763.378.4-10.02
NVDA2501.374.3516.4-6.22
TSLA2501.835.4530.4-8.39
the exact SQL behind every number
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           toFloat64(argMax(close, window_start)) AS px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'KO', 'JNJ', 'AAPL', 'MSFT', 'NVDA', 'TSLA')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-07-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
moves AS (
    SELECT ticker, d,
           100 * (px / any(px) OVER (PARTITION BY ticker ORDER BY d
                                     ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) - 1) AS move_pct
    FROM daily
)
SELECT ticker,
       count() AS sessions,
       round(quantileDeterministic(0.5)(abs(move_pct), cityHash64(ticker, d)), 2) AS median_abs_move_pct,
       round(quantileDeterministic(0.95)(abs(move_pct), cityHash64(ticker, d)), 2) AS p95_abs_move_pct,
       round(100 * countIf(abs(move_pct) >= 3) / count(), 1) AS pct_days_beyond_3,
       round(min(move_pct), 2) AS worst_day_pct
FROM moves
WHERE isFinite(move_pct)
GROUP BY ticker
ORDER BY p95_abs_move_pct
$