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

Podsumowanie rynku 2 lipca 2026

Rotacja przed świętem: wzrost szerokości rynku przy spadkach Nasdaq. Sektor technologiczny i pamięci pod presją, mimo wzrostu większości funduszy sektorowych.

Czwartek, 2 lipca 2026 r. — ostatnia sesja przed zamknięciem rynku z powodu święta Independence Day — był dniem rotacji, mimo nagłówków o wyprzedaży. QQQ odnotował wynik -1.71%, podczas gdy DIA wzrosło o 1.04%, a szerokość rynku była POZYTYWNA: 3398 płynnych walorów zyskało, w przeciwieństwie do 2758, a 54.6% transakcji zakończyło się wzrostem, mimo spadku indeksu spółek wzrostowych. Osiem z jedenastu funduszy sektorowych zamknęło się na plusie; wyprzedaż dotyczyła sektora technologicznego oraz kompleksu pamięci, który odnotował spadki dzień wcześniej.

Wyniki rynkowe

ZapytanieSPY / QQQ / DIA / IWM — 2 lipca vs zamknięcie 1 lipca, 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-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00'
    GROUP BY ticker
),
sess AS (
    SELECT ticker,
           argMin(open, window_start) AS day_open,
           argMax(close, window_start) AS day_close,
           max(high) AS day_high,
           min(low) AS day_low,
           round(toFloat64(sum(volume)) / 1e6, 1) AS shares_traded_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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

Głównym podsumowaniem dnia jest różnica między DIA na poziomie 1.04% a QQQ na poziomie -1.71% — spółki przemysłowe i spółki wzrostowe różnią się od siebie o niemal trzy punkty procentowe dziennej stopy zwrotu. SPY odnotował wynik pośredni na poziomie -0.12%; IWM zamknął się na poziomie -0.59%.

Czy dzień był nietypowy?

Dwa ujęcia w jednym zestawieniu: zmiana kursu SPY od otwarcia do zamknięcia oraz zmiana kursu QQQ od zamknięcia do zamknięcia, oba uszeregowane według wartości bezwzględnej względem poprzedniego miesiąca (ranga 1 = największa).

ZapytanieRanking SPY i QQQ względem ostatniego miesiąca sesji (ranga 1 = największa zmiana bezwzględna)
Dokładny kod SQL dla każdej liczby
WITH per_day AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct,
           argMax(toFloat64(close), window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ')
      AND window_start >= toDateTime('2026-06-02 00:00:00')
      AND window_start < toDateTime('2026-07-03 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY ticker, d
),
with_prev AS (
    SELECT ticker, d, oc_pct,
           lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) AS prev_close,
           (rth_close / lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct
    FROM per_day
)
SELECT
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-02'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-02') AND isFinite(cc_pct) AND prev_close > 0)) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ' AND isFinite(cc_pct) AND prev_close > 0) AS qqq_sessions_compared,
    toString(minIf(d, ticker = 'SPY')) AS first_session
FROM with_prev

Na poziomie indeksów nie. Zmiana SPY od otwarcia do zamknięcia -0.35% zajmuje 15 z 22 poprzednich sesji — dolna połowa. QQQ wykazał większą zmienność, ale wciąż nie ekstremalną: jego zmiana od zamknięcia do zamknięcia -1.71% zajmuje 9 z 21 sesji z określonym poprzednim zamknięciem, licząc od 2026-06-02 — średnio słaby dzień dla indeksu spółek wzrostowych. Duże wahania odnotowano w przypadku poszczególnych walorów.

Szerokość rynku: wzrosty na taśmie, spadki indeksów wzrostowych

ZapytanieLiczba podmiotów rosnących vs spadających wśród tickerów z obrotem min. $1M dnia 2 lipca
Dokładny kod SQL dla każdej liczby
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
       OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close > prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS advancers_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close < prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS decliners_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_fmt
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0

3,398 wzrostów, 2,758 spadków, 63 bez zmian — 54.6% płynnych instrumentów na taśmie zyskało, podczas gdy QQQ odnotował spadki. Indeksy ważone kapitalizacją oraz szerokość rynku o równej wadze dały odmienne wyniki; takie dni są powodem, dla których oba wskaźniki otrzymują ocenę panelową. Filtr pomija 5,317 z 11,536 płynnych tickerów o wartości poniżej 1 million USD.

