Strasmore Research
Podsumowania rynkowe Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24

Podsumowanie rynku 30 czerwca 2026

Ostatnia sesja kwartału w liczbach. Wzrosty indeksów napędzane przez sektor technologii przy większości spadkowych notowań na rynku oraz dane z rynku opcji.

Tuesday, June 30, 2026 — the quarter's last session — was a technology-led up day on a mostly red market: QQQ gained 1.63% and SPY 0.73%, yet only 4 of the 10 S&P sector funds closed higher (3,349 liquid names up, 3,033 down). The prior session: the June 29 recap. Every number below is read from a stored query — expand any panel for the SQL.

Wyniki

Każda zmiana porównuje ostatnią minutową świecę z sesji regulacyjnej z 30 czerwca z sesją z poniedziałku, 29 czerwca.

ZapytanieSPY / QQQ / DIA / IWM — 30 czerwca vs zamknięcie 29 czerwca, sesja regulaminowa
Dokładny kod SQL dla każdej liczby
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.ticker

SPY otworzył na poziomie $741.29 i zamknął na poziomie $746.32, blisko swojego szczytu wynoszącego $748.02. Relacja 1.63% dla QQQ względem 0.12% dla DIA definiuje przebieg dnia: odnotowano wzrosty, blue chips niemal się nie zmieniły, a IWM 0.49%.

Zamknięcie kwartału

30 czerwca zakończyło ostatnią sesję 62 w drugim kwartale, a przebieg dnia odzwierciedlał trendy kwartalne.

ZapytanieKoniec Q2 2026: wyniki ETF każdego indeksu od otwarcia 1 kwietnia do zamknięcia 30 czerwca, sesja regulaminowa
Dokładny kod SQL dla każdej liczby
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 ASC

Od otwarcia 1 kwietnia do zamknięcia 30 czerwca: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08%. QQQ osiągnął najwyższe wyniki w kwartale oraz w dniu 30 czerwca, jednak w środkowej części zestawienia nastąpiła zmiana: SPY wyprzedził IWM w skali dnia, natomiast IWM wyprzedził SPY w skali kwartału. QQQ zamknął się wyżej w 38 z 62 sesji (podsumowanie Q2 przedstawia szczegółową analizę).

Czy dzień był nietypowy?

ZapytanieRanga zmiany SPY (open-to-close) względem ostatniego miesiąca sesji (ranga 1 = największa zmiana bezwzględna)
Dokładny kod SQL dla każdej liczby
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
)

Zmiana kursu od otwarcia do zamknięcia w ramach sesji — stanowiąca inne spojrzenie niż porównanie cen zamknięcia — w przypadku SPY wyniosła 0.68%, co plasuje ten wynik na 7 miejscu wśród 21 sesji pod względem wartości bezwzględnej. Indeks wykazywał stabilność, natomiast rejestr transakcji wskazywał na dużą zmienność.

Szerokość rynku: ograniczona przewaga wzrostowa

ZapytanieLiczba aprecjujących vs deprecjujących wśród tickerów z obrotem min. $1M dnia 30 czerwca
Dokładny kod SQL dla każdej liczby
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 > 0

3,349 wzrostów, 3,033 spadków, 88 bez zmian: 51.8% płynnych instrumentów odnotowało wzrosty — wynik jest niepewny przy wzroście indeksu o 1.63%. Filtr płynności wyklucza 5,055 z 11,525 tickerów o podwójnej sesji (obrót poniżej 1 million USD), które są tutaj uwzględnione.

Sektor po sektorze: gdzie faktycznie przepływały środki

Analiza pojedynczych spółek nie oddaje rzeczywistego rozkładu kapitału. Poniższe dziesięć funduszy reprezentuje poszczególne części indeksu S&P 500, a różnica między najlepszym a najsłabszym wynikiem obrazuje zmienność sesji.

ZapytanieDziesięć funduszy sektorowych S&P na 30 czerwca: zmiana vs zamknięcie z poniedziałku oraz dystans do lidera
Dokładny kod SQL dla każdej liczby
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 ASC

