Marktoverzicht 30 juni 2026 in cijfers
De laatste sessie van het kwartaal: een technologie-geleide indexstijging in een rode markt, met de memory-sector als koploper en de options tape bij de close.
Dinsdag 30 juni 2026 — de laatste sessie van het kwartaal — was een door technologie geleverde stijging in een overwegend rode markt: QQQ steeg met 1.63% en SPY met 0.73%, maar slechts 4 van de 10 S&P sectorfondsen sloot hoger (3,349 liquide namen omhoog, 3,033 omlaag). De voorgaande sessie: de recapitulatie van 29 juni. Elk onderstaand getal is afkomstig uit een opgeslagen query — klap elk paneel uit voor de SQL.
Het scorebord
Elke wijziging vergelijkt de laatste reguliere handelsminuut van 30 juni met die van maandag 29 juni.
De exacte SQL achter elk getal
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-06-29 13:30:00' AND window_start < '2026-06-29 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-06-30 13:30:00' AND window_start < '2026-06-30 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_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 AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.tickerSPY opende op $741.29 en sloot op $746.32, nabij de high van $748.02. De 1.63% van QQQ ten opzichte van de 0.12% van DIA bepaalt het verloop van de dag: groei steeg, blue chips bewogen nauwelijks en IWM 0.49%.
De afsluiting van het kwartaal
30 juni markeerde de laatste van de 62 sessies in het tweede kwartaal. De koersbeweging van die dag was representatief voor het gehele kwartaal.
De exacte SQL achter elk getal
WITH q2 AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS d_open,
argMax(toFloat64(close), window_start) AS d_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= toDateTime('2026-04-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
SELECT
ticker,
toString(min(d)) AS quarter_first_session,
count() AS quarter_sessions,
round(argMin(d_open, d), 2) AS quarter_open,
round(argMax(d_close, d), 2) AS quarter_close,
round((argMax(d_close, d) / argMin(d_open, d) - 1) * 100, 2) AS quarter_pct,
countIf(d_close > d_open) AS up_sessions
FROM q2
GROUP BY ticker
ORDER BY quarter_pct DESC, ticker ASC1 april tot 30 juni: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08%. QQQ was de koploper van zowel het kwartaal als de dag van 30 juni. De onderlinge verhoudingen veranderden echter gedurende de periode: SPY presteerde op die specifieke dag beter dan IWM, terwijl IWM over het gehele kwartaal de SPY versloeg. QQQ sloot hoger op 38 van de 62 sessies (de Q2 recap biedt een gedetailleerd overzicht per paneel).
Was de dag ongewoon?
De exacte SQL achter elk getal
SELECT round(anyIf(oc_pct, d = toDate('2026-06-30')), 2) AS day_move_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-06-30'))), groupArrayIf(abs(oc_pct), d != toDate('2026-06-30'))) + 1 AS abs_move_rank,
count() AS 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-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)De beweging van open naar close binnen de sessie — een ander perspectief dan de close-over-close resultaten — liet zien dat SPY 0.68% bewoog. Hiermee stond de index op de 7 plaats van 21 voorgaande sessies op basis van absolute omvang. De index was rustig; de handel op de markt was dat niet.
Breedte: een beperkt positief voordeel
De exacte SQL achter elk getal
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') AS day_dollar_volume
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')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00')
GROUP BY ticker
)
SELECT
countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
count() AS tickers_traded_both_sessions,
count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
/ countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct,
countIf(ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')) AS sector_funds_counted,
countIf(ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND day_close > prior_close) AS sector_funds_up
FROM per_ticker
WHERE prior_close > 0 AND day_close > 03,349 stijgers, 3,033 dalers, 88 ongewijzigd: 51.8% van de liquid tape steeg — een kansverdeling onder een 1.63% groei-indexcijfer. De liquiditeitsfilter filtert 5,055 van de 11,525 dual-session tickers (met een handelsvolume onder $1 miljoen) die hier worden meegeteld, nooit verborgen.
Sector voor sector: waar het geld daadwerkelijk naartoe ging
Het tellen van namen geeft een vertekend beeld van de kapitaalstromen. De onderstaande tien fondsen houden elk een deel van de S&P 500 vast. De spread tussen de beste en slechtste prestatie geeft aan hoe ongelijkmatig de sessie verliep.
De exacte SQL achter elk getal
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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,
if(day_close > prior_close, 1, 0) AS is_up,
round(max((day_close / prior_close - 1) * 100) OVER () - (day_close / prior_close - 1) * 100, 2) AS pts_behind_leader,
day_dollar_bn
FROM per_name
ORDER BY pct_chg DESC, ticker ASCTechnology (XLK) steeg met 2.69% en was de enige grote winnaar: industrials 1.34%, materials 0.36% en discretionary 0.15% waren de enige andere sectoren in de groene zone. De rest van de markt noteerde rode cijfers, van financials (-0.17%) tot utilities (-1.48%), staples (-1.53%) en als laatste real estate op -2%. Verschil tussen beste en slechtste: 4.69 basis points, waarbij 4 van de 10 fondsen in de groene zone eindigden. Een index met een stijging van minder dan één procent en een spread van vier punten: één sector bepaalde de koers.
De grootste bewegers van de dag, marktbreed
Breadth geeft aan hoeveel namen zijn gestegen; dit toont de grootste bewegingen — de top en bodem van vijf op basis van procentuele verandering onder namen met een handelsvolume van $10 miljoen of meer.
De exacte SQL achter elk getal
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') AS day_dollar_volume
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')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00')
GROUP BY ticker
HAVING prior_close > 1 AND day_close > 0 AND day_dollar_volume >= 10000000 AND ticker NOT IN ('SPCX')
)
SELECT
board,
ticker,
prior_close,
day_close,
pct_chg,
round(abs(pct_chg), 2) AS abs_pct_chg,
dollar_volume_m,
if(ticker IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date >= '2026-06-29' AND execution_date <= '2026-06-30'), 1, 0) AS split_record_on_file
FROM (
SELECT 'top gainers' AS board, 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_dollar_volume / 1e6, 0) AS dollar_volume_m
FROM per_ticker
ORDER BY (day_close / prior_close) DESC, ticker ASC
LIMIT 5
UNION ALL
SELECT 'top decliners' AS board, 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_dollar_volume / 1e6, 0) AS dollar_volume_m
FROM per_ticker
ORDER BY (day_close / prior_close) ASC, ticker ASC
LIMIT 5
)
ORDER BY if(board = 'top gainers', 0, 1) ASC, pct_chg DESC, ticker ASCGeen van beide beurzen volgt de index. JEM leidde met +256.76% bij $141 miljoen aan handel; SOC verloor 55.89% bij $306 miljoen. ABVX steeg met 38.56% bij $942 miljoen, de hoogste turnover op beide beurzen; NVCT daalde met 35.62% en UNCY met 39.09%. De kolom met split-records voorkomt fouten — een 1-voor-10 reverse split verschijnt als een "winst" van +900% op een niet-gecorrigeerde tape — en elke naam hier heeft een 0: echte transacties.
Drie rijen zijn twee keer dezelfde transactie: CRCA (-35.16%) en CRCG (-35.19%) daalden terwijl CRCD steeg met 35.47% — elk bijna twee keer de -17.53% beweging van de crypto-gerelateerde naam hieronder: leveraged single-stock wrappers.
Het hoogtepunt van de dag: halfgeleiders in het kwartal
Zes namen, één thema, zeer verschillende uitkomsten — enkel co-movement en omvang; de data geeft geen verklaring voor de oorzaak.
De exacte SQL achter elk getal
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-06-30 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-06-30 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-06-30 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-30 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'INTC', 'MU', 'SNDK', 'TSM', 'WDC')
AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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, 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,
day_dollar_bn
FROM per_name
ORDER BY tickerSanDisk steeg met 10.79%, AMD met 7.7%, Intel met 5.93%, TSMC met 4.86% — terwijl MU, met een omzet van $37.41 miljard de grootste in de handel, slechts 0.52% hoger sloot en Western Digital (-2.01%) geen beweging liet zien. Dit is de complexiteit achter de 2.69% sectorprint van technologie (MU's juni, tick voor tick).
De tegenstroom liep via financiële instellingen gerelateerd aan crypto, tegen de groene koers in:
De exacte SQL achter elk getal
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-06-30 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-06-30 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-06-30 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-30 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('COIN', 'CRCL', 'HOOD', 'MSTR')
AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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, 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,
day_dollar_bn
FROM per_name
ORDER BY tickerCRCL noteerde -17.53%, waarbij de laagste koers van $62.52 werd bereikt om 15:59 ET — de laatste minuut van de sessie — samen met MSTR -6.2%, COIN -3.61% en HOOD -1.53%. Er was sprake van co-movement; de oorzaak is niet vastgesteld.
Wat het nieuwsbericht bevatte
Een samenvatting die geen oorzaken claimt, verschuldigt de lezer wat er die dag daadwerkelijk is gepubliceerd.
De exacte SQL achter elk getal
SELECT
names.n AS ticker,
countIf(has(tickers, names.n)) AS articles_today,
if(countIf(has(tickers, names.n)) = 0, 'none',
formatDateTime(toTimeZone(argMaxIf(published_utc, (published_utc, id), has(tickers, names.n)), 'America/New_York'), '%H:%i')) AS latest_et,
if(countIf(has(tickers, names.n)) = 0, 'no article in our feed this session',
JSONExtractString(argMaxIf(publisher, (published_utc, id), has(tickers, names.n)), 'name')) AS publisher_name,
if(countIf(has(tickers, names.n)) = 0, 'no article in our feed this session',
argMaxIf(title, (published_utc, id), has(tickers, names.n))) AS latest_headline
FROM global_markets.stocks_news
CROSS JOIN (SELECT arrayJoin(['NVDA', 'MU', 'SNDK', 'CRCL', 'SOC', 'ABVX', 'JEM']) AS n) AS names
WHERE published_utc >= '2026-06-30 04:00:00' AND published_utc < '2026-07-01 04:00:00'
GROUP BY names.n
ORDER BY articles_today DESC, ticker ASCDe meest besproken naam was NVDA met 21 artikelen — hoewel dit totaal geen van de dagelijkse movers was — waarbij het laatste stuk van de sessie (16:28 ET, Investing.com) de titel "These Stocks Could Benefit as the Robotaxi Race Heats Up" droeg. MU trok 7; het enige artikel over SanDisk (The Motley Fool) is de enige kop die de hele dag een daadwerkelijke beweging benoemt: "Why Sandisk Stock Is Skyrocketing Today".
De conclusie is het verschil: de grootste decliner van de dag, de zwaarste gainer en de crypto-gerelateerde naam die het hardst daalde, trokken elk 0, 0 en 0 artikelen — elk nul stuks, binnen een feed van 211 stukken. Verslaggeving is geen proxy voor price action.
Waar de handel plaatsvond
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-30 13:30:00' AND window_start < '2026-06-30 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(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-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESCIn termen van dollars overtrof MU alles, inclusief indexfondsen: $37.41 miljard tegenover $31.84 miljard voor SPY — de tweede opeenvolgende sessie waarin het de belangrijkste indexfondsen in handelsvolume overtrof (recap van maandag bevat de eerste). Het aandelenbord laat iets anders zien: SOXS, een 3x-leveraged inverse semiconductor ETF (515.5 miljoen aandelen), en twee namen onder de dollar die slechts een verwaarloosbaar deel van de handel in MU vertegenwoordigen — volume laat twee verschillende beelden zien.
Eén naam wordt opzettelijk door beide borden weggelaten: een beursgang in juni waarvan de ticker eerder toebehoorde aan een ander, ongerelateerd bedrijf, waardoor dataleveranciers twee entiteiten met dezelfde drie letters markeren (gegevens hier).
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
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
GROUP BY et_time
ORDER BY et_time2.05 miljard aandelen in het eerste half uur, een dieptepunt van 0.78 miljard om 13:30, en de grootste categorie van de dag — 2.69 miljard — richting een afsluiting aan het einde van een kwartaal, waarbij de sluitingsveiling en de bijbehorende rebalancing flows zichtbaar worden (de diepgaande analyse van 29 juni bevat de details).
De options tape
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-30 00:00:00' AND sip_timestamp < '2026-07-01 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-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
) AS spy_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) = '260630') / 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,
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,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'))
/ toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C')), 2) AS spy_put_call_ratio,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) > spy_close)) / 1e6, 2) AS spy_0dte_otm_calls_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) <= spy_close)) / 1e6, 2) AS spy_0dte_itm_calls_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) < spy_close)) / 1e6, 2) AS spy_0dte_otm_puts_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) >= spy_close)) / 1e6, 2) AS spy_0dte_itm_puts_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,
round(top_contract.7, 3) AS top_contract_avg_price,
round(top_contract.2 - spy_close, 2) AS top_strike_minus_spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'Er werden 61.95 miljoen contracten verhandeld via 10.06 miljoen prints; calls vormden 57.3% van het totale volume, en 28% daarvan verviel die dinsdag. SPY vertoonde een tegengesteld beeld: 12.04 miljoen contracten met een put/call ratio van 1.09 — meer puts dan calls, op een dag dat het fonds steeg.
De vergelijking van de SPY-expiraties van dezelfde dag met de slotkoers van $746.32 maakt de skew concreet: 3.33 miljoen out-of-the-money puts (strikes onder de slotkoers) en 2.28 miljoen out-of-the-money calls, tegenover 1.77 miljoen in-the-money calls en 0.63 miljoen in-the-money puts — de strikes met een neerwaartse trend die waardeloos afliepen, vormden de grootste categorie van de 0DTE dag van SPY. Er werden geen trades geregistreerd met een expiratiedatum van vrijdag 3 juli (0 prints — de markt is die vrijdag gesloten); de wekelijkse optie voor donderdag had een volume van 10.52 miljoen.
De exacte SQL achter elk getal
SELECT
concat(underlying, ' $', toString(strike), ' ', if(typ = 'C', 'call', 'put')) AS contract,
toString(expiry) AS expires,
formatDateTimeInJodaSyntax(expiry, 'MMMM d, yyyy') AS expires_label,
if(expiry = toDate('2026-06-30'), 1, 0) AS is_same_day,
contracts,
round(avg_px, 3) AS avg_premium,
round(100 * contracts / max(contracts) OVER (), 1) AS pct_of_busiest
FROM (
SELECT any(underlying_symbol) AS underlying,
any(toFloat64(strike_price)) AS strike,
any(option_type) AS typ,
any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) AS expiry,
sum(size) AS contracts,
avg(toFloat64(price)) AS avg_px,
any(ticker) AS occ
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'
GROUP BY ticker
ORDER BY contracts DESC, occ ASC
LIMIT 6
)
ORDER BY contracts DESC, contract ASCHet meest verhandelde contract was de SPY $747 call met dezelfde expiratiedatum — 821,361 contracten tegen een gemiddelde premium van $0.641, eindigend $0.68 boven de laatste reguliere bar van SPY, en waardeloos. De gegevens hierachter illustreren de les: vijf van de zes meest verhandelde contracten op de tape waren SPY-strikes met dezelfde expiratiedatum die rond de close slechts één dollar van elkaar lagen (SPY $748 call volgend), waarbij elk contract voor slechts enkele cents werd verhandeld. De uitzondering, met 65.1% van het volume van de koploper, was KWEB $29 call met expiratiedatum December 18, 2026, wat geen contract met dezelfde dag was: één positie met een looptijd van zes maanden tussen vijf loterijtickets uit de middag.
Rentes: de lange rente steeg richting de afsluiting van de helft
De exacte SQL achter elk getal
SELECT
t.1 AS curve_point,
round(t.2, 2) AS jun30_yield_pct,
round((t.2 - t.3) * 100) AS one_day_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-06-30') AS d,
(SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-29') AS p
)De lange rente steeg op de laatste dag van de helft: de 10-jarige steeg 6 bp naar 4.44%, de 2-jarige 4 bp naar 4.14%, en de 2s10s spread werd steiler met 2 bp naar 0.3 punten. De lange yields stegen tijdens een sessie waarin de zwakste sector, vastgoed (-2%), en de op drie na zwakste sector, nutsbedrijven (-1.48%), beide klassiek rentegevoelig zijn: een gelijktijdige ontwikkeling die opvalt, maar geen mechanisme dat deze data kan bewijzen (de H1 recap bepaalt de curve van de helft).
De kalender achter de dag
De exacte SQL achter elk getal
WITH
(
SELECT (count(), uniqExact(publisher))
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-30'
) AS news,
(
SELECT (argMax(t, n), 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-30'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-30') AS ex_dividend_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-06-30') AS splits_executed,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-30') AS ipos_listed,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS sec_filings,
(SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS insider_form4_filings,
(SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS filings_8k,
(SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-30' ORDER BY ticker
)) AS ipo_names,
news.1 AS news_articles,
news.2 AS news_publishers,
top_news.1 AS most_covered_ticker,
top_news.2 AS most_covered_articles,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_prior_session704 dividend records gingen ex-dividend op de laatste dag van het kwartaal — een golf aan kwartaalafsluitingen, aangezien de meeste Amerikaanse bedrijven een quarterly dividend uitkeren — met 7 splits en 2 nieuwe listings (AACU — Ares Acquisition Corp III; OSPRU — Osprey Acquisition Corp. III). De kolom met ingediende documenten is de belangrijkste indicator voor de datakwaliteit: de SEC-index bevat 31 filings voor 30 juni — 0 insider Form 4s, 0 8-Ks — tegenover 4439 in de voorgaande sessie. Er is sprake van een patroon aan het einde van de maand in de feed, zoals vastgesteld in de month-end gap note; elk aantal dat deze dag bevat, is te laag totdat de data is bijgewerkt.
De sessie, geverifieerd
De exacte SQL achter elk getal
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-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00') AS day_sessions
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-30 00:00:00' AND window_start < '2026-07-01 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).
De conclusie van de sessie
Een 0.73% SPY-notering met 51.8% stijgende namen, 4 van de 10 sectorfondsen in de groene zone en een verschil van 4.69 basis points tussen de best en slechtst presterende waarden duidt niet op een brede rally. Het is een rally in één sector die zich voordoet als een indexbeweging, tijdens de meest intensieve halfuur van een kwartaalafsluitende veiling. Een indexverandering is een gemiddelde; deze beweging werd gedreven door technologie terwijl de meeste sectoren daalden: controleer de dispersion voordat u de richting vertrouwt.
FAQ
Hoe heeft de aandelenmarkt het gedaan op 30 juni 2026?
De markt sloot hoger: SPY steeg met 0.73% en QQQ met 1.63% ten opzichte van de slotkoers van 29 juni. De marktbreedte was beperkter — 51.8% van de liquide namen steeg, terwijl 4 van de 10 S&P sector funds in de groene zone eindigde.
Welke sector leidde de markt op 30 juni 2026?
Technologie: XLK steeg met 2.69%, gevolgd door industriële sector met 1.34% en vastgoed als laatste met -2% — een spread van 4.69 basis points tussen de best presterende en slechtste sector.
Wat waren de grootste koersbewegingen op 30 juni 2026?
Onder de namen met een handelsvolume van $10 miljoen of meer, steeg JEM het meest (+256.76%) en daalde SOC het meest (55.89%). Geen van beide had te maken met een stock split: beide bewegingen zijn reële prijsveranderingen en geen gevolgen van corporate actions.
Hoe heeft de aandelenmarkt het gedaan in Q2 2026?
Van de opening op 1 april tot de sluiting op 30 juni, over 62 sessies: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08% — een kwartaal dat werd geleid door growth, afgesloten met een dag die eveneens door growth werd geleid.
Waarom is er zoveel volume in het laatste half uur?
Het laatste half uur kende een volume van 2.69 miljard aandelen, tegenover 2.05 miljard bij de opening. De closing auction bepaalt de officiële slotkoers van elk aandeel in één enkele crossing, waarbij index funds daar handelen om de koers te matchen; de rebalancing aan het einde van het kwartaal zorgt voor een concentratie van de cash flow.
Databronnen en methodiek
- De manden. Het sectorbord bevat de tien SPDR sector funds die in het panel worden genoemd — elke sessie dezelfde mand, zodat de dispersion-waarde over dagen heen vergeleken kan worden. De mover boards vereisen een turnover van $10 miljoen en een koers boven de $1 bij de vorige sluiting. De lijst met hergebruikte symbolen wordt uitgesloten en bevat een kolom voor split-records.
- De beperkingen. De dollar volume is een proxy per minuut (sluitingskoers × volume per bar). De index van de indiening op 30 juni is vrijwel leeg (de maandelijkse gap-notitie analyseert dit). Het aantal nieuwsberichten is gebaseerd op één vendor feed: het ontbreken van een artikel hier is geen bewijs dat er nergens iets is gepubliceerd.
- De methodiek. Eén sessie (1, geverifieerd via geobserveerde bars); tijdstempels worden opgeslagen in UTC en in de queries omgezet naar New Yorkse tijd; "close" is de laatste reguliere minuut-bar, niet de auction print. Option expiries worden opnieuw geparsed via de OCC ticker (de kolom in de tabel is defect); moneyness wordt gemeten ten opzichte van de laatste reguliere bar van SPY. Panels worden eenmaal uitgevoerd op het moment van schrijven via het gated read-only pad. Warehouse per 13 juli 2026.
Elk panel is een opgeslagen query-resultaat — grafiek, tabel en SQL in één object. Plak elk onderdeel in de Strasmore terminal. Volgende sessie: 1 juli.