Marktoverzicht 29 juni 2026 in cijfers
Bekijk de markt van 29 juni 2026: een indexstijging door groei, een sector spread van vier punten en de 0DTE tape. Lees hier de volledige analyse.
Maandag 29 juni 2026 was een stijgende dag gedreven door groei met een smalle groep leidende aandelen: QQQ steeg met 2.57%, SPY met 1.62%, terwijl 3968 liquide namen stegen tegenover 2327 decliners — toch sloot bijna de helft van de sectorbaskets rood af. Elk getal is afkomstig uit een database; open een paneel voor de SQL. De tick-by-tick laag van dezelfde sessie: de microstructure deep dive van 29 juni.
De scorelijst
Elke wijziging vergelijkt de laatste reguliere sessie-minuutbar van 29 juni met die van vrijdag 26 juni.
De exacte SQL achter elk getal
WITH friday AS (
SELECT ticker, argMax(close, window_start) AS friday_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00'
GROUP BY ticker
),
monday AS (
SELECT ticker,
argMin(open, window_start) AS monday_open,
argMax(close, window_start) AS monday_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-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
GROUP BY ticker
)
SELECT
m.ticker AS ticker,
toFloat64(f.friday_close) AS jun26_close,
toFloat64(m.monday_open) AS jun29_open,
toFloat64(m.monday_close) AS jun29_close,
round((toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) * 100, 2) AS pct_change,
round(100 * (toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) / max(toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) OVER (), 1) AS pct_of_best_change,
toFloat64(m.day_high) AS day_high,
toFloat64(m.day_low) AS day_low,
m.shares_traded_m AS shares_traded_m
FROM monday m
JOIN friday f ON m.ticker = f.ticker
ORDER BY m.tickerSPY opende op $736.525 ten opzichte van de slotkoers van vrijdag op $729.09 en sloot op $740.88, onder de high van $741.56. De +2.57% van QQQ ten opzichte van de +0.81% van DIA duidt op een dag in het teken van groei en tech; small-cap IWM steeg met 0.45%.
Was de dag ongebruikelijk?
Een procentuele beweging zegt weinig zonder referentiekader. Dit paneel rangschikt 29 juni ten opzichte van de voorgaande maand op basis van de absolute close-over-close omvang.
De exacte SQL achter elk getal
SELECT
round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-06-29')), 2) AS qqq_close_over_close_pct,
arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-06-29'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-06-29'))) + 1 AS qqq_abs_move_rank,
countIf(ticker = 'QQQ') AS qqq_sessions_compared,
round(max(if(ticker = 'QQQ', abs(cc_pct), 0)), 2) AS qqq_biggest_move_of_month_pct,
countIf(ticker = 'QQQ' AND cc_pct > 0) AS qqq_up_sessions,
round(anyIf(cc_pct, ticker = 'SPY' AND d = toDate('2026-06-29')), 2) AS spy_close_over_close_pct,
arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'SPY' AND d = toDate('2026-06-29'))), groupArrayIf(abs(cc_pct), ticker = 'SPY' AND d != toDate('2026-06-29'))) + 1 AS spy_abs_move_rank,
countIf(ticker = 'SPY') AS spy_sessions_compared,
round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-06-29')), 2) AS spy_open_to_close_pct,
concat(monthName(min(d)), ' ', toString(toDayOfMonth(min(d))), ', ', toString(toYear(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-05-28 00:00:00')
AND window_start < toDateTime('2026-06-30 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)
WHERE isFinite(cc_pct)Groot, maar geen record: de 2.57% beweging van QQQ staat op de 5 plaats van de 21 sessies sinds May 29, 2026, in een maand waarin de grootste enkele beweging 4.76% bedroeg; de 1.62% van SPY staat op de 4 plaats van de 21. De oorzaak van de beweging is relevant: de grind van de open-to-close van SPY was slechts 0.59%, waardoor het grootste deel van de winst voortkwam uit de overnight gap, voordat er een enkele bar tijdens de reguliere handelsuren werd geregistreerd. QQQ sloot hoger op 10 van die sessies: een maand met een verhouding van bijna twee-op-één.
Breedte: hoe groot was de rally?
Een advancer is een ticker waarvan de maandagsluiting hoger lag dan die van vrijdag, onder namen met een handelsvolume van minstens $1 miljoen — een filter dat 5,108 van de 11,475 tickers met een dubbele sessie wegfiltert.
De exacte SQL achter elk getal
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') AS monday_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE (window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
GROUP BY ticker
)
SELECT
countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000) AS advancers,
countIf(monday_close < friday_close AND monday_dollar_volume >= 1000000) AS decliners,
countIf(monday_close = friday_close AND monday_dollar_volume >= 1000000) AS unchanged,
countIf(monday_dollar_volume >= 1000000) AS liquid_tickers,
count() AS tickers_traded_both_sessions,
reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_label,
count() - countIf(monday_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(monday_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_label,
round(100.0 * countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000)
/ countIf(monday_dollar_volume >= 1000000), 1) AS advancer_pct
FROM per_ticker
WHERE friday_close > 0 AND monday_close > 03968 advancers, 2327 decliners, 72 unchanged: 62.3% van de liquid tape steeg — berekend per individuele naam, een brede dag.
Sector voor sector: de rally was beperkter dan het leek
Het tellen van het aantal stijgende namen is één benadering; het wegen op basis van bedrijfsgrootte is een andere. De elf SPDR sector ETF's zijn de afkorting voor de tweede methode — één op marktwaarde gewogen mandje per sector van de S&P 500. Deze wijken sterk af van de breedte-meting.
De exacte SQL achter elk getal
WITH per_etf AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') / 1e6, 0) AS dollar_volume_m
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-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
GROUP BY ticker
)
SELECT
sector,
ticker,
round((monday_close / friday_close - 1) * 100, 2) AS pct_change,
round((day_high / day_low - 1) * 100, 2) AS range_pct,
dollar_volume_m,
round((monday_close / friday_close - 1) * 100 - min((monday_close / friday_close - 1) * 100) OVER (), 2) AS pct_above_worst_sector
FROM (
SELECT *,
multiIf(ticker = 'XLB', 'Materials',
ticker = 'XLC', 'Communication services',
ticker = 'XLE', 'Energy',
ticker = 'XLF', 'Financials',
ticker = 'XLI', 'Industrials',
ticker = 'XLK', 'Technology',
ticker = 'XLP', 'Consumer staples',
ticker = 'XLRE', 'Real estate',
ticker = 'XLU', 'Utilities',
ticker = 'XLV', 'Health care',
'Consumer discretionary') AS sector
FROM per_etf
)
ORDER BY pct_change DESCTechnology leidde met 2.52%, consumer discretionary volgde met 2.37%; materials sloot met -1.82% en real estate met -0.64%. Het verschil tussen de best presterende en slechtste sector — de sector-dispersie van de dag — bedroeg 4.34 basis points, waarbij utilities, staples, energy, real estate en materials allemaal in het rood stonden op een dag dat de index steeg. Breed qua aantal namen, beperkt qua gewicht: dat is wat de winst van een indexfonds kan verhullen.
The day's highlight: memory and storage
Four names traded the same theme with very different outcomes — co-movement and magnitude only; the data does not say why.
De exacte SQL achter elk getal
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-06-29 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-29 00:00:00') AS high_bar
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(friday_close, 2) AS jun26_close,
round(monday_close, 2) AS jun29_close,
round((monday_close / friday_close - 1) * 100, 2) AS pct_chg,
round(day_high, 2) AS day_high,
formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
round(day_low, 2) AS day_low,
formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
round((day_high / day_low - 1) * 100, 2) AS range_pct
FROM per_name
ORDER BY tickerMU is the textbook case of range versus net change: a 12.22% intraday range — a $1023.65 low at 10:18 ET, a $1148.79 high at 15:59 — yet a close 1.97% above Friday. Western Digital rose 11.15% and Seagate 8.17%; SanDisk closed -1.9% across a 10.33% range — the cluster's one lower close. A close hides what holders lived through.
Waar de handel plaatsvond
Op basis van de verhandelde dollars overtrof Micron (MU) alles, inclusief indexfondsen: $58.47 miljard tegenover $33.97 miljard voor SPY. Op basis van het aantal aandelen was de situatie anders.
De exacte SQL achter elk getal
SELECT ticker, leaderboard, dollar_volume_bn, if(dollar_volume_bn < 1, dollar_volume_m, NULL) AS dollar_value_m, shares_m,
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(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
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(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESCOverzichten van het aantal aandelen zijn misleidend: de koplopers waren SOXS, een 3x-leveraged inverse semiconductor ETF (695.3 miljoen aandelen), en INLF, een penny stock waarvan de 353.8 miljoen aandelen de hele dag ongeveer $23 miljoen waard waren. Dollar volume laat zien waar het geld naartoe bewoog; relatieve volume laat zien of de activiteit van een aandeel ongebruikelijk is voor dat specifieke aandeel.
In blokken van 30 minuten in New York vertoont 29 juni de klassieke volume "smile":
De exacte SQL achter elk getal
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,
round(100 * (sum(toFloat64(volume)) / min(sum(toFloat64(volume))) OVER () - 1), 1) AS pct_above_trough
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
GROUP BY et_time
ORDER BY et_time2.3 miljard aandelen in het eerste halfuur, een dal van 0.77 miljard om 13:30, en het grootste blok — 2.39 miljard — in het laatste halfuur, waar closing auctions en index-tracking flows zich concentreren.
De options tape
Er werden 66.33 miljoen contracten verhandeld over 11.04 miljoen prints.
De exacte SQL achter elk getal
WITH
(
SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
sum(size), count(), round(avg(toFloat64(price)), 3))
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY ticker
ORDER BY sum(size) DESC
LIMIT 1
) AS top_contract,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
) AS spy_regular_close
SELECT
round(count() / 1e6, 2) AS option_prints_m,
round(toFloat64(sum(size)) / 1e6, 2) AS 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) = '260629') / sum(size), 1) AS same_day_expiry_pct,
round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260702')) / 1e6, 2) AS thu_jul2_expiry_contracts_m,
countIf(substring(ticker, length(ticker) - 14, 6) = '260703') AS fri_jul3_expiry_prints,
countIf(sip_timestamp < '2026-06-29 13:30:00') AS premarket_prints,
reverse(arrayStringConcat(extractAll(reverse(toString(countIf(sip_timestamp < '2026-06-29 13:30:00'))), '[0-9]{1,3}'), ',')) AS premarket_prints_label,
countIf(sip_timestamp < '2026-06-29 13:30:00'
AND underlying_symbol NOT IN ('SPX', 'SPXW', 'XSP', 'RUTW', 'VIX', 'VIXW')) AS premarket_non_index_prints,
arrayStringConcat(arraySort(groupUniqArrayIf(underlying_symbol, sip_timestamp < '2026-06-29 13:30:00')), ', ') AS premarket_underlyings,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
top_contract.1 AS top_contract_underlying,
top_contract.2 AS top_contract_strike,
top_contract.3 AS top_contract_type,
top_contract.4 AS top_contract_expiry,
top_contract.5 AS top_contract_volume,
reverse(arrayStringConcat(extractAll(reverse(toString(assumeNotNull(top_contract.5))), '[0-9]{1,3}'), ',')) AS top_contract_volume_label,
round(top_contract.7, 3) AS top_contract_avg_price,
round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'Calls vormden 55.7% van het contractvolume, en 35.8% van het totale handelsvolume verliep op diezelfde maandag — de zero-days-to-expiry (0DTE) share. Het meest verhandelde individuele contract was de SPY $741 call met dezelfde expiratiedatum: 788,133 contracten tegen een gemiddelde premium van $0.474, waarbij de SPY-sluiting 0.12 dollar onder de strike eindigde — de meest verhandelde optie van de dag eindigde out of the money. SPY werd verhandeld als underlying met 12.01 miljoen contracten; QQQ 7.32 miljoen.
Het panel registreert ook 40,621 option prints vóór de opening van de aandelenmarkt om 9:30 — allemaal op een cash-settled index root (RUTW, SPX, SPXW, VIX, VIXW, XSP), met 0 stock of ETF option prints in dezelfde periode. Dit is de regel, geen toeval: indexopties hebben sessies met wereldwijde handelsuren, terwijl opties op aandelen en ETF's openen met de aandelenmarkt. De aandelen worden vroeg verhandeld — zie premarket en after-hours trading — hun opties niet.
Geen enkel contract met een expiratiedatum van vrijdag 3 juli werd gedurende de dag verhandeld (0 prints) — de markt is die vrijdag gesloten — terwijl de expiratiedatum van donderdag 2 juli 10.73 miljoen verhandelde.
De quote tape: de kosten van de handel gedurende de dag
Elke prijs op deze pagina is gebaseerd op een quote stream — de National Best Bid and Offer, die continu wordt herzien voor elk genoteerd aandeel. Het verschil tussen de beste bid en de beste offer, de bid-ask spread, is wat een order betaalt om te handelen.
De exacte SQL achter elk getal
SELECT
ticker,
round(count() / 1e6, 2) AS nbbo_updates_m,
round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00'), 2) AS open_30min_spread_bps,
round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS midday_spread_bps,
round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00')
- quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS open_minus_midday_bps,
countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid_quotes
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'MU', 'WDC')
AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
GROUP BY ticker
ORDER BY tickerDe mediane quoted width van SPY was 0.41 basis points van de mid-price, tegenover 0.84 voor QQQ, 4.6 voor Micron en 8.2 voor Western Digital — de breedste van de vier. Eén basis point op een order van $10.000 is één dollar, dus het kopen en direct weer verkopen van $10.000 aan SPY tegen de quote kost ongeveer $0.41; dezelfde round trip in Western Digital kost $8.2. De handelsomvang bleef gelijk; alleen het aandeel veranderde.
Alle vier de aandelen hadden een bredere quote in het eerste half uur dan in het controlevenster rond het middaguur — SPY 0.41 bps tegenover 0.27, Western Digital 14.33 tegenover 7.55, een openingspremie van 6.78 bp op het breedste aandeel. Churn vormt de andere helft: 3.98 miljoen NBBO updates voor SPY tijdens de reguliere handel, 4.42 miljoen voor QQQ.
Rentes: de curve bewoog nauwelijks
Treasuries kenden een rustige maandag. De yields zijn dagsluitingen, veranderd ten opzichte van 26 juni.
De exacte SQL achter elk getal
SELECT
t.1 AS curve_point,
round(t.2, 2) AS jun29_yield_pct,
round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
SELECT arrayJoin([
('1 month', toFloat64(mon.yield_1_month), toFloat64(fri.yield_1_month)),
('3 month', toFloat64(mon.yield_3_month), toFloat64(fri.yield_3_month)),
('1 year', toFloat64(mon.yield_1_year), toFloat64(fri.yield_1_year)),
('2 year', toFloat64(mon.yield_2_year), toFloat64(fri.yield_2_year)),
('5 year', toFloat64(mon.yield_5_year), toFloat64(fri.yield_5_year)),
('10 year', toFloat64(mon.yield_10_year), toFloat64(fri.yield_10_year)),
('30 year', toFloat64(mon.yield_30_year), toFloat64(fri.yield_30_year)),
('2s10s spread', toFloat64(mon.yield_10_year - mon.yield_2_year), toFloat64(fri.yield_10_year - fri.yield_2_year))
]) AS t
FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-29') AS mon,
(SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-26') AS fri
)De 10-year sloot op 4.38%, ongewijzigd op de dag (0 bp), terwijl de 3-month bill 4 bp toenam naar 3.87%. De 2s10s spread — de 10-year minus de 2-year — sloot op 0.28 procentpunt (-3 bp): nog steeds positief, iets platter.
De kalender van de dag
De exacte SQL achter elk getal
WITH
(
SELECT (argMax(d, n), max(n))
FROM (
SELECT ex_dividend_date AS d, count() AS n
FROM global_markets.stocks_dividends
WHERE ex_dividend_date BETWEEN '2026-06-22' AND '2026-07-02'
GROUP BY d
)
) AS peak_ex_div,
(
SELECT (countIf(form_type = '424B2'), countIf(form_type = '4'), countIf(form_type = '8-K'), count())
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date = '2026-06-29'
) AS filings,
(
SELECT (count(), uniqExact(publisher), countIf(has(tickers, 'NVDA')))
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-29'
) AS news,
(
SELECT max(n)
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-06-29'
)
WHERE t NOT IN ('NVDA', 'SPCX')
GROUP BY t
)
) AS runner_up_articles,
(
SELECT (any(split_from), any(split_to), count())
FROM global_markets.stocks_splits
WHERE ticker = 'HON' AND execution_date = '2026-06-29'
) AS hon_split,
(
SELECT (
round(toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')), 2),
round(toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')), 2)
)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'HON'
AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
) AS hon_close
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-29') AS ex_dividend_records_jun29,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-29'
AND ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'GOOG', 'META', 'TSLA', 'JPM', 'JNJ',
'XOM', 'KO', 'PG', 'V', 'MA', 'HD', 'WMT', 'CVX', 'MRK', 'PEP',
'SPY', 'QQQ', 'DIA', 'IWM', 'VTI')) AS household_name_ex_dividends,
length(['AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'GOOG', 'META', 'TSLA', 'JPM', 'JNJ',
'XOM', 'KO', 'PG', 'V', 'MA', 'HD', 'WMT', 'CVX', 'MRK', 'PEP',
'SPY', 'QQQ', 'DIA', 'IWM', 'VTI']) AS household_names_checked,
concat(monthName(peak_ex_div.1), ' ', toString(toDayOfMonth(peak_ex_div.1))) AS busiest_ex_div_day_of_window,
peak_ex_div.2 AS busiest_ex_div_day_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-06-29') AS splits_executed,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-29') AS ipos_listed_jun29,
(SELECT arrayStringConcat(groupArray(ticker), ', ') FROM (
SELECT ticker FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-01' ORDER BY ticker
)) AS jul1_ipo_debuts,
filings.4 AS sec_filings,
filings.1 AS prospectus_424b2_filings,
filings.2 AS insider_form4_filings,
filings.3 AS filings_8k,
news.1 AS news_articles,
news.2 AS news_publishers,
news.3 AS nvda_articles,
runner_up_articles AS next_most_covered_articles,
news.3 - runner_up_articles AS nvda_minus_next_most_covered,
hon_split.3 AS hon_split_records,
hon_split.1 AS hon_split_from,
hon_split.2 AS hon_split_to,
hon_close.1 AS hon_close_jun26,
hon_close.2 AS hon_close_jun29449 dividend records gingen op 29 juni ex-dividend — bezit het aandeel vóór de ex-dividend datum om aanspraak te maken op de betaling — toch kwam 0 voor bij de 25 bekende namen die wij hebben gecontroleerd. De golf van kwartaalafsluitingen bereikte een piek van 745 records op July 1. Er werden 23 splits uitgevoerd en 0 IPO's genoteerd; de debuten van woensdag (BSP, ITG, LIME) staan al in de agenda.
De SEC registreerde 6173 filings met de datum 29 juni: 1473 pricing supplements voor gestructureerde producten (form 424B2) en 1277 insider-trade rapporten (Form 4) overtreffen de 231 8-K's die het nieuws halen. Onze nieuwsfeed bevatte 170 artikelen van 3 uitgevers; met uitzondering van één ambigu getagd hergebruikt symbool (verwijderd uit de query), was NVDA met 14 artikelen de meest besproken naam, vergeleken met 12 voor de nummer twee.
Databemerkingen
Afwijkende data krijgt een toelichting, er vindt nooit een stille uitsluiting plaats — deze vier punten hebben invloed op de koerscijfers.
- De sector baskets zijn een vastgestelde methode. "Sector" verwijst naar de elf SPDR sector ETF's, gewogen naar marktkapitalisatie — dezelfde namen elke sessie, niet de classificatie per ticker van een leverancier.
- Dollar volume is een proxy per minuut — de som van koers × volume per minuut-bar; dit ligt dicht bij, maar is niet identiek aan de som van de print-waarden.
- Quoted spreads sluiten ongeldige quotes uit (eenzijdige of gecrossde NBBO-records); het panel houdt bij wat er is verwijderd (1544 op SPY). Een mediane quoted width is een quoting-statistiek, geen transactiekosten — orders worden vaak binnen de quote uitgevoerd.
- Eén enkele print kan de high of low van een minuut-bar beïnvloeden. De 11:07 ET bar van QQQ bevat een low van $709.58, terwijl geen enkele omliggende bar onder $715.09 zakte — één print zat $5.51 onder de gelijktijdige markt. Elke high en low hierboven is gecontroleerd tegen de aangrenzende bars; de $705.172 session low van QQQ is goedgekeurd.
Volledige databemerkingen
- De Treasury coverage is beperkter dan het schema. Vier geadverteerde looptijden (6-maand, 3-, 7- en 20-jaar) zijn nooit ingevuld; de curve toont de zeven die bestaan, plus de 2s10s rij.
- De tape bevat een tegenstrijdige Honeywell "reverse split". De feed bevat een 1 HON record gedateerd 29 juni: een reverse split waarbij 2 oude aandelen worden omgezet in 1 nieuwe aandelen. HON sloot op $231.3 vrijdag en $227.71 maandag — geen verdubbeling. Wij hebben dit niet toegepast.
- Het aantal nieuwsberichten is afkomstig van één leverancier, de 3 uitgevers die wij gebruiken — niet "al het marktnieuws".
- De tick-level receipts — gecrossde quotes, de phantom-volume correctie, het ingekorte FINRA short-volume bestand (en waarom short volume is niet short interest) — vindt u in de deep dive.
De sessie, geverifieerd
De exacte SQL achter elk getal
WITH
(
SELECT (
round(toFloat64(minIf(low, formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '11:07')), 2),
round(toFloat64(minIf(low, formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') IN ('11:04', '11:05', '11:06', '11:08', '11:09', '11:10'))), 2)
)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'QQQ' AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
) AS qqq_lone
SELECT
(SELECT count() FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-03 00:00:00' AND window_start < '2026-07-04 00:00:00') AS jul3_spy_bars,
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-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00') AS regular_session_bars,
qqq_lone.1 AS qqq_1107_lone_low,
qqq_lone.2 AS qqq_1107_adjacent_bars_low,
round(qqq_lone.2 - qqq_lone.1, 2) AS qqq_lone_print_below_adjacent
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 00:00:00' AND window_start < '2026-06-30 00:00:00'De bars van SPY lopen van 04:00 tot 19:59 New York tijd met exact 390 regular-window bars — een volledige sessie, geverifieerd via de tape (de exchange-calendar dataset bevat alleen toekomstige sluitingen). Die vrijdag 3 juli was een volledige handelsdag — 0 SPY bars werden de hele dag geprint; 4 juli viel op een zaterdag; de week met vier sessies heeft zijn eigen recap.
FAQ
Hoe heeft de aandelenmarkt het gedaan op 29 juni 2026?
Een stijgende dag onder leiding van growth: QQQ sloot 2.57% hoger dan vrijdag, SPY 1.62%, DIA 0.81% en IWM 0.45%, waarbij 62.3% van de tickers met een handelsvolume van $1m of meer hoger sloot.
Was 29 juni 2026 een belangrijke dag voor de Nasdaq?
Belangrijk, maar niet uitzonderlijk: de 2.57% close-over-close beweging van QQQ rangschikte op de 5 van de 21 sessies van de afgelopen maand op basis van absolute grootte, tegenover een maandelijkse piek van 4.76%.
Welke sectoren leidden de markt op 29 juni 2026?
Technology (2.52%) en consumer discretionary (2.37%) leidden de elf SPDR sector baskets; materials eindigde als laatste op -1.82%, een spread van 4.34 basispunten. Utilities, staples, energy en real estate sloten eveneens lager.
Welk deel van het optievolume op 29 juni 2026 bestond uit 0DTE?
Same-day expiries vormden 35.8% van de 66.33 miljoen verhandelde contracts; het drukste individuele contract, een same-day SPY $741 call (788,133 contracts), eindigde out of the money.
Waarom worden opties verhandeld voordat de aandelenmarkt opent?
Alleen index opties doen dit. Alle 40,621 optie-prints voor 9:30 a.m. ET op 29 juni waren gebaseerd op cash-settled index roots (RUTW, SPX, SPXW, VIX, VIXW, XSP), die sessies met uitgebreide wereldwijde handelsuren omvatten; het aantal stock en ETF optie-prints in die periode bedroeg 0.
Methodologie
- Timestamps worden opgeslagen in UTC en binnen de queries omgezet naar New York-tijd. "Close" is de laatste minuutbar van de reguliere sessie, niet de auction print; dagveranderingen vergelijken 29 juni met 26 juni, en de sessie is geverifieerd op basis van de geobserveerde bar span.
- De trailing-month rank gebruikt bewegingen van de close-over-close tijdens de reguliere uren, waarbij de eerste sessie is weggelaten (geen voorafgaande close binnen het venster). Option expiries worden opnieuw geparsed vanuit de OCC ticker (de eigen expiry kolom van de tabel is defect).
- Elk paneel wordt eenmalig gelezen op het moment van redactie via het gated read-only pad. Warehouse-status per 13 juli 2026.
Elk paneel is een resultaat van een opgeslagen query — een grafiek, tabel en SQL in één object. Plak elk van deze elementen in de Strasmore terminal. Volgende sessie: 30 juni.