Sektor technologiczny (XLK) zyskał 2.69% i wyróżniał się na tle rynku: sektory przemysłowy 1.34%, surowcowy 0.36% oraz dóbr konsumpcyjnych 0.15% były jedynymi innymi obszarami z dodatnimi wynikami. Pozostałe sektory odnotowały spadki, począwszy od sektora finansowego (-0.17%), przez użyteczność publiczną (-1.48%) i dobra podstawowe (-1.53%), aż po nieruchomości na samym końcu przy -2%. Różnica między najlepszym a najgorszym wynikiem wyniosła 4.69 punktów procentowych, a 4 z 10 funduszy odnotowało wzrosty. Przy wzroście indeksu mniejszym niż jeden procent i czteropunktowej różnicy między sektorami, jeden sektor zdominował sesję.

Największe zmiany kursów w ciągu dnia, rynek ogólny

Wskaźnik szerokości rynku określa liczbę rosnących spółek; poniższe zestawienie pokazuje największe zmiany procentowe wśród podmiotów o obrotach przekraczających 10 milionów USD.

ZapytanieTop 5 aprecjujących i top 5 deprecjujących wśród spółek z obrotem $10M+ dnia 30 czerwca (wykluczono jeden powtarzający się symbol)
Dokładny kod SQL dla każdej liczby
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 ASC

Żaden z indeksów nie odzwierciedla trendu całego rynku. Liderem był JEM ze wzrostem na poziomie +256.76% przy obrotach rzędu 141 mln USD; SOC odnotował spadek o 55.89% przy obrotach 306 mln USD. ABVX wzrosło o 38.56% przy obrotach wynoszących 942 mln USD, co stanowi najwyższą wartość obrotów na obu parkietach; NVCT spadło o 35.62%, a UNCY o 39.09%. Kolumna uwzględniająca podziały akcji zapobiega błędom — podział w stosunku jeden do dziesięciu odwrotny podział generuje wzrost o 900% w nieskorygowanym zestawieniu — a każda spółka w tym zestawieniu posiada 0: realne transakcje.

Trzy wiersze zawierają powtórzone transakcje: CRCA (-35.16%) i CRCG (-35.19%) odnotowały spadki, podczas gdy CRCD wzrosło o 35.47% — oba wyniki są bliskie dwukrotności zmiany -17.53% dla poniższego podmiotu powiązanego z kryptowalutami: dźwigniętych instrumentów typu single-stock wrapper.

Najważniejsze wydarzenia dnia: półprzewodniki w kwartalnym zwrocie

Sześć spółek, jeden temat, bardzo różne wyniki — odnotowano jedynie współzależność ruchów i ich skalę; dane nie wskazują przyczyn.

ZapytanieSektor półprzewodników i pamięci masowych: zmiana vs zamknięcie z poniedziałku, zakres oraz wolumen w USD
Dokładny kod SQL dla każdej liczby
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 ticker

SanDisk wzrosło o 10.79%, AMD o 7.7%, Intel o 5.93%, TSMC o 4.86% — podczas gdy MU, z największym obrotem na rynku wynoszącym 37.41 mld USD, zamknęło się jedynie 0.52% wyżej, a Western Digital (-2.01%) nie brało udziału w trendzie. Stanowi to komponent sektora technologicznego o wartości 2.69% (wyniki MU za czerwiec, szczegółowo).

Trend spadkowy dotyczył podmiotów finansowych powiązanych z kryptowalutami, działając wbrew wzrostom na rynku akcji:

ZapytanieFinanse powiązane z kryptowalutami: zmiana vs zamknięcie z poniedziałku, zakres oraz wolumen w USD
Dokładny kod SQL dla każdej liczby
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 ticker

CRCL odnotowało -17.53%, osiągając minimum na poziomie 62.52 USD o godzinie 15:59 ET — w ostatniej minucie sesji — przy jednoczesnych spadkach MSTR -6.2%, COIN -3.61% oraz HOOD -1.53%. Zaobserwowano współzależność ruchów; przyczyna nie została określona.

