Market Recap: July 8 Numbers and Chip Bounce
Chip stocks bounce small on July 8: most semis green, NVDA rise second day, MU carry the biggest dollar move, but broad market still pass two-to-one red.
Wednesday, July 8, 2026 na one-day chip bounce wey the indexes barely notice. SNDK close +6.8%, AVGO +4.82%, NVDA +3.66%, na sharp reversal from Tuesday chip rout, but the index ETFs remain still: SPY -0.31% and QQQ +0.25%. The broad tape run even more two-to-one red pass the day before: 1821 advancers against 4260 decliners, with advancer share of 29.6% after 33.8% the session before. Every number below come from stored query; expand any panel to see the exact SQL.
Di scoreboard
Every change dey compare July 8 last regular-session minute bar with Tuesday July 7 own, wey be consecutive trading sessions. Rows dey alphabetical, so every ETF keep the same position.
| ticker | before close | day open | day close | gap pct | intraday pct | pct change | day high | day low | shares traded m |
|---|---|---|---|---|---|---|---|---|---|
| DIA | 528.48 | 523.34 | 522.72 | -0.97 | -0.12 | -1.09 | 524.46 | 520.03 | 3.2 |
| IWM | 296.2 | 294.03 | 293.47 | -0.73 | -0.19 | -0.92 | 295.1 | 290.68 | 20.3 |
| QQQ | 709.5 | 704.95 | 711.3 | -0.64 | 0.9 | 0.25 | 712.26 | 700.91 | 29.5 |
| SPY | 747.66 | 743.16 | 745.31 | -0.6 | 0.29 | -0.31 | 746.15 | 739.51 | 35.6 |
The exact SQL behind every number
WITH prior AS (
SELECT ticker, argMax(close, window_start) AS prior_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
GROUP BY ticker
),
sess AS (
SELECT ticker,
argMin(open, window_start) AS day_open,
argMax(close, window_start) AS day_close,
max(high) AS day_high,
min(low) AS day_low,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_traded_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY ticker
)
SELECT
s.ticker AS ticker,
round(toFloat64(p.prior_close), 2) AS prior_close,
round(toFloat64(s.day_open), 2) AS day_open,
round(toFloat64(s.day_close), 2) AS day_close,
round((toFloat64(s.day_open) / toFloat64(p.prior_close) - 1) * 100, 2) AS gap_pct,
round((toFloat64(s.day_close) / toFloat64(s.day_open) - 1) * 100, 2) AS intraday_pct,
round((toFloat64(s.day_close) / toFloat64(p.prior_close) - 1) * 100, 2) AS pct_change,
round(toFloat64(s.day_high), 2) AS day_high,
round(toFloat64(s.day_low), 2) AS day_low,
s.shares_traded_m
FROM sess s LEFT JOIN prior p ON s.ticker = p.ticker
ORDER BY tickerThe four ETFs open with gap down, then each one follow different direction. DIA open the session at -0.97% against the previous close and fall more, before e close at -1.09%. IWM open at -0.73% and remain down, closing at -0.92%. SPY open at -0.6%, recover small as the day go on, but still close at -0.31%; the recovery from the open no reach the size of the gap. QQQ open at -0.64% and rally reach +0.25% by close, making am the only one among the four wey end in positive territory.
E be say the day no normal?
The SPY open-to-close move of 0.29% rank 16 out of 22 trailing sessions, so e be middle-range day for the index, no be extreme. The QQQ close-over-close move of +0.25% rank 21 out of 22, and na one of the smallest trailing-month moves for QQQ. This match the index quiet print.
| QQQ close over close pct | QQQ absolute move rank | QQQ sessions wey dem compare | SPY open to close pct | SPY absolute move rank | SPY sessions wey dem compare | first session |
|---|---|---|---|---|---|---|
| 0.25 | 21 | 22 | 0.29 | 16 | 22 | 2026-06-05 |
The exact SQL behind every number
SELECT
round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-08')), 2) AS qqq_close_over_close_pct,
arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-08'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-08'))) + 1 AS qqq_abs_move_rank,
countIf(ticker = 'QQQ') AS qqq_sessions_compared,
round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-08')), 2) AS spy_open_to_close_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-08'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-08'))) + 1 AS spy_abs_move_rank,
countIf(ticker = 'SPY') AS spy_sessions_compared,
toString(min(d)) AS first_session
FROM (
SELECT ticker, d,
(close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct,
oc_pct
FROM (
SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS close_px,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2026-06-05 13:30:00')
AND window_start < toDateTime('2026-07-09 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)Market breadth: red stocks don pass two-to-one more than yesterday
| advancers | decliners | unchanged | liquid tickers | traded both sessions | liquidity filter drop | advancer pct | Jul7 advancer pct |
|---|---|---|---|---|---|---|---|
| 1821 | 4260 | 74 | 6155 | 11439 | 5284 | 29.6 | 33.8 |
The exact SQL behind every number
SELECT
countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS advancers,
countIf(close_8 < close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS decliners,
countIf(close_8 = close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS unchanged,
countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000) AS liquid_tickers,
countIf(close_7 > 0 AND close_8 > 0) AS traded_both_sessions,
countIf(close_7 > 0 AND close_8 > 0) - countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000) AS dropped_by_liquidity_filter,
round(100.0 * countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) / countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000), 1) AS advancer_pct,
round(100.0 * countIf(close_7 > close_6 AND close_6 > 0 AND dv_7 >= 1000000) / countIf(close_7 > 0 AND close_6 > 0 AND dv_7 >= 1000000), 1) AS jul7_advancer_pct
FROM (
SELECT ticker,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')) AS close_6,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS dv_8,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS dv_7
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY ticker
)The gap between stocks wey rise (1821) and stocks wey fall (4260) mean say stocks wey rise make up 29.6%, down from 33.8% for the session before. Na the same calculation and the same liquidity filter dem use for both days. Out of the 11439 names wey get closing price for both days, 5284 fall below the $1M-traded filter, so dem no include dem for the count. The bounce wey chip stocks lead and the index mixed close happen while the wider market tape dey even more broadly negative.
Chip complex bounce strong, and volume heavy
Rows dey alphabetical order, so every name get fixed position; Tuesday comparison na fresh calculation from July 7 and July 6 closing prices for the receipts block wey dey under the table.
| ticker | before close | day close | pct chg | range pct | day low | day high | low minute ET | high minute et | day dollar bn |
|---|---|---|---|---|---|---|---|---|---|
| AMD | 516.57 | 517.26 | 0.13 | 4.81 | 498.15 | 522.98 | 683 | 587 | 8.93 |
| AVGO | 370.79 | 388.67 | 4.82 | 4.91 | 376.89 | 395.09 | 570 | 778 | 9.39 |
| INTC | 110.5 | 110.27 | -0.21 | 5.5 | 104.41 | 110.49 | 713 | 957 | 9.48 |
| KLAC | 216.52 | 221.03 | 2.08 | 4.2 | 214.3 | 223.4 | 685 | 929 | 1.79 |
| LRCX | 326.12 | 332.93 | 2.09 | 4.53 | 322.72 | 337.5 | 570 | 587 | 2.1 |
| MRVL | 230.81 | 231.66 | 0.37 | 5.12 | 224.98 | 236.79 | 570 | 593 | 4.57 |
| MU | 938.95 | 949.37 | 1.11 | 6.24 | 900.41 | 959 | 570 | 600 | 32.02 |
| NVDA | 196.93 | 204.14 | 3.66 | 5.13 | 195.06 | 205.16 | 570 | 937 | 24.17 |
| SNDK | 1619.26 | 1729.4 | 6.8 | 8.94 | 1590 | 1734.69 | 570 | 959 | 16.82 |
| SOXL | 165.27 | 174.84 | 5.79 | 10.82 | 158.87 | 176.75 | 570 | 816 | 8.12 |
| SOXS | 4.82 | 4.52 | -6.22 | 11 | 4.46 | 4.99 | 929 | 570 | 2.97 |
| STX | 827.4 | 859.68 | 3.9 | 6.18 | 811.27 | 862.41 | 570 | 959 | 3.46 |
| TER | 343.1 | 351.56 | 2.47 | 5.6 | 335.06 | 354.27 | 686 | 587 | 0.77 |
| WDC | 532.34 | 550.71 | 3.45 | 6.91 | 526 | 562.76 | 570 | 600 | 3.03 |
The exact SQL behind every number
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-08 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-07-08 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-07-08 00:00:00') AS day_low,
argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-08 00:00:00') AS low_bar,
argMaxIf(window_start, (toFloat64(high), -toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-08 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'AVGO', 'INTC', 'KLAC', 'LRCX', 'MRVL', 'MU', 'NVDA', 'SNDK', 'SOXL', 'SOXS', 'STX', 'TER', 'WDC')
AND ((window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
OR (window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(prior_close, 2) AS prior_close,
round(day_close, 2) AS day_close,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
round(((day_high - day_low) / prior_close) * 100, 2) AS range_pct,
round(toFloat64(day_low), 2) AS day_low,
round(toFloat64(day_high), 2) AS day_high,
toUInt32(toHour(toTimeZone(low_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(low_bar, 'America/New_York'))) AS low_minute_et,
toUInt32(toHour(toTimeZone(high_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(high_bar, 'America/New_York'))) AS high_minute_et,
day_dollar_bn
FROM per_name
ORDER BY ticker12 out of the fourteen chip names close green, opposite of Tuesday session, when 12 out of the fourteen close red. SNDK lead the complex with +6.8% on 16.82B dollars traded, while AVGO follow close with +4.82%; the other storage names follow, STX +3.9%, WDC +3.45%. The 3x wrapper SOXL gain +5.79%, while inverse SOXS -6.22%, consistent with one-day recovery for the underlying complex. MU rise a smaller +1.11%, but e record 32.02B dollars, making am the name with the highest dollar volume for the panel. NVDA close +3.66% for the second straight green day: na one of only 2 names for this panel wey close green through Tuesday rout (+0.67% that day).
| jul8 green | jul8 red | jul7 green | jul7 red | nvda jul7 pct | names wey dem count |
|---|---|---|---|---|---|
| 12 | 2 | 2 | 12 | 0.67 | 14 |
The exact SQL behind every number
SELECT
countIf(close_8 > close_7) AS jul8_green,
countIf(close_8 < close_7) AS jul8_red,
countIf(close_7 > close_6) AS jul7_green,
countIf(close_7 < close_6) AS jul7_red,
round(anyIf((close_7 / close_6 - 1) * 100, ticker = 'NVDA'), 2) AS nvda_jul7_pct,
count() AS names_counted
FROM (
SELECT ticker,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')) AS close_6,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'AVGO', 'INTC', 'KLAC', 'LRCX', 'MRVL', 'MU', 'NVDA', 'SNDK', 'SOXL', 'SOXS', 'STX', 'TER', 'WDC')
AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY ticker
)Di oda side: defensives and growth mega-caps no follow
| ticker | before close | day open | day close | gap pct | intraday pct | pct chg | day dollar bn |
|---|---|---|---|---|---|---|---|
| CRNX | 83.53 | 83.52 | 83.45 | -0.01 | -0.08 | -0.1 | 1.38 |
| CVX | 173.97 | 176.8 | 175.92 | 1.63 | -0.5 | 1.12 | 1.36 |
| JNJ | 267.29 | 268.6 | 263.36 | 0.49 | -1.95 | -1.47 | 1.38 |
| LLY | 1235.64 | 1221.1 | 1215.87 | -1.18 | -0.43 | -1.6 | 2.55 |
| META | 615.57 | 614.38 | 603.03 | -0.19 | -1.85 | -2.04 | 5.86 |
| TSLA | 402.88 | 399.38 | 393.92 | -0.87 | -1.37 | -2.22 | 11.71 |
| UNH | 428.18 | 427.14 | 425.56 | -0.24 | -0.37 | -0.61 | 1.28 |
| XOM | 141.65 | 143.44 | 140.96 | 1.26 | -1.73 | -0.49 | 2.08 |
The exact SQL behind every number
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-08 00:00:00')) AS prior_close_raw,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-08 00:00:00')) AS day_open_raw,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 00:00:00')) AS day_close_raw,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('CRNX', 'CVX', 'JNJ', 'LLY', 'META', 'TSLA', 'UNH', 'XOM')
AND ((window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
OR (window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(prior_close_raw, 2) AS prior_close,
round(day_open_raw, 2) AS day_open,
round(day_close_raw, 2) AS day_close,
round((day_open_raw / prior_close_raw - 1) * 100, 2) AS gap_pct,
round((day_close_raw / day_open_raw - 1) * 100, 2) AS intraday_pct,
round((day_close_raw / prior_close_raw - 1) * 100, 2) AS pct_chg,
day_dollar_bn
FROM per_name
ORDER BY tickerGrowth mega-caps move for opposite direction from chip complex: TSLA -2.22%, META -2.04%, LLY -1.6%. CVX na di only green close for the panel, e rise +1.12% after e gap early, while XOM open +1.26% higher and later fade reach -0.49% for close. So, Wednesday tape divide into two: chip names go up, growth and defensives go down, while indexes remain still between dem. (Rows dey alphabetical order: CRNX, CVX, JNJ, LLY, META, TSLA, UNH, XOM.)
Wey money trade happen
| leaderboard | ticker | dollar volume bn | shares m | implied avg price | pct of board leader |
|---|---|---|---|---|---|
| by dollars traded | MU | 32.02 | 34.1 | 939 | 100 |
| by dollars traded | SPY | 26.49 | 35.6 | 744.1 | 82.7 |
| by dollars traded | NVDA | 24.17 | 120.5 | 200.58 | 75.5 |
| by dollars traded | QQQ | 20.9 | 29.5 | 708.47 | 65.3 |
| by dollars traded | SNDK | 16.82 | 10.1 | 1665.35 | 52.5 |
| by dollars traded | TSLA | 11.71 | 29.7 | 394.28 | 36.6 |
| by shares traded | SOXS | 2.97 | 636.5 | 4.67 | 100 |
| by shares traded | TZA | 1.37 | 334.8 | 4.09 | 52.6 |
| by shares traded | BITO | 2.29 | 272.4 | 8.41 | 42.8 |
| by shares traded | AAL | 2.79 | 169.3 | 16.48 | 26.6 |
The exact SQL behind every number
SELECT leaderboard, ticker, dollar_volume_bn, shares_m,
round(1000 * dollar_volume_bn / shares_m, 2) AS implied_avg_price,
round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
/ max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
SELECT
'by dollars traded' AS leaderboard,
ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_volume_bn DESC
LIMIT 6
UNION ALL
SELECT
'by shares traded' AS leaderboard,
ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard, pct_of_board_leader DESCMU trade value reach 32.02B dollars, naim wey get the heaviest activity for the day and the only one wey pass $30B mark. SPY (26.49B), NVDA (24.17B), and QQQ (20.9B) follow, with SNDK at 16.82B and TSLA at 11.71 to complete the dollar ranking. The shares ranking show another picture: the 3x inverse semiconductor ETF SOXS trade 636.5M shares at implied average price of $4.67, showing how low-priced 3x wrapper fit trade plenty on heavy chip day.
Shape wey the session take
| et time | shares bn | pct of biggest bucket |
|---|---|---|
| 09:30 | 1.98 | 89.9 |
| 10:00 | 1.38 | 62.9 |
| 10:30 | 1.32 | 59.9 |
| 11:00 | 1.16 | 53 |
| 11:30 | 1.01 | 45.9 |
| 12:00 | 0.93 | 42.2 |
| 12:30 | 0.92 | 42 |
| 13:00 | 0.75 | 34.1 |
| 13:30 | 0.76 | 34.5 |
| 14:00 | 0.77 | 34.9 |
| 14:30 | 0.75 | 34.3 |
| 15:00 | 0.9 | 41.1 |
| 15:30 | 2.2 | 100 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY et_time
ORDER BY et_timeVolume follow textbook U-shape: the opening bucket reach 89.9% of the biggest bucket for the day, then e reduce through the morning and touch bottom at 34.1% for the 1:00–1:30 pm ET slot. The last half-hour (15:30 ET) na the biggest bucket for the day, with 2.2B shares. E pass the opening bucket of 1.98B, wey be the standard pattern for regular session.
Di options tape
| option prints m | contracts m | jul7 contracts m | call pct of volume | pct 0dte | jul7 pct 0dte | spy regular close | top1 und | top1 strike | top1 type | top1 contracts | top1 avg px | top1 e be 0dte? | top1 moneyness |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10.44 | 63.26 | 61.13 | 55.4 | 38.7 | 31.2 | 745.31 | SPY | 745 | C | 677981 | 0.875 | 1 | -0.31 |
The exact SQL behind every number
WITH
(
SELECT (groupArray(und), groupArray(strike), groupArray(typ), groupArray(vol), groupArray(avg_px), groupArray(is_0dte))
FROM (
SELECT any(underlying_symbol) AS und, any(toFloat64(strike_price)) AS strike, any(option_type) AS typ,
sum(size) AS vol, round(avg(toFloat64(price)), 3) AS avg_px,
if(substring(ticker, length(ticker) - 14, 6) = '260708', 1, 0) AS is_0dte
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'
GROUP BY ticker
ORDER BY vol DESC
LIMIT 2
)
) AS top2,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
) AS spy_regular_close,
(
SELECT round(toFloat64(sum(size)) / 1e6, 2)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
) AS jul7_contracts_m,
(
SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260707') / sum(size), 1)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
) AS jul7_pct_0dte
SELECT
round(count() / 1e6, 2) AS option_prints_m,
round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
jul7_contracts_m,
round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_pct_of_volume,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260708') / sum(size), 1) AS pct_0dte,
jul7_pct_0dte,
spy_regular_close,
top2.1[1] AS top1_und, top2.2[1] AS top1_strike, top2.3[1] AS top1_type, top2.4[1] AS top1_contracts, top2.5[1] AS top1_avg_px, top2.6[1] AS top1_is_0dte,
round(toFloat64(top2.2[1]) - spy_regular_close, 2) AS top1_moneyness
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'Di consolidated options tape carry 10.44M prints and 63.26M contracts, wey pass Tuesday 61.13M. Dem calculate am from di same tape for Tuesday window. Calls make up 55.4% of total volume, showing say calls get moderate lean. 0DTE contracts (expiry na di same day, 260708) take 38.7% of contract volume, up from 31.2% on Tuesday. Di single contract wey trade pass na SPY 745C, with 677981 contracts for average price of $0.875. Na same-day expiry, and e dey essentially at di money against SPY regular close of $745.31.
The quote tape
| jul8 updates m | jul7 updates m | day-over-day pct | jul8 SPY updates m | jul8 QQQ updates m | jul8 NVDA updates m | jul8 TSLA updates m | jul8 MU updates m |
|---|---|---|---|---|---|---|---|
| 530.55 | 492.76 | 7.7 | 4.93 | 6.53 | 1.8 | 0.72 | 0.6 |
The exact SQL behind every number
SELECT
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / 1e6, 2) AS jul8_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / 1e6, 2) AS jul7_updates_m,
round((countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / countIf(toDate(sip_timestamp) = toDate('2026-07-07')) - 1) * 100, 1) AS day_over_day_pct,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'SPY') / 1e6, 2) AS jul8_spy_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'QQQ') / 1e6, 2) AS jul8_qqq_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'NVDA') / 1e6, 2) AS jul8_nvda_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'TSLA') / 1e6, 2) AS jul8_tsla_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'MU') / 1e6, 2) AS jul8_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'Stock-quote tape carry 530.55M NBBO updates on July 8, wey be +7.7% compared with the session before. QQQ get the highest count among the named tickers with 6.53M updates, ahead of SPY wey get 4.93M. NVDA (1.8M), TSLA (0.72M), and MU (0.6M) complete the named counts.
| ticker | median spread bps |
|---|---|
| SPY | 0.27 |
| QQQ | 0.71 |
| NVDA | 1.52 |
| TSLA | 2.28 |
| AVGO | 3.63 |
| MU | 5.66 |
| SNDK | 12.21 |
The exact SQL behind every number
SELECT
ticker,
round(quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000), 2) AS median_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'NVDA', 'TSLA', 'MU', 'SNDK', 'AVGO')
AND sip_timestamp >= '2026-07-08 13:30:00' AND sip_timestamp < '2026-07-08 20:00:00'
AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
GROUP BY ticker
ORDER BY median_spread_bps ASCAcross the seven named tickers, SPY RTH median quoted spread na 0.27 bps, wey dey the normal floor for the most-liquid US ETF. QQQ quoted at 0.71 bps, while NVDA quoted at 1.52 bps. The wider end of the table na the names wey quoting no too thick: MU at 5.66 bps and SNDK at 12.21 bps.
| jul8 average spread cents | tightness rank | sessions wey dem compare | tightest session cents | widest session cents | first session | invalid quotes wey dem drop |
|---|---|---|---|---|---|---|
| 2.202 | 11 | 22 | 1.809 | 2.865 | 2026-06-05 | 42783 |
The exact SQL behind every number
SELECT
round(anyIf(avg_spread_cents, d = toDate('2026-07-08')), 3) AS jul8_avg_spread_cents,
arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-08')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-08'))) + 1 AS tightness_rank,
count() AS sessions_compared,
round(min(avg_spread_cents), 3) AS tightest_session_cents,
round(max(avg_spread_cents), 3) AS widest_session_cents,
toString(min(d)) AS first_session,
sum(dropped_invalid) AS dropped_invalid_quotes
FROM (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
avgIf(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100 AS avg_spread_cents,
countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-05 00:00:00')
AND sip_timestamp < toDateTime('2026-07-09 00:00:00')
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY d
)SPY RTH average quoted spread of 2.202 cents rank 11 out of 22 trailing sessions. This one na middle-of-the-pack day for spread tightness. The trailing-month range run from 1.809 cents, wey be the tightest, reach 2.865 cents, wey be the widest. No air pocket, no liquidity event. Na ordinary session for SPY quoted spread.
| jul8 options bn | options-to-stock ratio | jul8 SPY options m |
|---|---|---|
| 9.62 | 18.1 | 422 |
The exact SQL behind every number
WITH
(SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00') AS jul8_options_rows,
(SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00') AS jul8_stock_quote_rows
SELECT
round(jul8_options_rows / 1e9, 2) AS jul8_options_bn,
round(jul8_options_rows / jul8_stock_quote_rows, 1) AS options_to_stock_ratio,
round((SELECT count() FROM global_markets.cache_options_quotes WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27' AND sip_timestamp >= '2026-07-08 13:30:00' AND sip_timestamp < '2026-07-08 20:00:00') / 1e6, 0) AS jul8_spy_options_mOptions tape carry 9.62 billion NBBO updates, 18.1× the stock-quote tape count. SPY-options slice alone get 422 million updates during regular hours.
Rates: curve no really move much
| curve point | jul8 yield pct | session change bp |
|---|---|---|
| 1 month | 3.67 | -2 |
| 3 month | 3.87 | 1 |
| 1 year | 4.06 | 0 |
| 2 year | 4.21 | 2 |
| 5 year | 4.31 | 4 |
| 10 year | 4.56 | 1 |
| 30 year | 5.06 | 1 |
| 2s10s spread | 0.35 | -1 |
The exact SQL behind every number
SELECT
t.1 AS curve_point,
round(t.2, 2) AS jul8_yield_pct,
round((t.2 - t.3) * 100) AS session_change_bp
FROM (
SELECT arrayJoin([
('1 month', toFloat64(d.yield_1_month), toFloat64(p.yield_1_month)),
('3 month', toFloat64(d.yield_3_month), toFloat64(p.yield_3_month)),
('1 year', toFloat64(d.yield_1_year), toFloat64(p.yield_1_year)),
('2 year', toFloat64(d.yield_2_year), toFloat64(p.yield_2_year)),
('5 year', toFloat64(d.yield_5_year), toFloat64(p.yield_5_year)),
('10 year', toFloat64(d.yield_10_year), toFloat64(p.yield_10_year)),
('30 year', toFloat64(d.yield_30_year), toFloat64(p.yield_30_year)),
('2s10s spread', toFloat64(d.yield_10_year - d.yield_2_year), toFloat64(p.yield_10_year - p.yield_2_year))
]) AS t
FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-08') AS d,
(SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-07') AS p
)The 5-year na im lead the session move with +4 bp; the 2-year close +2 bp higher, and no other maturity move pass 2 bp for either side. That one leave the 2s10s spread for 0.35% (-1 bp for the session), still inside the recent range. The small rates move happen together with the small index move.
Calendar wey dey behind the day
| ex-dividend records | splits wey dem execute | reverse splits | forward splits | FIL 424B2 | FIL Form 4 | FIL 8-K | FIL total | news articles | news publishers | top news ticker | top news n | top news lead over next |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 81 | 1 | 0 | 1 | 527 | 775 | 163 | 3731 | 192 | 3 | MU | 17 | 0 |
The exact SQL behind every number
WITH
(
SELECT (count(), uniqExact(publisher))
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-08'
) AS news,
(
SELECT (argMax(t, (n, t)), max(n), max(n) - arraySort(x -> -x, groupArray(n))[2])
FROM (
SELECT t, count() AS n
FROM (
SELECT arrayJoin(tickers) AS t
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-08'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-08') AS ex_dividend_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS splits_executed,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS reverse_splits,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS forward_splits,
(SELECT countIf(form_type = '424B2') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_424b2,
(SELECT countIf(form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_form4,
(SELECT countIf(form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_8k,
(SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_total,
news.1 AS news_articles, news.2 AS news_publishers,
top_news.1 AS top_news_ticker, top_news.2 AS top_news_n, top_news.3 AS top_news_lead_over_nextCalendar no too busy that day: 81 ex-dividend records, 1 forward split wey execute, and 3731 SEC filings altogether (including 775 Form 4 insider trades, 527 424B2 prospectuses, and 163 8-K current reports). News coverage carry 192 articles across 3 publishers, with MU among the tickers wey dem mention pass, at 17 articles. No corporate action from any household-name company stand out for that day's flow; na the chip complex itself carry the main story for the tape.
Session wey dem verify
| first SPY bar ET | last SPY bar ET | SPY minute bars | regular session bars | day sessions | Jul 8 holiday rows | next closure date | next closure name |
|---|---|---|---|---|---|---|---|
| 04:00 | 19:59 | 919 | 390 | 1 | 0 | 2026-09-07 | Labor Day |
The exact SQL behind every number
SELECT
formatDateTime(min(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS first_spy_bar_et,
formatDateTime(max(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS last_spy_bar_et,
count() AS spy_minute_bars,
countIf(window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS day_sessions,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-08') AS jul8_holiday_rows,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-08' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-08' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-08 00:00:00' AND window_start < '2026-07-09 00:00:00'Session run the full extended-hours window. First SPY bar show for 04:00 ET, and the last one show for 19:59 ET. E get 390 regular-hours minute bars and 1 trading session inside the window. No half-day dey; the holiday table no get row for that date. The next scheduled closure na Labor Day on 2026-09-07.
Data notes
All timestamps dey stored for UTC; regular hours for July 8, 2026 dey filtered as sip_timestamp / window_start between 2026-07-08 13:30:00 and 2026-07-08 20:00:00. This one correspond to 9:30 am–4:00 pm New York time. Decimal prices dey cast to Float64 before any division. Named per-ticker panels (scoreboard, chip complex, rotation) dey arranged alphabetically by ticker, so every prose reference dey point to one fixed row. Leaderboards (volume, quote snapshot) dey arranged by value, and every position claim wey dem make dey encoded as sanity bound for that position. Every Tuesday comparison for this page, breadth share, chip green/red counts, options contracts and 0DTE share, quote-update counts, na fresh calculation from July 7 (and July 6 when prior close dey needed) inside the same query block. Dem no copy am from any earlier post.
Full data notes
The breadth panel dey count names wey get regular-hours close for both sessions and at least $1M traded for the measured day. The dropped count (5284 of 11439) dey show the excluded tail. The chip complex day_low/day_high timing columns dey use the argMin/argMaxIf(..., (value, timestamp)) pattern so ties go resolve deterministically. The volume-smile bucket labels na ET (%H:%i), and dem dey calculate am with toTimeZone for the SELECT list only. The options-tape panel dey detect same-day expiry with the OCC-ticker substring match (substring(ticker, length(ticker) - 14, 6)), instead of options_trades.expiration_date; that column dey spoil, according to the standing preflight note. Symbols inside KNOWN_AMBIGUOUS_TICKERS dey excluded from the volume-leaders and news-attention SQL, so “most X” callouts go land on names wey person fit verify. The top-news ticker dey use deterministic tie-break (argMax(t, (n, t))); top_news_lead_over_next = 0 mean say tie dey, na why the prose talk say “among the most-mentioned”. The treasury panel dey join two daily snapshot rows. If snapshot no dey for either date, the result go get zero rows, and the row_count bound dey hold the post. The stocks-quote and options-quote counts na whole-tape scans across day partitions. Named-ticker counts dey report for millions to match their column units. Spread medians dey use quantileExact (deterministic); the trailing spread panel na an average (avgIf), and dem label am as such.
Methodology
- Source wey market data come from: consolidated tape,
delayed_stocks_minute_aggsfor index and per-name prices and volumes,cache_stocks_quotesfor NBBO counts and quoted spreads,cache_options_quotesandoptions_tradesfor the options tape. - How we handle time zone: all stored timestamps na UTC; we calculate ET clock labels with
toTimeZone(..., 'America/New_York')only inside SELECT lists; WHERE clauses dey use raw UTC literals. - Regular-hours window: 13:30–20:00 UTC. We verify am with observed SPY minute bars (the session-verification panel), no be calendar arithmetic.
- How we define spread:
(ask - bid) / midpoint × 10,000for basis points on valid two-sided quotes for the snapshot; the trailing-month panel na average width for cents, and we label am as average. - Comparison with previous session: we calculate am inside the query from July 7 (and July 6 for Tuesday own day-over-day comparison). We no carry am from previous post.
- Deterministic aggregates:
quantileExact, tuple-keyedargMin/argMax, plus deterministic news tie-break so stable regenerations fit happen. - Warehouse as-of date: July 10, 2026 (T+2 for the period). Tapes for both sessions don fully enter at this depth.
Cross-links: July 7, 2026 recap, options trading costs, bid-ask spread basics, 0DTE options, and relative volume.