Podsumowanie rynku 29 czerwca 2026
Analiza sesji z 29 czerwca 2026 roku: wzrosty indeksów growth, rozszerzenie spreadu sektorowego oraz analiza zmienności instrumentów 0DTE i rynków walutowych.
Poniedziałek, 29 czerwca 2026 roku, był dniem wzrostów napędzanych przez spółki typu growth, przy wąskim spektrum liderów: QQQ zyskał 2.57%, SPY 1.62%, a 3968 płynne waluty wzrosły w zestawieniu z 2327 podmiotami tracącymi — mimo to niemal połowa koszyków sektorowych zamknęła się na czerwono. Wszystkie dane pochodzą z zapytań bazodanowych; aby uzyskać dostęp do kodu SQL, należy rozwinąć dowolny panel. Szczegółowa analiza mikrostruktury rynku z tej samej sesji: szczegółowa analiza mikrostruktury z 29 czerwca.
Wyniki
Każda zmiana porównuje ostatnią minutową świecę z sesji regulacyjnej dnia 29 czerwca z danymi z piątku, 26 czerwca.
Dokładny kod SQL dla każdej liczby
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 otworzył na poziomie $736.525 względem piątkowego zamknięcia na poziomie $729.09, a zakończył na poziomie $740.88, poniżej swojego szczytu wynoszącego $741.56. Wzrost QQQ o 2.57% przy wzroście DIA o 0.81% wskazuje na dzień z przewagą spółek wzrostowych i technologicznych; IWM zyskał 0.45%.
Czy dzień był nietypowy?
Zmiana procentowa ma małe znaczenie bez punktu odniesienia. Poniższa tabela porównuje 29 czerwca z wynikami z ostatniego miesiąca pod względem wartości bezwzględnej zmiany ceny zamknięcia.
Dokładny kod SQL dla każdej liczby
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)Duża zmiana, ale nie rekordowa: ruch QQQ na poziomie 2.57% plasuje się w 5 21 sesji od May 29, 2026, przy czym największa pojedyncza zmiana w tym miesiącu wyniosła 4.76%; wynik SPY na poziomie 1.62% plasuje się w 4 21. Kluczowe jest źródło zmiany: wzrost SPY w trakcie sesji wyniósł jedynie 0.59%, zatem większość zysku została wypracowana poprzez lukę nocną, przed wystąpieniem pierwszej świecy w regularnych godzinach handlu. QQQ zamykał wyżej w 10 tych sesji: miesiąc o niepewnym kierunku.
Szerokość rynku: jak duży był wzrost?
Akcjonariuszem (advancer) jest spółka, której cena zamknięcia w poniedziałek była wyższa niż w piątek, przy założeniu obrotów na poziomie co najmniej 1 mln USD — filtr ten wyklucza 5,108 z 11,475 spółek notowanych przez dwie sesje.
Dokładny kod SQL dla każdej liczby
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 wzrostów, 2327 spadków, 72 bez zmian: 62.3% płynnych instrumentów odnotowało wzrosty — licząc każdą spółkę z osobna, był to dzień o dużej szerokości rynku.
Sektor po sektorze: wzrost był mniej szeroki, niż się wydawało
Można liczyć poszczególne spółki w równym stopniu lub ważyć je według wielkości przedsiębiorstwa. Jedenaście funduszy ETF na sektory SPDR stanowi drugą metodę — jeden koszyk dla każdego sektora S&P 500, ważony kapitalizacją rynkową. Wyniki te znacząco odbiegają od analizy liczby rosnących podmiotów.
Dokładny kod SQL dla każdej liczby
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 DESCSektor technologiczny prowadził z wynikiem 2.52%, a sektor dóbr konsumpcyjnych dyskrecjonalnych uplasował się na poziomie 2.37%; materiały budowlane zamknęły się na poziomie -1.82%, a nieruchomości na -0.64%. Różnica między najlepszym a najsłabszym sektorem — czyli dzisiejsza dyspersja sektorowa — wyniosła 4.34 punktów procentowych. Sektory użyteczności publicznej, dóbr podstawowych, energii, nieruchomości oraz materiałów budowlanych odnotowały spadki w dniu, w którym indeks wzrósł. Duża liczba rosnących spółek przy wąskim rozkładzie wag: tak może maskować zyski fundusz indeksowy.
Najważniejsze wydarzenia dnia: pamięć i pamięć masowa
Cztery spółki reprezentowały ten sam sektor, jednak uzyskały skrajnie różne wyniki — odnotowano jedynie korelację kierunku i skali zmian; dane nie wyjaśniają przyczyn.
Dokładny kod SQL dla każdej liczby
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 stanowi klasyczny przykład rozbieżności między zakresem zmienności a zmianą netto: intraday range wyniosło 12.22% — minimum na poziomie $1023.65 o godzinie 10:18 ET oraz maksimum na poziomie $1148.79 o godzinie 15:59 — mimo zamknięcia 1.97% powyżej poziomu z piątku. Western Digital wzrosło o 11.15%, a Seagate o 8.17%; SanDisk zamknęło się na poziomie -1.9% w ramach zakresu 10.33% — była to jedyna spółka z tego sektora z niższym zamknięciem. Cena zamknięcia nie oddaje zmienności, której doświadczyli posiadacze akcji.
Gdzie handlowano kapitałem
Pod względem obrotu w USD, Micron (MU) dominował nad wszystkimi innymi podmiotami, w tym nad funduszami indeksowymi: 58.47 mld USD wobec 33.97 mld USD dla SPY. Pod względem liczby emitowanych akcji sytuacja wyglądała inaczej.
Dokładny kod SQL dla każdej liczby
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) DESCDane dotyczące liczby akcji mogą być mylące: liderami pod względem wolumenu akcji były SOXS, trzykrotnie lewarowany ETF typu inverse na półprzewodniki (695.3 mln akcji), oraz INLF, spółka typu penny stock, której 353.8 mln akcji było warte przez cały dzień około 23 mln USD. Wolumen w USD wskazuje kierunek przepływu kapitału; wolumen relatywny pokazuje, czy aktywność danej spółki jest nietypowa dla niej samej.
W trzydziestominutowych przedziałach czasowych na nowojorskiej giełdzie, 29 czerwca wykazuje klasyczny kształt wolumenu w formie „uśmiechu”:
Dokładny kod SQL dla każdej liczby
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 mld akcji w pierwszej półgodzinie, dołek na poziomie 0.77 mld przy 13:30 oraz największy przedział — 2.39 mld — w ostatniej półgodzinie, gdzie koncentrują się aukcje zamknięcia oraz przepływy funduszy śledzących indeksy.
Rynek opcji
Na rynku opcji wyhandlowano 66.33 milion kontraktów w ramach 11.04 milion transakcji.
Dokładny kod SQL dla każdej liczby
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'Opcje typu call stanowiły 55.7% wolumenu kontraktów, a 35.8% wszystkich instrumentów wygasających w ten sam poniedziałek — udział opcji 0DTE (zero-days-to-expiry). Najbardziej aktywnym pojedynczym kontraktem był call na SPY z tą samą datą wygaśnięcia o wartości $741: 788,133 kontraktów przy średniej premii wynoszącej $0.474, przy czym kurs zamknięcia SPY był o 0.12 dolarów poniżej ceny wykonania — najbardziej obrotowa opcja tego dnia zakończyła się poza pieniądzem. SPY wyhandlowano w wolumenie 12.01 milionów kontraktów jako instrument bazowy; QQQ wyniosło 7.32 milionów.
Panel uwzględnia również 40,621 transakcji opcyjnych przed otwarciem rynku akcji o 9:30 — każda z nich dotyczyła indeksów rozliczanych gotówkowo (RUTW, SPX, SPXW, VIX, VIXW, XSP), przy czym w tym samym oknie czasowym odnotowano 0 transakcji na opcjach na akcje lub ETF. Jest to zasada, a nie przypadek: opcje indeksowe obejmują sesje w godzinach handlu globalnego, natomiast opcje na akcje i ETF otwierają się wraz z rynkiem akcji. Akcje są handlowane wcześniej — patrz handel premarket i after-hours — ich opcje nie.
Żaden kontrakt z datą wygaśnięcia w piątek, 3 lipca, nie został odnotowany w ciągu dnia (0 transakcji) — w ten piątek rynek jest zamknięty — podczas gdy opcje wygasające w czwartek, 2 lipca, osiągnęły wolumen 10.73 milionów.
Tabela notowań: jaki był koszt handlu w ciągu dnia
Każda cena na tej stronie opiera się na strumieniu notowań — National Best Bid and Offer, publikowanym nieustannie dla każdej spółki z listy. Różnica między najlepszą ofertą kupna a najlepszą ofertą sprzedaży, spread bid-ask, stanowi koszt realizacji zlecenia.
Dokładny kod SQL dla każdej liczby
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 tickerMediana spreadu dla SPY wynosiła 0.41 punktów bazowych ceny średniej, wobec 0.84 dla QQQ, 4.6 dla Micron oraz 8.2 dla Western Digital — najwyższa spośród czwórki. Jeden punkt bazowy przy zleceniu o wartości 10 000 USD wynosi jeden USD, zatem zakup i natychmiastowa sprzedaż 10 000 USD w SPY kosztuje około 0.41 USD; ta sama transakcja w Western Digital kosztuje 8.2 USD. Wielkość transakcji pozostała taka sama; zmienił się tylko instrument.
Wszystkie cztery spółki wykazywały szersze notowania w pierwszej półgodzinie niż w południowym oknie kontrolnym — SPY 0.41 bps wobec 0.27, Western Digital 14.33 wobec 7.55, co oznacza premię otwarcia o 6.78 bp dla instrumentu o największym spreadzie. Drugą połową jest obrót: 3.98 milion aktualizacji NBBO dla SPY w godzinach sesji regularnej oraz 4.42 milion dla QQQ.
Stopy procentowe: krzywa niemal się nie zmieniła
Obligacje skarbowe odnotowały spokojny poniedziałek. Rentowności są wartościami z zamknięcia sesji, zmienionymi względem 26 czerwca.
Dokładny kod SQL dla każdej liczby
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
)Rentowność 10-letnich obligacji zamknęła się na poziomie 4.38%, bez zmian w ciągu dnia (0 bp), podczas gdy rentowność 3-miesięcznych weksli wzrosła o 4 bp do poziomu 3.87%. spread 2s10s — różnica między 10-letnimi a 2-letnimi obligacjami — zamknął się na poziomie 0.28 punktów procentowych (-3 bp): wartość pozostaje dodatnia, przy lekkim spłaszczeniu krzywej.
Kalendarz rynkowy
Dokładny kod SQL dla każdej liczby
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 spółek dywidendowych przeszło przez datę ex-dividend 29 czerwca — należy posiadać akcje przed datą ex-dividend, aby otrzymać wypłatę — jednak spośród 25 sprawdzonych, znanych marek, 0 odnotowano. Fala kończąca kwartał osiągnęła szczyt na poziomie 745 rekordów dnia July 1. Przeprowadzono 23 podziałów akcji, a na giełdzie zadebiutowało 0 IPO; debiuty zaplanowane na środę (BSP, ITG, LIME) są już uwzględnione w kalendarzu.
SEC zarejestrowało 6173 dokumentów z dnia 29 czerwca: 1473 uzupełnień wycen produktów strukturyzowanych (formularz 424B2) oraz 1277 raportów transakcji insiderów (Form 4), co znacznie przewyższa liczbę 231 raportów 8-K pojawiających się w nagłówkach. Nasz kanał informacyjny zawierał 170 artykułów od 3 wydawców; po wykluczeniu jednego symbolu o niejednoznacznym tagu (usuniętego z zapytania), najczęściej omawianą spółką była NVDA z liczbą 14 artykułów, przy 12 dla drugiego w kolejności podmiotu.
Uwagi do danych
Nietypowe dane są oznaczane, a nie pomijane — te cztery punkty wpływają na kluczowe wskaźniki.
- Koszyki sektorowe to zadeklarowana metoda. "Sektor" oznacza jedenaście ETF typu SPDR, ważonych kapitalizacją rynkową — te same nazwy w każdej sesji, a nie klasyfikacja dostawcy dla poszczególnych symboli.
- Wolumen dolarowy to przybliżenie minutowe — suma iloczynów ceny zamknięcia i wolumenu w ramach danej minuty; wartość zbliżona, ale nie identyczna z sumą wartości transakcji.
- Spready kwotowane nie uwzględniają nieprawidłowych ofert (jednostronnych lub niespójnych z NBBO); panel wykazuje liczbę odrzuconych ofert (1544 dla SPY). Mediana szerokości kwotowania to statystyka ofertowania, a nie koszt pojedynczej transakcji — zlecenia często są realizowane wewnątrz spreadu.
- Pojedyncza transakcja może zaburzyć ekstremum (high/low) w danej minucie. Wartość low dla QQQ w bara o 11:07 ET wynosi $709.58, podczas gdy żadna sąsiednia minuta nie spadła poniżej $715.09 — jedna transakcja wyniosła $5.51 poniżej aktualnej ceny rynkowej. Każde ekstremum powyżej zostało zweryfikowane względem sąsiednich barów; sesyjne low dla QQQ na poziomie $705.172 zostało potwierdzone.
Pełne uwagi do danych
- Zakres obligacji skarbowych jest szerszy niż schemat. Cztery reklamowane termy zapadalności (6-miesięczne, 3-letnie, 7-letnie i 20-letnie) nigdy nie były uzupełniane; krzywa pokazuje siedem istniejących terminów oraz wiersz 2s10s.
- Dane zawierają sprzeczność dotyczącą "reverse split" spółki Honeywell. Przesył zawiera 1 rekord HON z 29 czerwca: reverse split zamieniający 2 starych akcji na 1 nowych. HON zamknął się na $231.3 w piątek i $227.71 w poniedziałek — bez podwojenia. Nie zastosowaliśmy tej korekty.
- Liczba wiadomości pochodzi od jednego dostawcy, czyli 3 wydawców, których obsługujemy — nie są to "wszystkie wiadomości rynkowe".
- Dane na poziomie ticków — niespójne oferty, korekta phantom-volume oraz przycięty plik short-volume od FINRA (oraz powód, dla którego short volume to nie to samo co short interest) — znajdują się w szczegółowej analizie.
Sesja, zweryfikowana
Dokładny kod SQL dla każdej liczby
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'Słupki SPY trwają od 04:00 do 19:59 czasu nowojorskiego, obejmując dokładnie 390 słupków w oknie regulaminowym — jest to pełna sesja, zweryfikowana na podstawie danych transakcyjnych (zbiór danych kalendarza giełdowego zawiera wyłącznie nadchodzące zamknięcia). W tamty piątek, 3 lipca, nastąpiło pełne zamknięcie — 0 słupki SPY były rejestrowane przez cały dzień, natomiast 4 lipca przypadał w sobotę; tydzień obejmujący cztery sesje ma swoje podsumowanie.
FAQ
How did the stock market do on June 29, 2026?
An up day led by growth: QQQ closed 2.57% above Friday, SPY 1.62%, DIA 0.81% and IWM 0.45%, with 62.3% of tickers trading $1m or more finishing higher.
Was June 29, 2026 a big day for the Nasdaq?
Big, not exceptional: QQQ's 2.57% close-over-close move ranked 5 of the trailing month's 21 sessions by absolute size, against a monthly high of 4.76%.
Which sectors led on June 29, 2026?
Technology (2.52%) and consumer discretionary (2.37%) led the eleven SPDR sector baskets; materials was last at -1.82%, a spread of 4.34 percentage points. Utilities, staples, energy and real estate also closed lower.
What share of options volume on June 29, 2026 was 0DTE?
Same-day expiries were 35.8% of the 66.33 million contracts traded; the busiest single contract, a same-day SPY $741 call (788,133 contracts), finished out of the money.
Why do options trade before the stock market opens?
Only index options do. All 40,621 option prints before 9:30 a.m. ET on June 29 sat on cash-settled index roots (RUTW, SPX, SPXW, VIX, VIXW, XSP), which list extended global-trading-hours sessions; stock and ETF option prints in that window numbered 0.
Metodologia
- Znaki czasu są przechowywane w strefie UTC, a następnie konwertowane na czas nowojorski wewnątrz zapytań. „Close” oznacza ostatnią minutową świecę sesji regulaminowej, a nie wynik aukcji; zmiany dzienne porównują 29 czerwca z 26 czerwca, a sesja została zweryfikowana na podstawie zaobserwowanego zakresu świec.
- Ranking z ostatniego miesiąca opiera się na zmianach zamknięcia do zamknięcia w godzinach regulaminowych, z wyłączeniem pierwszej sesji (brak wcześniejszego zamknięcia w oknie czasowym). Terminy wygasania opcji są ponownie analizowane na podstawie tickerów OCC (kolumna wygaśnięcia w tabeli zawiera błędy).
- Każdy panel jest odczytywany raz, w momencie tworzenia, poprzez ograniczoną ścieżkę tylko do odczytu. Stan magazynu danych na dzień 13 lipca 2026 r.
Każdy panel to wynik zapytania zapisanego — wykres, tabela i SQL w jednym obiekcie. Można wkleić dowolny z nich do terminala Strasmore. Następna sesja: 30 czerwca.