Co zawierał serwis informacyjny

Podsumowanie, które nie rozstrzyga o przyczynach, powinno przedstawiać czytelnikowi faktycznie opublikowane tego dnia treści.

ZapytaniePrzegląd wiadomości z 30 czerwca: liczba artykułów i ostatni nagłówek dnia dla każdej spółki w zestawieniu
Dokładny kod SQL dla każdej liczby
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 ASC

Najczęściej omawianym podmiotem była spółka NVDA, o której powstało 21 artykułów — mimo że nie znalazła się ona wśród dzisiejszych liderów zmian. Ostatni tekst z sesji (16:28 ET, Investing.com) nosił tytuł "These Stocks Could Benefit as the Robotaxi Race Heats Up". MU odnotowało 7 wzmianek; jedyny artykuł dotyczący SanDisk (The Motley Fool) stanowił jedyny nagłówek w ciągu dnia wskazujący na konkretną zmianę kursu: "Why Sandisk Stock Is Skyrocketing Today".

Kluczowym wnioskiem jest rozbieżność: największy spadek dnia, największy wzrost oraz spółka powiązana z rynkiem krypto, która odnotowała najsilniejszy spadek, wygenerowały odpowiednio 0, 0 i 0 artykułów — po zero sztuk, przy łącznej liczbie 211 tekstów. Zakres relacji medialnych nie jest wyznacznikiem dynamiki cen.

Gdzie handlowano kapitałem

ZapytanieLiderzy wolumenu: top 6 według obrotu w USD, top 4 według liczby akcji (wykluczono jeden powtarzający się symbol do weryfikacji podmiotu)
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-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) DESC

Pod względem wartości w USD, MU zdominowało wszystkie inne podmioty, w tym fundusze indeksowe: 37.41 mld USD wobec 31.84 mld USD dla SPY — była to druga sesja z rzędu, podczas której wolumen MU przewyższył wolumen flagowego funduszu indeksowego (podsumowanie z poniedziałku zawiera informacje o pierwszej takiej sesji). Dane giełdowe wskazują jednak na coś innego: SOXS, trzykrotnie lewarowany fundusz ETF typu inverse na półprzewodniki (515.5 mln akcji), oraz dwie spółki o kursie poniżej jednego dolara, których wartość stanowi jedynie nieznaczący ułamek obrotów MU — wolumen można interpretować na dwa sposoby.

Jeden podmiot jest celowo pomijany w obu zestawieniach: jest to spółka z debiutem w czerwcu, której ticker należał wcześniej do innego, niezwiązanego podmiotu, przez co dostawcy danych oznaczają dwie różne jednostki tym samym skrótem (wykaz transakcji).

ZapytanieLiczba akcji w 30-minutowych przedziałach, sesja regulaminowa (miliardy)
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
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_time

2.05 mld akcji w pierwszej półgodzinie, dołek na poziomie 0.78 mld przy godzinie 13:30 oraz największy wolumen dnia — 2.69 mld — aż do zamknięcia sesji na koniec kwartału, kiedy to aukcja zamknięcia oraz przepływy związane z rebalansowaniem generują wyniki (szczegółowa analiza z 29 czerwca zawiera szczegóły).

The options tape

ZapytanieDane opcyjne: wolumen, wygaśnięcie tego samego dnia, skew put/call dla SPY wg moneyness, tydzień skorygowany o święto
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-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'

Options traded 61.95 million contracts across 10.06 million prints; calls took 57.3% of tape-wide volume, and 28% of it expired that Tuesday. SPY leaned the other way: 12.04 million contracts at a put/call ratio of 1.09 — more puts than calls, on a day the fund rose.

Sorting SPY's same-day expiries against its $746.32 close makes the skew concrete: 3.33 million out-of-the-money puts (strikes below the close) and 2.28 million out-of-the-money calls, against 1.77 million in-the-money calls and 0.63 million in-the-money puts — downside strikes that expired worthless were the busiest bucket of SPY's 0DTE day. Nothing with a Friday, July 3 expiry code printed at all (0 prints — the market is closed that Friday); the Thursday weekly carried 10.52 million.