Sektor po sektorze: gdzie odnotowano wzrosty

Szerokość rynku zależy od liczby spółek, ale nie określa ich rodzaju. Jedennaście funduszy sektorowych SPDR podzielono według branż, a różnica między najlepszym a najgorszym wynikiem stanowi dzienną dywersyfikację wyrażoną jedną liczbą.

ZapytanieJedenaście ETF-ów sektorowych SPDR — zamknięcie 2 lipca vs zamknięcie 1 lipca, sesja regulaminowa
Dokładny kod SQL dla każdej liczby
WITH per_etf AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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_close / prior_close - 1) * 100 - min((day_close / prior_close - 1) * 100) OVER (), 2) AS pts_above_worst_sector,
    day_dollar_bn
FROM per_etf
ORDER BY ticker

Sektor ochrony zdrowia (XLV) zajął pierwsze miejsce z wynikiem 2.63%, następnie użyteczność publiczna 2.23%, dobra podstawowe 2% oraz surowce 1.94%. Sektor technologiczny (XLK) zakończył na ostatnim miejscu z wynikiem -2.71%, będąc jedynym sektorem, którego wartość spadła o ponad jeden punkt; pozostałe fundusze z ujemnym wynikiem to dobra konsumpcyjne (-0.81%) oraz usługi komunikacyjne (-0.13%), natomiast pozostałe osiem odnotowało wzrosty. Rozpiętość między najlepszym a najgorszym wynikiem wyniosła: 5.34 punktów procentowych. Podział na wzrostowy DIA i spadkowy QQQ objął cały rynek, a nie tylko cztery spółki typu megacap — dlatego wzrostowa linia zaangażowania przy spadającym Nasdaq nie jest sprzeczna.

Główne wydarzenie dnia: wyprzedaż sektora pamięci, drugi dzień

Spadek kompleksu, który rozpoczął się w środę, pogłębił się w czwartek — istotna była skala oraz korelacja, a nie przyczyna.

ZapytanieSektor pamięci i pamięci masowej: zmiana vs zamknięcie ze środy, ramy czasowe zakresu i wolumen USD
Dokładny kod SQL dla każdej liczby
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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 odnotował -14.32%, Seagate -10.38%, Western Digital -9.92%, MU -5.57% — przy obrocie MU wynoszącym $51.4 billion, czyli około półtora raza więcej niż w przypadku SPY. MU oraz SanDisk osiągnęły minima późno (15:26, 15:26 ET), natomiast Seagate i Western Digital wcześniej (14:23, 13:59). Kontekst: środa oraz szczegółowa analiza MU.

Druga strona rotacji, w spółkach typu megacap:

ZapytanieRotacja megacap: zmiana vs zamknięcie ze środy, ramy czasowe zakresu i wolumen USD
Dokładny kod SQL dla każdej liczby
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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

AAPL wzrosło 4.75% w jednostajnym trendzie — minimum o 09:30 ET, maksimum o 15:57, trzy minuty przed zamknięciem — podczas gdy TSLA odnotowało odwrotny trend o -7.65%. MSFT zyskało 1.41%; NVDA zamknęło się na poziomie -1.55%. Ten sam indeks, przeciwstawne wyniki dziennie.

Gdzie handlowano kapitałem

