QQQ intraday U-shape: 30-minute distribution of volume and absolute price movement (≈3-year window)
Volume in QQQ still piles into the edges of the session: the opening 30 minutes account for roughly 14.09% of daily volume. I looked at minute bars over the last ~3 years of US regular trading, grouping minutes into 30‑minute buckets and summing both volume and absolute within‑day minute returns to compare where liquidity and movement actually occur.
The punchline: the classic intraday U‑shape holds for volume, but price action is not uniformly quiet at midday — the lunch hour carries a material share of absolute movement (about 13.15% aggregated). The analysis below presents the full statistics, charts and robustness checks across the sample so you can see how volume and movement diverge through the day.
For QQQ over the past ~3 years, how is each session's volume and absolute price movement distributed across the trading day — do the opening and closing 30 minutes carry an outsized share while the midday hours go quiet? Thesis: the classic intraday U-shape is intact, with the first and last half-hours capturing a disproportionate slice of daily volume and movement while the lunch-hour stretch contributes almost nothing.
How this was measured
QQQ minute bars restricted to the last ~3 years, US regular-session only (Mon–Fri, 09:30–16:00 Eastern). Minutes are bucketed by 30-minute intervals labeled by their opening half-hour (e.g., 09:30, 10:00, …, 15:30). Per-bucket volume is the sum of minute volumes. Per-bucket 'movement' is the sum of absolute minute returns, with minute returns computed within each session (groupby(date).pct_change) so overnight gaps do not contaminate intraday movement; the first minute of each session has no within-day prior and is excluded from movement. Shares are reported both as aggregated (across the full sample) and as the average per-day share (mean of daily-normalized shares).
The key numbers
Reading the numbers
Over 752 trading days (mean daily RTH volume ~41.23M), the first and last 30 minutes each account for about 14% of daily volume while the noon hour is ~11%. For price movement, the open is ~12.23%, the close ~7.32%, and the lunch hour sums to ~13.15%.
The charts
This bar chart shows aggregated share of daily volume by 30-minute buckets. Look at the tall bars at 09:30 (0.1409) and 15:30 (0.1385) versus the low point at 13:30 (0.0523) — the opening and closing half-hours are roughly 14% each while mid-afternoon half-hours are near 5–6%. That confirms a pronounced U-shaped volume profile: the start and finish of the regular session carry a disproportionate slice of total daily volume (see the headline peak/trough volume ratio of 2.6955 for 09:30 vs 13:30).
This chart plots aggregated absolute price movement (sum of |minute returns|) by 30-minute bucket. The opening half-hour is 0.1223 and the quietest bucket shown (14:30) is 0.0622, so opening movement is roughly double the trough (headline peak/trough movement ratio 1.9674). Note the last half-hour has only 0.0732 of movement despite a large volume share, and the combined lunch hour (headline 0.1315) accounts for about as much movement as the open, so the U-shape is clearer for volume than for absolute intraday movement.
This is the mean of per-day volume shares by 30-minute bucket and it mirrors the aggregated picture: 09:30 is 0.1424 and 15:30 is 0.1406, while the trough at 13:30 is 0.0515. The first and last buckets consistently capture about 14% each on an average-day basis, confirming the opening/closing concentration is not driven by a few big days but is a stable intraday pattern.
This shows the mean per-day movement share by bucket: the open is 0.1267 and the close is 0.0727, with a low around 13:30 at 0.0604. The two lunch half-hours (12:00 0.0675 and 12:30 0.0637) together line up with the headline lunch-hour movement share (~0.1315), meaning midday still contributes materially to absolute movement — again, volume is more U-shaped than movement, which is flatter through midday.
Per-bucket totals and shares (aggregated + mean per-day)
| bucket | total_volume | volume_share_agg | movement_total_abs_ret | movement_share_agg | volume_share_mean_daily | movement_share_mean_daily |
|---|---|---|---|---|---|---|
| 09:30 | 4,367,375,114 | 0.1409 | 11.2908 | 0.1223 | 0.1424 | 0.1267 |
| 10:00 | 3,157,607,937 | 0.1018 | 10.1288 | 0.1097 | 0.1019 | 0.1108 |
| 10:30 | 2,606,535,614 | 0.0841 | 8.5178 | 0.0922 | 0.0838 | 0.0936 |
| 11:00 | 2,264,681,138 | 0.073 | 7.405 | 0.0802 | 0.0725 | 0.0807 |
| 11:30 | 1,995,484,667 | 0.0644 | 6.7631 | 0.0732 | 0.0639 | 0.0734 |
| 12:00 | 1,774,429,198 | 0.0572 | 6.2498 | 0.0677 | 0.0572 | 0.0675 |
| 12:30 | 1,646,411,838 | 0.0531 | 5.8946 | 0.0638 | 0.0532 | 0.0637 |
| 13:00 | 1,693,124,506 | 0.0546 | 6.0866 | 0.0659 | 0.0542 | 0.0647 |
| 13:30 | 1,620,225,109 | 0.0523 | 5.7512 | 0.0623 | 0.0515 | 0.0604 |
| 14:00 | 1,744,418,007 | 0.0563 | 6.0064 | 0.0651 | 0.0559 | 0.0641 |
| 14:30 | 1,810,608,146 | 0.0584 | 5.7389 | 0.0622 | 0.0577 | 0.061 |
| 15:00 | 2,029,918,563 | 0.0655 | 5.7422 | 0.0622 | 0.0651 | 0.0609 |
| 15:30 | 4,293,924,303 | 0.1385 | 6.759 | 0.0732 | 0.1406 | 0.0727 |
The takeaway
Yes — the classic U-shape shows up for volume: the open and close 30-minute buckets take a clearly outsized slice of daily volume, but the lunch hour is not dead for price movement. Aggregated shares put the 09:30–10:00 bucket at 14.09% of volume and 15:30–16:00 at 13.85% (vs the 12:00–13:00 hour at 11.03% of volume). For absolute intraday movement, however, the lunch hour is material — it accounts for 13.15% of summed |minute returns while the final half-hour is only 7.32% (the open is 12.23%). This pattern is robust across the sample: we measured 752 trading days with an average RTH volume of about 41.2M shares, and peak/trough ratios of roughly 2.70× for volume and 1.97× for movement quantify the contrast. In short, volume is concentrated at open and close (classic U), but price movement is not uniformly quiet at midday — lunch carries meaningful absolute movement, even more than the close in this window. Practically: expect outsized liquidity at the edges, but don’t assume the noon hour is inert for price action.
The fine print
- Aggregated shares overweight high-activity days; the per-day mean-share series moderates that effect.
- The first minute of each session was excluded from movement to avoid overnight gaps, which slightly understates opening movement.
- Minute-close returns miss within-minute extremes (high-low volatility), so absolute movement is a lower-bound estimate.
- US early-close half-days were not separately filtered and can compress late-day buckets on those dates.