ZapytanieSześć najaktywniejszych kontraktów opcyjnych 30 czerwca według liczby kontraktów
Dokładny kod SQL dla każdej liczby
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 ASC

The busiest contract anywhere was the same-day SPY $747 call — 821,361 contracts at an average premium of $0.641, finishing $0.68 above SPY's last regular bar, and worthless. The board behind it is the lesson: five of the six busiest contracts on the tape were same-day SPY strikes a dollar apart around the close (SPY $748 call next), each trading for cents. The exception, at 65.1% of the leader's volume, was KWEB $29 call expiring December 18, 2026, not a same-day contract: one six-month position among five afternoon lottery tickets.

Stopy procentowe: wzrost rentowności długoterminowej na koniec półrocza

ZapytanieKrzywa obligacji skarbowych, zamknięcie 30 czerwca vs 29 czerwca (tylko dostępne terminy zapadalności)
Dokładny kod SQL dla każdej liczby
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
)

Rentowność obligacji długoterminowych wzrosła w ostatnim dniu półrocza: 10-letnie wzrosły o 6 bp do 4.44%, 2-letnie o 4 bp do 4.14%, a spread 2s10s zwiększył się o 2 bp do 0.3 punktów. Rentowności długoterminowe rosły w sesji, podczas której najsłabszy sektor, nieruchomości (-2%), oraz trzeci najsłabszy, użyteczność publiczna (-1.48%), wykazują klasyczną wrażliwość na stopy procentowe: jest to zjawisko warte odnotowania, choć dane te nie pozwalają na udowodnienie związku przyczynowo-skutkowego (podsumowanie H1 kształtuje krzywą dla tego półrocza]).

Kalendarz rynkowy

ZapytanieKalendarz korporacyjny i przepływ informacji z 30 czerwca (przedstawiono lukę między raportowaniem a indeksem)
Dokładny kod SQL dla każdej liczby
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_session

704 spółek wypłaciło dywidendy po dacie ustalenia prawa do dywidendy w ostatnim dniu kwartału — fala pod koniec kwartału, ponieważ większość spółek z USA wypłaca dywidendy kwartalnie — przy 7 podziałach akcji i 2 nowych listingach (AACU — Ares Acquisition Corp III; OSPRU — Osprey Acquisition Corp. III). Kluczowym wskaźnikiem jakości danych jest kolumna zgłoszeń: indeks SEC zawiera 31 zgłoszeń za 30 czerwca — 0 formularzy insider Form 4, 0 formularzy 8-K — w porównaniu do 4439 zgłoszeń z poprzedniej sesji. W strumieniu danych występuje wzorzec końców miesiąca, opisany w notatce o luce na koniec miesiąca; każdy odczyt obejmujący ten dzień jest zaniżony do czasu uzupełnienia danych wstecznych.

Sesja, zweryfikowana

ZapytanieZakres sesji: obserwowany przedział czasowy na wykresie minutowym SPY
Dokładny kod SQL dla każdej liczby
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'

Słupki SPY trwają od 04:00 do 19:59 czasu nowojorskiego, obejmując dokładnie 390 słupków w oknie regulaminowym — pełna sesja, zweryfikowana na podstawie danych transakcyjnych (zbiór danych kalendarza giełdowego zawiera wyłącznie nadchodzące zamknięcia).

Podsumowanie sesji

Wynik 0.73% SPY, gdzie 51.8% spółek odnotowało wzrosty, 4 funduszy sektora 10 zakończyło na plusie, a rozpiętość między najlepszymi a najgorszymi wynikami wyniosła 4.69 punktów, nie oznacza szerokiego rajdu. Jest to wzrost jednego sektora maskujący się jako wzrost całego indeksu, przypadający na najbardziej intensywną półgodzinę w ramach aukcji na koniec kwartału. Zmiana indeksu stanowi średnią, a w tym przypadku za wzrost odpowiadał sektor technologii, podczas gdy większość sektorów odnotowała spadki: należy sprawdzić dyspersję przed wyciągnięciem wniosków na podstawie kierunku zmiany.