ZapytanieLiderzy wolumenu: top 6 wg obrotu USD, top 4 wg liczby akcji (wyłączono jeden symbol z powtórzonym listingiem 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-07-02 13:30:00' AND window_start < '2026-07-02 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-07-02 13:30:00' AND window_start < '2026-07-02 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

MU z obrotem rzędu $51.4 miliarda dominowało na rynku przez czwartą sesję z rzędu (poniedziałek, wtorek, środa) względem $32.7 miliarda SPY, natomiast SanDisk z obrotem $26.57 miliarda wprowadził drugą spółkę z sektora pamięci do pierwszej czwórki. SOXS — ETF typu 3x-inverse na półprzewodniki — znalazł się na szczycie zestawienia akcji z wolumenem 748.2 mln: tanie akcje dominują pod względem liczby sztuk, a drogie pod względem wartości USD, natomiast wolumen relatywny porównuje wynik do normy danej spółki. Podstawa: 2 lipca, sesja regulaminowa, z wyłączeniem jednej listy z powtórzonym symbolem (potwierdzenia).

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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
GROUP BY et_time
ORDER BY et_time

2.13 miliarda akcji w pierwszej półgodzinie, minimum na poziomie 0.81 miliarda o godzinie 14:30, 2.3 miliarda do zamknięcia przed dniem wolnym — ostatni przedział był największy, ponieważ aukcja zamknięcia łączy oczekujące zlecenia w jeden kurs.

Rynek opcji: przesunięte terminowe serie tygodniowe

ZapytaniePodsumowanie opcji: wolumen, wygasanie w tym samym dniu, tydzień przesunięty przez święto oraz lipiec
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-07-02 00:00:00' AND sip_timestamp < '2026-07-03 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-07-02 13:30:00' AND window_start < '2026-07-02 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) = '260702') / 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, substring(ticker, length(ticker) - 14, 6) = '260710')) / 1e6, 2) AS jul10_weekly_contracts_m,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717')) / 1e6, 2) AS jul17_monthly_contracts_m,
    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_fmt,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close,
    round(spy_regular_close - top_contract.2, 2) AS spy_close_minus_strike
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

Na rynku opcji wyhandlowano 80.96 milionów kontraktów w ramach 13.15 milionów transakcji, a 47.4% tego wolumenu wygasło w ten sam czwartek. Żaden kontrakt z kodem wygaśnięcia 3 lipca nie odnotował transakcji w ciągu dnia (0 transakcji), zatem czwartek obejmował jednocześnie wygaśnięcie dzienne oraz przesuniętą serię tygodniową. Najbardziej aktywnym kontraktem była opcja sprzedaży SPY z ceną wykonania $740 wygasająca tego samego dnia — 540,403 kontraktów przy średniej premii $0.499, przy czym SPY zamknął się 4.8 dolarów powyżej ceny wykonania: opcja sprzedaży była poza pieniądzem (out of the money), co stanowiło opcję sprzedaży w zestawieniu z opcjami kupna, które dominowały w wtorek oraz środę. Opcje kupna nadal stanowiły 58.4% wolumenu; kolejna seria tygodniowa przyciągnęła 9.64 milionów kontraktów, natomiast lipcowa seria miesięczna wyniosła 8.82 milionów (mechanizmy wygasania).

Notowania: koszt handlu

Ceny informują o tym, co się wydarzyło; notowania mówią o koszcie transakcji. spread bid-ask stanowi opłatę za każdą transakcję w obie strony, wyrażoną w punktach bazowych ceny średniej (punkt bazowy to jedna setna procenta). Mierzymy go podczas każdej sesji, standardowej lub nietypowej — co sprawia, że stwierdzenie „spready gwałtownie wzrosły” jest weryfikowalne.

ZapytanieLiczba aktualizacji NBBO dla akcji: 2 lipca vs 1 lipca, z aktualizacjami dla konkretnych tickerów (miliony)
Dokładny kod SQL dla każdej liczby
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / 1e6, 2) AS jul2_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-01')) / 1e6, 2) AS jul1_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / countIf(toDate(sip_timestamp) = toDate('2026-07-01')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'SPY') / 1e6, 2) AS jul2_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'QQQ') / 1e6, 2) AS jul2_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'MU') / 1e6, 2) AS jul2_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

Krajowa najlepsza oferta kupna i sprzedaży — szczyt skonsolidowanego arkusza — została zaktualizowana 597.22 milionów razy 2 lipca, wobec 449.15 milionów 1 lipca: wzrost o 33% przed zamknięciem rynku. QQQ odnotowało 7.56 milionów, powyżej 5.42 milionów dla SPY; MU 1.01 milionów.

ZapytanieMediana spreadu ofertowego w punktach bazowych, sesja regulaminowa — ETF-y indeksowe, megacapy i spółki pamięciowe
Dokładny kod SQL dla każdej liczby
SELECT
    ticker,
    round(med_bps, 2) AS median_spread_bps,
    round(med_dollars * 100, 1) AS median_spread_cents,
    round(med_bps / min(med_bps) OVER (), 1) AS times_the_spy_spread,
    round(quote_updates / 1e6, 2) AS rth_updates_m,
    invalid_quotes_dropped
