Most Active Stocks After Hours: How It Works
How most active stocks after hours lists are actually built: which prints count between 4 and 8 p.m. ET, and why two screeners name different leaders.
A most active stocks after hours list ranks symbols by the shares that print between 4:00 p.m. and 8:00 p.m. ET, once the regular session has closed. Volume is the scarce input in that window, not percentage change: a name can top the evening board on a few hundred thousand shares, less than it trades in one busy regular-session minute. The panels below measure how thin the evening tape is, and how differently two lists can count it. The session itself, its hours and its order handling, is covered in after-hours and premarket trading.
How a most active stocks after hours list is built
At 4:00 p.m. ET the exchanges run the closing auction and continuous regular trading ends. Matching does not stop. Electronic venues keep pairing orders until 8:00 p.m. ET, and each execution still reaches the consolidated tape, most of it reported through a trade reporting facility, the FINRA-operated service that collects prints from off-exchange venues, alongside reports from the alternative trading systems (ATSs) that brokers route to in the evening.
A screener turns those prints into a ranking, and four choices sit inside that step:
- The window. 16:00 to 20:00 ET is the common one. Some lists stop at 18:00, and venues running overnight sessions push the boundary past midnight.
- Which prints count. Trade condition codes mark late reports, out-of-sequence prints and other special executions, and a list that keeps them will not match a list that drops them. Reading the equity trade tape walks through those codes print by print.
- Odd lots, meaning orders smaller than one round lot of 100 shares. They are a large share of evening print counts and a small share of evening volume.
- The universe, either every US symbol or only names above a price and liquidity floor.
Sum the shares per symbol, sort descending, publish. Start with the shape of the day underneath that ranking. The panel below splits the whole extended trading day into ET clock hours and averages what the basket of thirteen symbols printed in each hour over the past 100 calendar days.
| et_time | volume_millions | pct_of_extended_day | print_size_shares |
|---|---|---|---|
| 04:00 | 3.1 | 0.58 | 28 |
| 05:00 | 0.9 | 0.17 | 28 |
| 06:00 | 1 | 0.19 | 28 |
| 07:00 | 3.3 | 0.63 | 47 |
| 08:00 | 5 | 0.94 | 57 |
| 09:00 | 85.6 | 16.21 | 61 |
| 10:00 | 90.5 | 17.13 | 44 |
| 11:00 | 66.5 | 12.59 | 38 |
| 12:00 | 53.8 | 10.18 | 48 |
| 13:00 | 45.5 | 8.62 | 58 |
| 14:00 | 47.5 | 8.99 | 62 |
| 15:00 | 96.9 | 18.35 | 67 |
| 16:00 | 22.4 | 4.23 | 243 |
| 17:00 | 3.8 | 0.71 | 77 |
| 18:00 | 1.5 | 0.29 | 42 |
| 19:00 | 1 | 0.2 | 35 |
The exact SQL behind every number
WITH
(
SELECT toFloat64(sum(volume))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','TSLA','META','GOOGL','AMD','INTC','F','KO','SPY','QQQ')
AND window_start >= today() - 100
AND window_start < today() - 1
) AS basket_shares,
(
SELECT countDistinct(toDate(toTimeZone(window_start, 'America/New_York')))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 100
AND window_start < today() - 1
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
) AS sessions
SELECT
concat(leftPad(toString(h.hour), 2, '0'), ':00') AS et_time,
round(ifNull(v.shares, 0) / sessions / 1e6, 1) AS volume_millions,
round(100 * ifNull(v.shares, 0) / basket_shares, 2) AS pct_of_extended_day,
toUInt32(ifNull(v.print_size_shares, 0)) AS print_size_shares
FROM
(
SELECT toUInt8(arrayJoin(range(4, 20))) AS hour
) AS h
LEFT JOIN
(
SELECT
toHour(toTimeZone(window_start, 'America/New_York')) AS hour,
toFloat64(sum(volume)) AS shares,
round(toFloat64(sum(volume)) / sum(transactions)) AS print_size_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','TSLA','META','GOOGL','AMD','INTC','F','KO','SPY','QQQ')
AND window_start >= today() - 100
AND window_start < today() - 1
GROUP BY hour
) AS v ON v.hour = h.hour
ORDER BY h.hourAn average session put 96.9 million shares across the basket into the 15:00 hour alone, 18.35% of everything the extended day traded. The entire 16:00 hour, the first hour after the close, carried 22.4 million, or 4.23% of the day. The average print changes size along the same curve: 67 shares per print in the 15:00 hour, against 35 in the 19:00 hour. One consequence for reading screeners: published average daily volume figures normally describe the regular session, so an evening count is not comparable to them untouched.
Why two sites show different after-hours leaders
Same name, same evening, two different share counts. The gap usually sits in one of four places.
- Feed coverage. A vendor that sees one venue's prints reports a subset of the consolidated total, and a broker platform often shows only what that platform can see.
- Snapshot time. A list refreshed at 4:30 p.m. and a list refreshed at 7:55 p.m. are measuring different windows.
- Print filters. Odd lots, corrected prints and late reports are inside one count and outside another.
- Corrections. A print cancelled or amended after the fact changes a symbol's evening total hours later.
None of that makes a list wrong. It makes the column heading the first thing to read: shares of what, between which hours, from whose feed.
What puts a stock on the after-hours list
The evening leaders are rarely a surprise. Four profiles recur. A quarterly report released minutes after the close, with the press release and the call both landing inside the window. Index news, where an add or delete announcement starts repositioning that eventually prints on a rebalance date, as covered in index rebalance closing auction flow. Deal news, including a merger headline or a secondary offering priced after the bell. Hedging and unwinding flow around options positions, heaviest in the large index ETFs, which quote all evening.
Here is one evening in full. The panel ranks the basket by shares printed between 4:00 and 8:00 p.m. ET on Wednesday, July 29, 2026, next to each name's regular-session volume that same day.
| ticker | after_hours_millions | regular_millions | ah_pct_of_regular |
|---|---|---|---|
| SPY | 9.51 | 57.6 | 16.52 |
| MSFT | 8.64 | 33.2 | 26.05 |
| INTC | 8.27 | 114.1 | 7.25 |
| NVDA | 8.06 | 115.6 | 6.97 |
| META | 5.81 | 12.9 | 44.9 |
| QQQ | 5.76 | 48.5 | 11.89 |
| AAPL | 3.17 | 41 | 7.73 |
| AMZN | 3.08 | 32.1 | 9.6 |
| TSLA | 1.73 | 33.8 | 5.12 |
| GOOGL | 1.31 | 22.1 | 5.92 |
| F | 1.01 | 90.2 | 1.12 |
| AMD | 0.81 | 28.7 | 2.84 |
| KO | 0.26 | 18 | 1.42 |
The exact SQL behind every number
SELECT
ticker,
round(toFloat64(sumIf(volume, et_minute >= 960 AND et_minute < 1200)) / 1e6, 2) AS after_hours_millions,
round(toFloat64(sumIf(volume, et_minute >= 570 AND et_minute < 960)) / 1e6, 1) AS regular_millions,
round(100 * toFloat64(sumIf(volume, et_minute >= 960 AND et_minute < 1200))
/ toFloat64(sumIf(volume, et_minute >= 570 AND et_minute < 960)), 2) AS ah_pct_of_regular
FROM
(
SELECT
ticker,
volume,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) AS et_minute
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','TSLA','META','GOOGL','AMD','INTC','F','KO','SPY','QQQ')
AND window_start >= '2026-07-29 13:30:00'
AND window_start < '2026-07-30 00:00:00'
)
GROUP BY ticker
HAVING sumIf(volume, et_minute >= 570 AND et_minute < 960) > 0
AND sumIf(volume, et_minute >= 960 AND et_minute < 1200) > 0
ORDER BY after_hours_millions DESCSPY topped that evening with 9.51 million shares after the close. That is 16.52% of the 57.6 million it traded in the regular session, and it is the structural point of these lists: they rank names against each other inside a thin window, never against their own daytime activity. At the bottom of the same board, KO printed 0.26 million.
How thin is after-hours trading, really
Thinness appears in the quote before it appears in the price. The bid-ask spread is the gap between the best advertised buying price and the best advertised selling price, and the panel states it in basis points of the midpoint, one hundredth of a percent each, which lets one number compare across share prices. The full mechanics live in the bid ask spread explained.
| et_time | median_spread_bps | median_quoted_size |
|---|---|---|
| 15:00 | 1.17 | 200 |
| 15:30 | 1.18 | 200 |
| 16:00 | 4.74 | 280 |
| 16:30 | 5.32 | 160 |
| 17:00 | 4.13 | 320 |
| 17:30 | 2.06 | 520 |
| 18:00 | 10.91 | 160 |
| 18:30 | 7.08 | 160 |
| 19:00 | 5.88 | 200 |
| 19:30 | 5.58 | 240 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(quantileDeterministic(0.5)(20000 * toFloat64(ask_price - bid_price)
/ toFloat64(ask_price + bid_price), toUInt64(sequence_number)), 2) AS median_spread_bps,
round(quantileDeterministic(0.5)(toFloat64(bid_size + ask_size), toUInt64(sequence_number))) AS median_quoted_size
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-07-29 19:00:00'
AND sip_timestamp < '2026-07-30 00:00:00'
AND bid_price > 0
AND ask_price > bid_price
GROUP BY et_time
ORDER BY et_timeIn the 15:00 bucket, inside the regular session, the median quoted spread measured 1.17 bps with a median quoted size of 200 at the inside. By the 19:30 bucket the median spread measured 5.58 bps on a median quoted size of 240. Fewer firms quote after 4:00 p.m., and those still quoting post for less size. An order that crossed a penny-wide market at 3:30 p.m. crosses a visibly wider one later in the evening. The same quoting mechanics run in the other direction at the bell, as spreads widen at the open sets out.
Does an after-hours high survive the next open?
An evening print can set a high or a low that the following day never trades back to. The panel counts, name by name, the share of evenings in the past 200 calendar days where the 16:00 to 20:00 ET high finished above every price the next regular session printed, with the mirror calculation for the evening low.
| ticker | evenings | pct_high_above_next_session | pct_low_below_next_session |
|---|---|---|---|
| GOOGL | 138 | 31.9 | 25.4 |
| MSFT | 138 | 30.4 | 31.2 |
| INTC | 138 | 27.5 | 31.2 |
| AMZN | 138 | 26.8 | 31.2 |
| SPY | 138 | 26.1 | 36.2 |
| QQQ | 138 | 26.1 | 38.4 |
| F | 138 | 25.4 | 21.7 |
| META | 138 | 22.5 | 29.7 |
| KO | 138 | 22.5 | 26.1 |
| AMD | 138 | 21.7 | 36.2 |
| TSLA | 138 | 21 | 26.8 |
| NVDA | 138 | 20.3 | 35.5 |
| AAPL | 138 | 16.7 | 30.4 |
The exact SQL behind every number
SELECT
ticker,
count() AS evenings,
round(100 * countIf(ah_high > next_high) / count(), 1) AS pct_high_above_next_session,
round(100 * countIf(ah_low < next_low) / count(), 1) AS pct_low_below_next_session
FROM
(
SELECT
e.ticker AS ticker,
e.session AS session,
e.ah_high AS ah_high,
e.ah_low AS ah_low,
argMin(n.reg_high, n.session) AS next_high,
argMin(n.reg_low, n.session) AS next_low
FROM
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
max(high) AS ah_high,
min(low) AS ah_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','TSLA','META','GOOGL','AMD','INTC','F','KO','SPY','QQQ')
AND window_start >= today() - 200
AND window_start < today() - 1
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 960
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 1200
GROUP BY ticker, session
HAVING sum(volume) >= 10000
) AS e
INNER JOIN
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
max(high) AS reg_high,
min(low) AS reg_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','TSLA','META','GOOGL','AMD','INTC','F','KO','SPY','QQQ')
AND window_start >= today() - 200
AND window_start < today()
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY ticker, session
) AS n ON n.ticker = e.ticker
WHERE n.session > e.session
AND n.session <= e.session + 5
GROUP BY e.ticker, e.session, e.ah_high, e.ah_low
)
GROUP BY ticker
ORDER BY pct_high_above_next_session DESCOver 138 qualifying evenings, GOOGL sits at the top of the basket: 31.9% of its evening highs finished above the entire regular range of the next session, and 25.4% of its evening lows finished below it. AAPL sits at the other end of the basket at 16.7%. An after-hours percentage change on a screener is the distance from the 4:00 p.m. close to the last evening print, and that last print can be a handful of shares. Unusual volume screens and the biggest movers of 2026 carry the same caveat once the clock passes 4:00 p.m.
How to read a mover list without being fooled by a 200-share print
- Read the share count before the percentage. An evening move of several percent on a few thousand shares is a quote, not a market.
- Scale the evening count against the name's own regular-session volume, the ratio in the leaderboard above. Relative volume does the same job inside the daytime session.
- Count prints, not only shares. One institutional block trade and four thousand odd lots can reach the same total and describe very different evenings.
- Check the window and the feed in the column heading before comparing two sites.
- Let the next open trade through an evening extreme before treating that extreme as a reference level.
How these panels define the evening
The basket is eleven household stocks (AAPL, MSFT, NVDA, AMZN, TSLA, META, GOOGL, AMD, INTC, F, KO) plus the SPY and QQQ index ETFs. After hours means prints timestamped from 16:00 up to 20:00 ET, and the regular session means 09:30 up to 16:00 ET, both derived from the ET clock on every print rather than a hardcoded session filter. The leaderboard and the spread trace are pinned to Wednesday, July 29, 2026, so those two panels do not move. Quoted size is carried as the quote feed supplies it, and the comparison across buckets is what that column is for. Minute bars run a day or two behind at the front edge, so the rolling panels stop short of today.
FAQ
What are the most active stocks after hours?
They are the symbols with the largest share volume printed between 4:00 p.m. and 8:00 p.m. ET on a given evening. The board turns over nightly and leans toward names with a scheduled release landing after the close, together with the large index ETFs that quote throughout the window.
What time is after-hours trading?
4:00 p.m. to 8:00 p.m. ET on a normal trading day, following the 9:30 a.m. to 4:00 p.m. regular session. The premarket window runs from 4:00 a.m. to 9:30 a.m. ET. On an early-close day the whole clock shifts with the 1:00 p.m. close.
Why do two websites show different after-hours volume for one stock?
Each one counts a different set of prints: a different window, a different feed, and a different rule on odd lots, late reports and corrections. A consolidated count sums reports from every venue, while a single platform's count often shows only the prints that platform can see.
Is after-hours volume part of a stock's daily volume?
It depends on the field. Published daily volume and average daily volume usually cover the regular session only, while a consolidated daily total can include extended-hours prints. Compare an evening figure against another evening figure rather than against a regular-session average.
Does an after-hours high hold into the next session?
Frequently it does not. The panel above counts, for each name, how often an evening high finished above every price the following regular session printed. An evening extreme is a print from a thin window until a full session trades through it.
Every panel here ships with the exact SQL beneath it, so you can see which prints were counted and between which hours. To rank an evening yourself, or to pull one name's after-hours tape, ask the question in plain English on the Strasmore terminal.