Market Recap July 29 2026: Di Day Numbers
July 29, 2026 tape recap: index scoreboard, breadth, sector spread, options flow, quote tape, rates and calendar, with every figure query-backed.
Dis market recap for Wednesday, July 29, 2026 read the whole session from stored queries: SPY close-over-close change na -1.52%, the liquid tape advancer share na 27.2%, and options tape print 66.84 million contracts. Every window for below get explicit dates for both ends, so if dem run any panel SQL again, e go return these same figures.
Di scoreboard
Every change dey compare July 29 last regular-session minute bar with Tuesday July 28 own, for consecutive trading sessions. Rows dey follow alphabetical order, so every ETF dey keep one fixed position.
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-28 13:30:00' AND window_start < '2026-07-28 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-29 13:30:00' AND window_start < '2026-07-29 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 tickerDIA move -2.19%, IWM -1.63%, QQQ -2.07%, and SPY -1.52% reach $729.51 close. Every row dey split the move into two legs: SPY open -0.11% from Tuesday close and move -1.41% from open to close. Overnight leg and intraday leg no need agree, and how dem split between the two na the session first fingerprint.
E day dey unusual?
One session number no mean much if we no see how e compare with the other days. So we rank the day inside im own trailing month with the same method.
The exact SQL behind every number
SELECT
round(anyIf(oc_pct, d = toDate('2026-07-29')), 2) AS spy_open_to_close_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-29'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-29'))) + 1 AS spy_abs_move_rank,
count() AS spy_sessions_compared,
toString(min(d)) AS first_session
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-06-29 13:30:00')
AND window_start < toDateTime('2026-07-30 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)SPY open-to-close move of -1.41% rank 1 out of 22 trailing sessions by absolute size, for window wey reach back to 2026-06-29. The rank count how many other sessions for the window move pass am, plus one. So first place mean say na the biggest move for the trailing month.
Breadth
Index level na one number. Breadth dey count how many stocks move along with am.
The exact SQL behind every number
SELECT
countIf(c29 > c28 AND liquid) AS advancers,
countIf(c29 < c28 AND liquid) AS decliners,
countIf(c29 = c28 AND liquid) AS unchanged,
countIf(liquid) AS liquid_tickers,
countIf(NOT liquid) AS dropped_by_liquidity_filter,
round(100.0 * countIf(c29 > c28 AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
SELECT ticker, c28, c29, dv29 >= 1000000 AS liquid
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 13:30:00') AS dv29
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
GROUP BY ticker
HAVING c28 > 0 AND c29 > 0
)
)Among 6066 names wey pass one-million-dollar regular-hours turnover bar, 1652 close above Tuesday close and 4342 close below, making advancer share be 27.2%. The filter leave out 5363 thinner names, but dem still count am here instead of quietly throwing dem away.
Di mega-cap shelf
Na every session, na di same eight mega-cap names dey show for here. Dem arrange am alphabetically so each one get im own row. Di fixed basket na di main point: reader go sabi di rows, and no editor go choose winners after di fact.
The exact SQL behind every number
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-29 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-29 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'AMZN', 'AVGO', 'GOOGL', 'META', 'MSFT', 'NVDA', 'TSLA')
AND ((window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00')
OR (window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 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,
day_dollar_bn
FROM per_name
ORDER BY tickerAAPL moved -0.63%, META -1.12%, MSFT -0.27%, and NVDA -3.51% for 22.26 billion dollars regular-hours turnover, while TSLA dey at -2.97%. Di dollar column dey show how much of di tape these eight names carry by themselves. Di breadth panel for top na di check of how far di rest of di market move together with dem.
The shares wey move today
Both boards need five million dollars of regular-hours turnover. Dem no include any name wey e split execute between the two closes wey dem measure. Dem also no include one symbol wey dem reuse under the house ambiguity guard wey notes describe.
The exact SQL behind every number
SELECT ticker, board, day_pct, day_dollar_m
FROM (
SELECT 'gainers' AS board, ticker, round((c29 / c28 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 13:30:00') AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker NOT IN ('SPCX')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-28' AND execution_date <= '2026-07-29')
AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
GROUP BY ticker
HAVING c28 > 0 AND c29 > 0 AND dv >= 5000000
)
ORDER BY day_pct DESC
LIMIT 8
UNION ALL
SELECT 'decliners' AS board, ticker, round((c29 / c28 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 13:30:00') AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker NOT IN ('SPCX')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-28' AND execution_date <= '2026-07-29')
AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
GROUP BY ticker
HAVING c28 > 0 AND c29 > 0 AND dv >= 5000000
)
ORDER BY day_pct ASC
LIMIT 8
)
ORDER BY board DESC, abs(day_pct) DESCThe biggest gainer for the board, DFNS, move 119.8% on 544.9 million dollars wey traders trade. The biggest decliner, YYAI, print -68.1% on 8.5 million. This page record the sizes and the receipts. E no attach any story to dem.
Sector dispersion
The eleven SPDR select-sector funds, July 29 close compared with July 28 close, ranked from best to worst. The basket don set and no vendor classification dey involved.
The exact SQL behind every number
SELECT sector, day_pct, round(max(day_pct) OVER () - day_pct, 2) AS points_behind_best
FROM (
SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
round((c29 / c28 - 1) * 100, 2) AS day_pct
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-29 00:00:00') AS c28,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 00:00:00') AS c29
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND ((window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00')
OR (window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'))
GROUP BY ticker
HAVING c28 > 0 AND c29 > 0
)
)
ORDER BY day_pct DESCEnergy lead the table at 1.89%, while Industrials dey bottom at -3.21%, 5.1 percentage points behind. That spread na the day’s sector dispersion: when all eleven land within one point, the market tape dey look very different from one wey spread across several points.
Wey dollars change hands
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
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-29 13:30:00' AND window_start < '2026-07-29 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-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard, if(leaderboard = 'by shares traded', shares_m, dollar_volume_bn) DESCMU lead the dollar board with 44.99 billion regular-hours turnover, while SPY follow am with 42.29 billion. The share board dey answer another question: SNXX top am with 173.4 million shares at an implied average price of $7.32. Dollar volume show where market attention dey, share volume show how much trading dey happen, and the per-name version of this measure na relative volume.
Di option tape
The exact SQL behind every number
WITH
(
SELECT (strike, typ, vol_m, is_0dte)
FROM (
SELECT toFloat64(any(strike_price)) AS strike, any(option_type) AS typ,
round(toFloat64(sum(size)) / 1e6, 2) AS vol_m,
if(substring(ticker, length(ticker) - 14, 6) = '260729', 1, 0) AS is_0dte
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
AND underlying_symbol = 'SPY'
GROUP BY ticker
ORDER BY vol_m DESC, strike ASC
LIMIT 1
)
) AS top_spy,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
) AS spy_regular_close,
(
SELECT round(toFloat64(sum(size)) / 1e6, 2)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
) AS jul28_contracts_m,
(
SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260728') / sum(size), 1)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
) AS jul28_pct_0dte
SELECT
round(count() / 1e6, 2) AS option_prints_m,
round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
jul28_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) = '260729') / sum(size), 1) AS pct_0dte,
jul28_pct_0dte,
spy_regular_close,
top_spy.1 AS top_spy_strike,
top_spy.2 AS top_spy_type,
top_spy.3 AS top_spy_contracts_m,
top_spy.4 AS top_spy_is_0dte,
round(top_spy.1 - spy_regular_close, 2) AS top_spy_strike_minus_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'Di options tape print 11.03 million trades for 66.84 million contracts, beside Tuesday own 59.28 million. Calls carry 53.6% of contract volume. Contracts wey dey expire for that same session, di zero-days-to-expiry crowd, carry 33.1% compared with Tuesday own 29%. Expiration timing na wetin dey set di pattern. Di busiest SPY contract na di 735 P, with 0.36 million contracts. Its strike dey 5.49 dollars from SPY own $729.51 regular close, measured as strike minus close.
Quote tape
Quote data na the scarcest dataset for this desk, and dem dey measure am every session. Ordinary days sef dey enter record.
The exact SQL behind every number
SELECT
round(countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / 1e6, 2) AS jul29_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / 1e6, 2) AS jul28_updates_m,
round((countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / countIf(toDate(sip_timestamp) = toDate('2026-07-28')) - 1) * 100, 1) AS day_over_day_pct,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'SPY') / 1e6, 2) AS jul29_spy_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'QQQ') / 1e6, 2) AS jul29_qqq_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'NVDA') / 1e6, 2) AS jul29_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'Stock-quote tape carry 722.65 million NBBO updates against 536.07 million on Tuesday. Na day-over-day change of 34.8%. SPY record 7.32 million updates, QQQ 8.72 million, and NVDA 4.41 million.
The exact SQL behind every number
SELECT ticker,
round(quantileExactIf(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'DIA', 'IWM', 'NVDA', 'QQQ', 'SPY', 'TSLA')
AND sip_timestamp >= '2026-07-29 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00'
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY tickerSPY regular-hours median quoted spread measure 0.27 basis points of mid. QQQ measure 0.75 and NVDA 1.55. The last two columns na the disclosure: dem count one-sided and crossed quotes for each name, then set dem aside from the median instead of quietly dropping dem. Crossed quote, where bid dey above ask, na normal artifact of consolidated feed wey dem stitch from many venues at nanosecond resolution.
The exact SQL behind every number
SELECT round(anyIf(spread_bps, d = toDate('2026-07-29')), 2) AS jul29_median_spread_bps,
arrayCount(x -> x < anyIf(spread_bps, d = toDate('2026-07-29')), groupArrayIf(spread_bps, d != toDate('2026-07-29'))) + 1 AS rank_tightest,
count() AS sessions_compared,
toString(min(d)) AS first_session
FROM (
SELECT toDate(sip_timestamp) AS d,
quantileExactIf(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= '2026-07-01 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00'
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY d
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
)When dem rank am against every July session with the same logic, that day SPY median spread of 0.27 basis points come 20 of 20, counting from the tightest, for window wey start 2026-07-01. For quiet tape, na this be the panel point: ordinary liquidity day na finding, and dem publish am with clear boundaries.
The exact SQL behind every number
WITH
(SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00') AS jul29_options_rows,
(SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00') AS jul29_stock_quote_rows
SELECT
round(jul29_options_rows / 1e9, 2) AS jul29_options_bn,
round(jul29_options_rows / jul29_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-29 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00') / 1e6, 0) AS jul29_spy_options_mOptions NBBO tape run 13.55 billion updates, 18.8 times the stock quote tape. SPY root alone record 600 million regular-hours updates.
Rates
The exact SQL behind every number
SELECT toString(date) AS date,
round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-24' AND date <= '2026-07-29'
ORDER BY dateTreasury file dey about one session behind the tape, so this panel dey show the prints wey e hold: 4 dated rows for the window. The latest one, dated 2026-07-29, put the two-year at 4.22%, the ten-year at 4.67% and the thirty-year at 5.2%, with two-to-ten-year spread of 45 basis points.
The calendar wey dey behind the day
The exact SQL behind every number
WITH
(
SELECT (argMax(t, (n, t)), max(n))
FROM (
SELECT t, count() AS n
FROM (
SELECT arrayJoin(tickers) AS t
FROM global_markets.stocks_news
WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news,
(
SELECT (count(), uniqExact(cik), countIf(form_type = '4'), countIf(form_type = '8-K'), countIf(form_type = '424B2'), countIf(form_type = '10-Q'))
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date = '2026-07-29'
) AS fil
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-29') AS ex_dividend_records,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-29') AS reverse_splits,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-29') AS forward_splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-29') AS listings,
(SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00') AS news_articles,
(SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00') AS news_publishers,
top_news.1 AS top_news_ticker,
top_news.2 AS top_news_n,
fil.1 AS fil_total,
fil.2 AS fil_filers,
fil.3 AS fil_form4,
fil.4 AS fil_8k,
fil.5 AS fil_424b2,
fil.6 AS fil_10q85 dividend records went ex-dividend for July 29, 2 reverse and 1 forward splits execute, and 1 new listings enter market. The news feed carry 190 articles from 2 publishers, with NVDA as the ticker wey get the most coverage for this feed window, at 13 articles. The EDGAR daily index get 5742 filings for that date from 3064 different filers: 712 insider Form 4 reports, 440 8-K current reports, 884 424B2 pricing supplements and 174 10-Q quarterly reports. That index dey follow its own schedule, and this panel report wetin e hold when dem generate am.
Wetin dey come
For the rest of the week, read from the same tables, but make una deliberately look past the period.
The exact SQL behind every number
SELECT
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-30' AND date <= '2026-07-31' AND status != 'open') AS closures_rest_of_week,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-30' AND ex_dividend_date <= '2026-07-31') AS exdiv_records_rest_of_week,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-30' AND ex_dividend_date <= '2026-07-31') AS household_exdivs,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-30' AND execution_date <= '2026-07-31') AS splits_rest_of_week,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) AS jul31_expiry_pct_of_wed_volume,
(SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-29') AS latest_short_interest_settlement
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'The holiday table show 0 closures across Thursday July 30 and Friday July 31. 611 dividend records go ex-dividend across those two sessions. 0 of them dey among the ten household names we check, and 12 splits dey scheduled to execute. From Wednesday option volume, 19.7% already dey inside contracts wey expire Friday, July 31. The newest short-interest settlement wey dey on file na 2026-07-15, and the file dey publish with enough lag to get its own explanation.
Session wey dem don verify
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,
countIf(window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS day_sessions,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-29') AS jul29_holiday_rows,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-29' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-29' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-29 00:00:00' AND window_start < '2026-07-30 00:00:00'Full regular session: first SPY bar na 04:00 ET, last one na 19:59 ET, 390 regular-hours bars, 1 session dey inside the window, and 0 holiday rows dey for the date. The next scheduled closure na Labor Day on 2026-09-07.
FAQ
How stock market perform for Wednesday, July 29, 2026?
SPY change -1.52% close over close reach $729.51, while QQQ dey -2.07%, DIA dey -2.19% and IWM dey -1.63%. Among liquid names, 1652 rise and 4342 fall.
Which sector lead the board on July 29, 2026?
Energy, at 1.89%, based on the eleven SPDR select-sector funds. Among the eleven, Industrials na the weakest, and e print -3.21%.
How busy options market be on July 29, 2026?
66.84 million contracts trade, compared with 59.28 million for the previous session. Same-day contracts make up 33.1% of volume, while calls make up 53.6%.
Which stock trade the highest dollar volume on July 29, 2026?
MU, with 44.99 billion regular-hours dollar volume, ahead of SPY with 42.29 billion.
Data notes
This edition dey continue the daily series. The previous daily edition na July 10, 2026, while the weekly recap carry the week before this one. Dem arrange the named per-ticker panels alphabetically, so prose references dey point to fixed rows. Dem arrange leaderboards and mover boards by value, and every position claim wey dem carry get encoded as a sanity bound. The mega-cap basket and the eleven-fund sector basket na fixed sets wey dem declare, no be vendor classifications. The mover boards use a five-million-dollar regular-hours turnover bar. Dem exclude any name wey split execute between the two closes wey dem dey measure. Dem also exclude one reused symbol under the house ambiguity guard, so every callout go always point to a name wey person fit verify. The quote panels count one-sided and crossed quotes for each name instead of silently dropping them. Treasury's file and the EDGAR daily index dey arrive on their own schedules, so those panels report wetin dem get instead of assuming say the data don arrive. No implied-volatility index dey here. Those series no get license for this warehouse, so dem read volatility from the tape through ranges, same-day options share and quote behavior.
Methodology
- Market data source: consolidated tape.
delayed_stocks_minute_aggsna for prices and volumes,options_tradesna for the options tape,cache_stocks_quotesandcache_options_quotesna for the NBBO panels. - Close: na the last regular-session minute bar, never be assumed 16:00 print and never be extended-hours print.
- Time zone handling: all stored timestamps dey UTC; WHERE clauses dey use raw UTC literals, and
toTimeZonedey show only for SELECT lists as ET labels. - Session verification: na from the holiday table plus observed bars, never be assumed from the calendar.
- Prior-session comparisons: query dey calculate am from July 28, never carry am over from previous post.
- Decimals: price, size and volume columns dey cast to Float64 before any division or product.
- Deterministic aggregates: exact quantiles and tuple-keyed tie-breaks dey apply throughout; every ordering or sign claim for the prose get sanity bound encoded.
- Warehouse as-of date: August 1, 2026, three days after the session, don pass the tape normal one-to-two-day ingest lag; the bounded receipts above go hold the post if any dataset no dey available when dem generate am.
Cross-links: the previous daily recap, the weekly recap, when options expire, what a bid-ask spread is, and the two-to-ten-year spread.
Every query above dey run unchanged for the Strasmore terminal if you wan point one window to another session.