Average move between the 4:00 p.m. close and 5:30 p.m. ET
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 Broker Exercise Cut-Off Times Explained.
| ticker | friday_count | avg_abs_drift_pct | max_abs_drift_pct |
|---|---|---|---|
| TSLA | 22 | 0.246 | 0.87 |
| NVDA | 22 | 0.185 | 1.25 |
| MSFT | 22 | 0.149 | 0.42 |
| AAPL | 22 | 0.143 | 0.5 |
| KO | 22 | 0.14 | 0.77 |
| SPY | 22 | 0.11 | 0.7 |
- Rows × columns
- 6 × 4
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
ticker |
text | 6 distinct values (AAPL, KO, MSFT…) | |
friday_count |
number | every row is 22 | count |
avg_abs_drift_pct |
number | 0.11 to 0.246 | percent |
max_abs_drift_pct |
number | 0.42 to 1.25 | 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.
SELECT
ticker,
count() AS friday_count,
round(avg(drift_pct), 3) AS avg_abs_drift_pct,
round(max(drift_pct), 2) AS max_abs_drift_pct
FROM
(
SELECT
ticker,
session_date,
abs(100 * (argMaxIf(px, ts, et_minute >= 960 AND et_minute < 1050)
/ argMaxIf(px, ts, et_minute >= 570 AND et_minute < 960) - 1)) AS drift_pct
FROM
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) AS et_minute,
toFloat64(close) AS px,
window_start AS ts
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'KO', 'MSFT', 'NVDA', 'SPY', 'TSLA')
AND window_start >= today() - 730
AND toDayOfWeek(toDate(toTimeZone(window_start, 'America/New_York'))) = 5
AND toDayOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) BETWEEN 15 AND 21
)
GROUP BY ticker, session_date
HAVING countIf(et_minute >= 960 AND et_minute < 1050) > 0
AND countIf(et_minute >= 570 AND et_minute < 960) > 0
)
GROUP BY ticker
ORDER BY avg_abs_drift_pct DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.