FROM (
    SELECT
        ticker,
        quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000,
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_bps,
        quantileExactIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price),
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_dollars,
        count() AS quote_updates,
        countIf(NOT (toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price))) AS invalid_quotes_dropped
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'TSLA', 'NVDA', 'MU', 'SNDK', 'WDC')
      AND sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
    GROUP BY ticker
)
ORDER BY median_spread_bps ASC

Mediana spreadu dla SPY wyniosła 0.27 punktów bazowych: około 2 centów przy wartości ETF wynoszącej $744.8. QQQ wyniosło 0.83 bps, NVDA 1.03. Największe koszty handlu odnotowano w przypadku spółek, których ceny spadały: MU 5.52 bps, SanDisk 10.4, Western Digital 10.7940x spreadu SPY. Transakcje w koszyku spółek z sektora pamięci kosztowały wielokrotność spreadu indeksu, jeszcze przed wystąpieniem wpływu na cenę. Nieprawidłowe notowania (jednostronne, krzyżujące się) są liczone dla każdej spółki z osobna, a nie sumowane.

ZapytanieCzy płynność była nietypowa? Mediana spreadu SPY w sesji regulaminowej vs ostatni miesiąc sesji
Dokładny kod SQL dla każdej liczby
WITH per_day AS (
    SELECT toDate(sip_timestamp) AS d,
           quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000) AS med_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-06-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
      AND toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)
    GROUP BY d
)
SELECT
    round(anyIf(med_bps, d = toDate('2026-07-02')), 3) AS jul2_median_spread_bps,
    round(quantileExact(0.5)(med_bps), 3) AS trailing_median_bps,
    round(anyIf(med_bps, d = toDate('2026-07-02')) - quantileExact(0.5)(med_bps), 3) AS jul2_minus_trailing_bps,
    arrayCount(x -> x > anyIf(med_bps, d = toDate('2026-07-02')), groupArrayIf(med_bps, d != toDate('2026-07-02'))) + 1 AS wider_rank,
    count() AS sessions_compared,
    round(max(med_bps), 3) AS widest_session_bps
FROM per_day

Dzień pod względem płynności był typowy, co potwierdzają dane: mediana spreadu SPY na poziomie 0.27 bps znajduje się 0 bps od mediany z ostatniego miesiąca (0.27 bps), co plasuje ten dzień w 11 z 22 sesji pod względem szerokości spreadu — daleko od największego rozwarstwienia w miesiącu wynoszącego 0.409 bps. Skoncentrowane spadki przy rosnących cenach nie obciążyły infrastruktury rynkowej.

Stopy procentowe: dane z 2 lipca są dostępne

ZapytanieZestawienie: dane z obligacji skarbowych z 2 lipca
Dokładny kod SQL dla każdej liczby
SELECT
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS jul2_rows,
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS jul1_rows

Dane dotyczące obligacji skarbowych pojawiają się z jednodniowym lub dwudniowym opóźnieniem względem bieżących notowań: w momencie pierwszej publikacji zamknięcie z 2 lipca nie zawierało żadnych wpisów, dlatego strona ta informowała o braku danych zamiast podawać przypuszczenia. Dane zostały już przetworzone — 1 wierszy dla 2 lipca, 1 dla 1 lipca — zatem poniższa tabela zawiera krzywą z danej sesji.

ZapytanieKrzywa sesji: 2 lipca vs 1 lipca (tylko uwzględnione terminy zapadalności)
Dokładny kod SQL dla każdej liczby
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul2_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-07-02') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS p
)

Na zamknięciu rentowność 10-letnich obligacji skarbowych wyniosła 4.49%, a spread 2s10s wyniósł 0.35 punktów.

Kalendarz rynkowy