FAQ

Jak kształtowała się sytuacja na rynku akcji 30 czerwca 2026 roku?

Rynek zakończył sesję wzrostami: SPY zyskał 0.73%, a QQQ 1.63% w porównaniu do zamknięcia z 29 czerwca. Szerokość rynku była mniejsza — 51.8% płynnych spółek odnotowało wzrosty, a 4 funduszy sektorowych S&P zakończyło dzień na plusie 10.

Który sektor prowadził rynek 30 czerwca 2026 roku?

Technologia: XLK zyskał 2.69%, podczas gdy przemysł odnotował 1.34%, a nieruchomości -2% — różnica między najlepszym a najsłabszym sektorem wyniosła 4.69 punktów.

Które spółki odnotowały największe zmiany 30 czerwca 2026 roku?

Wśród podmiotów o obrotach przekraczających 10 milionów USD, największy wzrost odnotował JEM (+256.76%), natomiast największą stratę SOC (55.89%). Żadna ze spółek nie odnotowała zmiany wynikającej z podziału akcji; oba wyniki to rzeczywiste zmiany cen, a nie efekty zdarzeń korporacyjnych.

Jak kształtowała się sytuacja na rynku akcji w Q2 2026?

Od otwarcia 1 kwietnia do zamknięcia 30 czerwca, w ciągu 62 sesji: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08% — kwartał zdominowany przez spółki typu growth, zakończony dniem o podobnej charakterystyce.

Dlaczego wolumen obrotów jest tak wysoki w ostatniej półgodzinie?

W ostatniej półgodzinie obrócono 2.69 miliarda akcji, podczas gdy na otwarciu było to 2.05 miliarda. Aukcja zamknięcia ustala oficjalną cenę zamknięcia każdej spółki w ramach jednego transakcji, a fundusze indeksowe zawierają tam transakcje, aby dopasować się do tej ceny; rebalansowanie na koniec kwartału dodatkowo koncentruje przepływy kapitału.

Uwagi do danych i metodologia

  • Koszyki. Tablica sektorowa obejmuje dziesięć funduszy sektorowych SPDR wymienionych w panelu — jest to ten sam koszyk każdej sesji, dzięki czemu wskaźnik dyspersji pozwala na porównania między dniami. Tablice zmian wymagają obrotu na poziomie 10 milionów USD oraz ceny zamknięcia powyżej 1 USD, wykluczają wymienione powyżej listy symboli z powtórzonymi nazwami i zawierają kolumnę dotyczącą podziałów akcji.
  • Zastrzeżenia. Wolumen w USD jest przybliżeniem minutowym (cena zamknięcia × wolumen na słupek). Indeks z raportu z 30 czerwca jest niemal pusty (notatka o luce na koniec miesiąca wyjaśnia to). Liczba wiadomości pochodzi z jednego źródła dostawcy: brak artykułu w tym zestawieniu nie stanowi dowodu na to, że nigdzie nic nie zostało opublikowane.
  • Metodologia. Jedna sesja (1, zweryfikowana na podstawie obserwowanych słupków); znaczniki czasu są przechowywane w UTC i konwertowane na czas nowojorski w zapytaniach; „close” to ostatni regularny słupek minutowy, a nie cena z aukcji. Terminy wygasania opcji są ponownie analizowane na podstawie tickerów OCC (kolumna w tabeli jest błędna); moneyness jest mierzony względem ostatniego regularnego słupka SPY. Panele są uruchamiane raz, w momencie tworzenia, poprzez zabezpieczoną ścieżkę tylko do odczytu. Magazyn danych na dzień 13 lipca 2026 r.

Każdy panel jest wynikiem zapytania — wykres, tabela i SQL w jednym obiekcie. Można wkleić dowolny z nich do terminala Strasmore. Następna sesja: 1 lipca.