ZapytanieKalendarz korporacyjny i przepływ informacji z 2 lipca w jednym wierszu (w tym 8 splitów wpływających na ruch screenera)
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-07-02'
    ) 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-07-02'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), countIf(split_to > split_from), countIf(split_to < split_from),
                arrayStringConcat(groupArray(concat(ticker, ' ', toString(split_to), '-for-', toString(split_from))), '; '))
        FROM global_markets.stocks_splits
        WHERE execution_date = '2026-07-02' AND ticker NOT IN ('SPCX')
    ) AS splits
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-02') AS ex_dividend_records,
    splits.1 AS splits_executed,
    splits.2 AS forward_splits,
    splits.3 AS reverse_splits,
    splits.4 AS split_records,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02') AS ipos_listed,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS sec_filings,
    (SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS insider_form4_filings,
    (SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS filings_8k,
    (SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
        SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02' 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 any(split_from) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_from,
    (SELECT any(split_to) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_to,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00') AS crwd_prev_close,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_day_close,
    (SELECT round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_dollar_m,
    (SELECT count() FROM (
        SELECT ticker FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date = '2026-07-02')
          AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
        GROUP BY ticker
    )) AS split_names_with_bars

Dla 319 spółek wyznaczono daty po dywidendzie, pojawiło się 2 nowych listingów (MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II), a indeks SEC zarejestrował 5200 zgłoszeń przed świętami — 2109 Form 4s, 258 8-Ks. Serwis informacyjny zawierał 201 artykułów od 3 wydawców (NVDA najczęściej cytowanych, 18 z nich).

Podziały akcji (splits) mogą zmylić osoby analizujące surowe dane zamknięcia. CRWD przeprowadziło podział typu 4 za 1, przez co nieskorygowane dane pokazują $772.45 w środę i $193.67 w czwartek — jest to pozorny spadek, który w rzeczywistości oznacza cztery nowe akcje za każdą starą. Nie była to jedyna taka sytuacja: przeprowadzono 8 podziałów, 5 typu forward i 3 typu reverse (wymienia je kolumna split_records), a podział odwrotny tworzy odwrotny efekt — surową cenę, która gwałtownie rośnie w ciągu jednej nocy. Tylko 2 tych spółek handlowało na naszej liście; obrót CRWD na poziomie $1473.51 milionów USD jest na tyle duży, że może zaburzyć wyniki, dlatego każdy filtr zmienności w tym serwisie go wyklucza.

Nadchodzące wydarzenia

Fakty kalendarzowe, a nie prognozy — dane dotyczące nadchodzących sesji.

ZapytaniePo święcie: kolejna sesja, daty ex-dividend i splity, najbliższe planowane zamknięcie oraz opóźnienie short-interest
Dokładny kod SQL dla każdej liczby
SELECT
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00') AS jul6_spy_regular_bars,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-06') AS exdiv_records_jul6,
    (SELECT arrayStringConcat(groupArray(ticker), ', ') FROM global_markets.stocks_dividends
     WHERE ex_dividend_date = '2026-07-06'
       AND ticker IN ('AAPL', 'MSFT', 'JPM', 'JNJ', 'XOM', 'KO', 'PG', 'WMT', 'CVX', 'HD')) AS household_exdivs_jul6,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS splits_jul6,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02') AS next_scheduled_closure,
    (SELECT any(name) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_name,
    (SELECT any(status) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_status,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS latest_si_settlement,
    (SELECT dateDiff('day', max(settlement_date), toDate('2026-07-02')) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS si_settlement_age_days

Poniedziałek 6 lipca rozpoczął się pełną sesją 390, co potwierdziły własne słupki świecowe. Odnotowano 118 rekordów po dywidendzie — jedna znana marka spośród dziesięciu badanych (JPM) — oraz 15 realizacji podziałów akcji. Następne planowane zamknięcie: Labor Day, 2026-09-07 (closed). Krótka sprzedaż była, jak zawsze, nieaktualna — najnowsze rozliczenie w rejestrach to 2026-06-30, 2 dni temu, a publikacja następuje z około dwutygodniowym opóźnieniem względem rozliczenia (dlaczego).

Sesja zweryfikowana — oraz piątek, którego nie było

ZapytaniePodsumowanie sesji: obserwowany zakres minutowy SPY oraz zamknięcie 3 lipca na tape
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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS day_sessions,
    (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
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-02 00:00:00' AND window_start < '2026-07-03 00:00:00'

2 lipca była to pełna sesja, a nie wczesne zamknięcie: słupki SPY obejmują 04:00 do 19:59 czasu nowojorskiego (wliczając słupki pre-market i after-hours), przy dokładnie 390 słupkach w regularnym oknie handlowym. Piątek 3 lipca odnotował 0 słupków SPY — pełne zamknięcie ze względu na Independence Day, który 4 lipca wypadał w sobotę. Czterosesyjna tydzień: podsumowanie tygodnia.

FAQ

Dlaczego Dow wzrósł, podczas gdy Nasdaq spadł 2 lipca 2026 roku?

Oba indeksy obejmują inne spółki: DIA zamknął się na poziomie 1.04%, a QQQ na -1.71%. Skład sektorowy wykazuje podobny podział — na czele znajdują się ochrona zdrowia, media oraz dobra podstawowe, natomiast technologia zajmuje ostatnie miejsce na poziomie -2.71%, co stanowi lukę wynoszącą 5.34 punktów między najlepszym a najgorszym sektorem.

Czy giełda była otwarta w piątek w tygodniu obchodów Independence Day?

Nie. Independence Day przypadał w sobotę, a giełdy obchodziły to święto poprzez całkowite zamknięcie w piątek po tej sesji: nasze dane wykazują 0 minutowych słupków SPY dla tego dnia.

Jak split akcji wpływa na cenę akcji?

Split mnoży liczbę akcji przez cztery i dzieli cenę przez cztery; wartość pozycji pozostaje niezmieniona. CRWD, 2 lipca: nieskorygowane zamknięcie na poziomie $772.45 w środę oraz $193.67 w czwartek — jest to pozorna obniżka ceny w każdym skanerze, który nie uwzględnia splitu.

Jak szerokie były spready bid-ask 2 lipca 2026 roku?

Mediana spreadu dla SPY wynosiła 0.27 punktów bazowych ceny średniej w godzinach sesji regularnej — stanowi to 11 z 22 poprzednich sesji pod względem szerokości, co jest typowe dla zwykłego dnia. Indywidualne spółki odnotowały szersze spready: MU 5.52 bps, WDC 10.79.

Uwagi do danych

  • Wolumen dolarowy to wskaźnik minutowy — cena zamknięcia × wolumen, zsumowane w ramach słupka.
  • Dane dotyczące obligacji skarbowych z lipca pojawiły się po pierwszej publikacji — oryginalna notatka informowała o ich braku poprzez liczbę wierszy; niniejsza rewizja zawiera dane, widoczny jest dowód księgowy.
  • Surowa zmiana ceny zamknięcia CRWD jest wynikiem podziału akcji — wykluczono z zestawień największych zmian.
Pełne uwagi do danych
  • Tablica sektorowa obejmuje jedenaście funduszy SPDR Select Sector (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY) — jest to stały, ujawniony koszyk, a nie pole sektorowe dostawcy.
  • Liczba transakcji w taśmie kwotowań jest grupowana według daty UTC znacznika czasu SIP; sesja letnia mieści się w obrębie jednego dnia UTC.
  • Jedna pozycja z czerwca dotycząca powtórzonego symbolu została wykluczona z rankingów (dowody); szczegółowa analiza ticków znajduje się w opracowaniach pogłębionych.

Metodologia

  • Okres obejmuje jedną sesję handlową (sesja 1, zweryfikowana na podstawie obserwowanych słupków). Znaczniki czasu są przechowywane w strefie UTC i konwertowane na czas nowojorski wewnątrz zapytań; „close” oznacza ostatni słupek minutowy sesji regulaminowej, a zmiana dnia polega na porównaniu 2 lipca z 1 lipca. Zamknięcie z 3 lipca zostało zweryfikowane na podstawie słupków, a nie założone.
  • Spready (ask minus bid) są podawane w punktach bazowych ceny średniej (mid-price), jako mediana aktualizacji NBBO w godzinach regulaminowych, na podstawie deterministycznego kwantyla. Liczby dziesiętne są konwertowane na typ float przed arytmetyką proporcji; terminy wygaśnięcia opcji są ponownie analizowane z tickerów OCC. Każdy panel jest odczytywany raz, w momencie tworzenia, poprzez ograniczoną ścieżkę tylko do odczytu.

Wykres, tabela i SQL stanowią jeden obiekt. Można wkleić dowolny panel do terminala Strasmore w celu własnej analizy. Poprzednia sesja: 1 lipca. Tydzień: tydzień świąteczny obejmujący cztery sesje.