podsumowanie rynku tydzień 20 lipca 2026
Pierwszy pełny tydzień po lipcowym wygaśnięciu opcji. Indeksy, sektory, tygodniowa szerokość rynku oraz przepływ kapitału. Wszystkie dane pochodzą z zapisanych zapytań.
Tydzień 20 lipca 2026 r. był pierwszym pełnym tygodniem po lipcowej miesięcznej wygaśnięciu opcji i obejmował 5 sesje bez żadnej przerwy. Zmiana SPY w relacji zamknięcie do zamknięcia w tym tygodniu wyniosła -0.59%, a mierzona od otwarcia do zamknięcia na tle poprzedzającego roku tygodni zajęła 43 z 53. Każda poniższa liczba pochodzi z zapisanego zapytania, a każde okno jest przypisane do konkretnych dat, więc ponowne uruchomienie SQL zwraca te same wartości.
Tydzień na tablicy
Zmiany tygodniowe liczone są od zamknięcia w piątek 17 lipca do zamknięcia w piątek 24 lipca. Ostatnia kolumna zawiera poprzedni tydzień, więc oba zestawienia znajdują się obok siebie. Wiersze ułożone są alfabetycznie.
Dokładny kod SQL dla każdej liczby
SELECT ticker,
round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00'), 2) AS prior_week_close,
round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'), 2) AS week_close,
round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00')
/ argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00') - 1) * 100, 2) AS week_change_pct,
round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
/ argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') - 1) * 100, 2) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND ((window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')
OR (window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
GROUP BY ticker
ORDER BY tickerW tygodniu: DIA zmienił się o -0.38%, IWM o -0.98%, QQQ o -1.59%, a SPY o -0.59%, zamykając się na poziomie 738.85 USD. Odczyty z poprzedniego tygodnia, w tej samej kolejności alfabetycznej, wynosiły odpowiednio -0.95%, -0.63%, -4.17% i -1.55%. To, jak bardzo cztery indeksy różnią się między sobą, jest pierwszą rzeczą, jaką mierzy tablica wyników – i nie zawsze jest to różnica niewielka.
Tydzień na tle roku wstecz
Wartość jednego tygodnia niewiele znaczy bez rozkładu, który za nią stoi. Panel ten przelicza każdy miniony tydzień według identycznej logiki, od otwarcia do zamknięcia w trakcie sesji regularnej, i umieszcza bieżący tydzień w tym rozkładzie.
Dokładny kod SQL dla każdej liczby
SELECT round(anyIf(ret, wk = toDate('2026-07-20')), 2) AS week_open_to_close_pct,
arrayCount(x -> x > anyIf(ret, wk = toDate('2026-07-20')), groupArrayIf(ret, wk != toDate('2026-07-20'))) + 1 AS rank_best,
count() AS weeks_compared,
toString(min(wk)) AS first_week,
anyIf(sessions_measured, wk = toDate('2026-07-20')) AS sessions_this_week
FROM (
SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_measured,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-07-21 00:00:00')
AND window_start < toDateTime('2026-07-25 00:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY wk
HAVING sessions_measured >= 3
)Mierząc w ten sposób, SPY zwrócił -1.1% i zajął 43 pozycję spośród 53 tygodni sięgających 2025-07-21. Należy zwrócić uwagę na różnicę definicyjną: wartość ta zaczyna się od pierwszego otwarcia sesji regularnej w danym tygodniu, natomiast wynik na tablicy powyżej zaczyna się od zamknięcia poprzedniego tygodnia. Oba wskaźniki są oznaczone w każdym miejscu, w którym występują.
Pięć sesji, jeden trend
Dokładny kod SQL dla każdej liczby
SELECT toString(d) AS date,
round(c, 2) AS spy_close,
round((c / prev_c - 1) * 100, 2) AS change_pct,
round(shares_m, 1) AS spy_shares_m
FROM (
SELECT d, c, shares_m,
lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c,
toFloat64(sum(volume)) / 1e6 AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)
)
WHERE d >= '2026-07-20'
ORDER BY dateSesja po sesji, zmiana SPY wyniosła -0.15% w poniedziałek, 0.84% we wtorek, -0.12% w środę, -1.22% w czwartek i 0.08% w piątek, kończąc na poziomie 738.85 USD przy wolumenie 40.1 mln akcji. Wartość poniedziałkowa liczona jest względem zamknięcia z 17 lipca, czyli sesji bezpośrednio poprzedzającej ten okres.
Szerokość rynku, sesja po sesji
Poziom indeksu to jedna liczba. Szerokość rynku pokazuje, ile spółek podążało w tym samym kierunku – i to ona decyduje, czy zielony tydzień był szeroki, czy wąski.
Dokładny kod SQL dla każdej liczby
SELECT toString(d) AS date, advancers, decliners, unchanged, measured_names
FROM (
SELECT d,
countIf(c > prev_c) AS advancers,
countIf(c < prev_c) AS decliners,
countIf(c = prev_c) AS unchanged,
count() AS measured_names
FROM (
SELECT d, c, dv,
lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c,
sum(toFloat64(close) * toFloat64(volume)) AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)
WHERE d >= '2026-07-20' AND prev_c > 0 AND dv >= 5000000
GROUP BY d
)
ORDER BY dateW poniedziałek wzrosły 1268 z 3945 mierzonych spółek, a spadły 2632. Do piątku proporcje wynosiły 2273 wzrostów wobec 1635 spadków, na 3950. Spółki, które nie miały zamknięcia po obu stronach sesji, są wykluczane – dlatego liczebność próby nieznacznie zmienia się z dnia na dzień.
To samo pytanie zadane jednorazowo, dla całego tygodnia:
Dokładny kod SQL dla każdej liczby
SELECT
countIf(cw > cp AND liquid) AS advancers,
countIf(cw < cp AND liquid) AS decliners,
countIf(cw = cp AND liquid) AS unchanged,
countIf(liquid) AS measured_names,
countIf(NOT liquid) AS dropped_by_liquidity_filter,
round(100.0 * countIf(cw > cp AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
SELECT ticker, cp, cw, dv >= 5000000 AS liquid
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING cp > 0 AND cw > 0
)
)Spośród 6100 spółek, które przekroczyły pięciomilionowy próg obrotu w godzinach regularnej sesji, 2437 zamknęło się powyżej zamknięcia z 17 lipca, a 3630 poniżej – co daje udział spółek rosnących na poziomie 40%. Filtr płynności odrzucił dodatkowe 5099 spółek, które w ciągu tygodnia nie osiągnęły tego progu obrotu. Są one tu uwzględnione, a nie po cichu pominięte.
Tablica wyników sektorowych
Jedenaście ETF-ów sektorowych SPDR, od zamknięcia 17 lipca do zamknięcia 24 lipca, uszeregowanych od najlepszego do najgorszego.
Dokładny kod SQL dla każdej liczby
SELECT sector, week_pct, round(max(week_pct) OVER () - week_pct, 2) AS points_behind_best
FROM (
SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
round((cw / cp - 1) * 100, 2) AS week_pct
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw
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-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
GROUP BY ticker
HAVING cp > 0 AND cw > 0
)
)
ORDER BY week_pct DESCEnergy znalazł się na szczycie tabeli z wynikiem 3.33%. Consumer Discretionary uplasował się na dole z wynikiem -5.2%, 8.53 punktu procentowego za nim. Ta różnica to tygodniowa dyspersja sektorowa i warto ją odczytać samodzielnie: tydzień, w którym wszystkie jedenaście sektorów mieści się w granicach jednego punktu od siebie, to zupełnie inny rynek niż taki, w którym spread sięga dwucyfrowych wartości.
Gdzie poszły dolary
Dokładny kod SQL dla każdej liczby
SELECT ticker, week_dollar_bn, round(100 * week_dollar_bn / max(week_dollar_bn) OVER (), 1) AS pct_of_leader
FROM (
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS week_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY week_dollar_bn DESC
LIMIT 8
)
ORDER BY week_dollar_bn DESCMU wygenerowało 158.1 miliardów dolarów obrotu w godzinach regularnej sesji w ciągu pięciu sesji, wyprzedzając SPY z 133.9 miliardami oraz QQQ z 101.5 miliardami. Ósmy w zestawieniu, AAPL, osiągnął 34.5% obrotu lidera. Rekordy obrotu pokazują, gdzie rynek spędził tydzień na dyskusji – nie muszą być zgodne z kierunkiem ceny. Wersja tego wskaźnika dla poszczególnych spółek to wolumen względny.
Najwięksi ruchy tygodnia
Podziały akcji zmieniają notowania, ale nie wartość: odwrotny podział generuje sztuczny, czterocyfrowy wzrost, a zwykły podział – równie duży, sztuczny spadek. Miniony tydzień przyniósł 25 odwrotnych podziałów i 11 zwykłych podziałów. Oba zestawienia poniżej pomijają spółki, których podział został zrealizowany między zamknięciem 17 lipca a zamknięciem 24 lipca – czyli w dokładnie tym przedziale, dla którego mierzona jest zmiana. Oba wymagają również pięciu milionów dolarów obrotu w sesji regularnej.
Dokładny kod SQL dla każdej liczby
SELECT ticker, board, week_pct, week_dollar_m, sessions_traded,
round(100 * week_dollar_m / max(week_dollar_m) OVER (), 1) AS pct_of_dollar_max
FROM (
SELECT 'gainers' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker NOT IN ('SPCX')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING cp > 0 AND cw > 0 AND dv >= 5000000
)
ORDER BY week_pct DESC
LIMIT 10
UNION ALL
SELECT 'decliners' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker NOT IN ('SPCX')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING cp > 0 AND cw > 0 AND dv >= 5000000
)
ORDER BY week_pct ASC
LIMIT 10
)
ORDER BY board DESC, abs(week_pct) DESCAby znaleźć się w którymś z zestawień, potrzebny był realny ruch. Najłagodniejszy wzrost w zestawieniu wyniósł 92.3%, a najłagodniejszy spadek to -47.8%. Na skrajnych pozycjach STAK zmienił się o 383.7% przy obrocie 251.6 milionów dolarów, a LBGJ o -98.8% przy obrocie 47.7 milionów. Ten spadek jest bliski całej kwotowanej wartości spółki, dlatego zestawienie zawiera własne potwierdzenie: LBGJ odnotował sesje regularne na 5 z pięciu sesji, a w okresie między dwoma zamknięciami, które zestawienie uwzględnia, nie przeprowadzono wobec niego podziału.
Spread kwotowany, sesja po sesji
Cena jest najważniejsza. Koszt realizacji transakcji to spread kwotowany, mierzony tu na SPY oddzielnie dla każdej sesji, bezpośrednio z surowego taśmy NBBO, a nie z żadnego podsumowania.
Dokładny kod SQL dla każdej liczby
SELECT toString(toDate(sip_timestamp)) AS date,
round(quantileExactIf(0.5)(
10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2),
bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= '2026-07-20 13:30:00'
AND sip_timestamp < '2026-07-24 20:00:00'
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY toDate(sip_timestamp)
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY toDate(sip_timestamp)Mediana spreadu kwotowanego SPY wyniosła 0.27 punktu bazowego śródokresu w poniedziałek i 0.27 w piątek, przy 3.89 milionie i 4.4 milionie aktualizacji NBBO. Dwie ostatnie kolumny to ujawnienie, a nie wynik: 0 kwotowań jednostronnych i 1084 kwotowań skrzyżowanych zostało policzonych z poniedziałkowej mediany zamiast cichego odrzucenia. Kwotowanie skrzyżowane, bid powyżej ask, to zwykły artefakt skonsolidowanego kanału złożonego z wielu platform w rozdzielczości nanosekundowej.
Tydzień opcji po miesięcznym wygaśnięciu
Lipcowe wygaśnięcie miesięczne przypadło na piątek przed rozpoczęciem tego tygodnia, więc każdy kontrakt handlowany w tych pięciu sesjach jest jego pozostałością. Termin wygaśnięcia wyznacza rytm, według którego grają traderzy dnia bieżącego.
Dokładny kod SQL dla każdej liczby
SELECT toString(toDate(sip_timestamp)) AS date,
round(toFloat64(sum(size)) / 1e6, 1) AS contracts_m,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = formatDateTime(toDate(sip_timestamp), '%y%m%d')) / sum(size), 1) AS pct_0dte,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 8, 1) = 'C') / sum(size), 1) AS pct_call,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260724') / sum(size), 1) AS pct_expiring_jul24
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-20 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00'
GROUP BY toDate(sip_timestamp)
ORDER BY toDate(sip_timestamp)Wolumen kontraktów wyniósł 64 miliona w poniedziałek i 71.1 miliona w piątek. Udział kontraktów wygasających w tej samej sesji, w której są handlowane, wyniósł 40.2% w poniedziałek wobec 49% w piątek, czyli w sesji wygaśnięcia tego tygodnia. Call'e stanowiły 53.5% piątkowego wolumenu kontraktów. Przyciąganie tego piątku było widoczne już od sesji otwarcia: 15.1% poniedziałkowego wolumenu znajdowało się już w kontraktach z datą wygaśnięcia na ten dzień.
Stopy procentowe w ciągu tygodnia
Dokładny kod SQL dla każdej liczby
SELECT toString(date) AS date,
round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp,
round((toFloat64(yield_10_year) - (SELECT toFloat64(any(yield_10_year)) FROM global_markets.treasury_yields WHERE date = '2026-07-17')) * 100) AS chg_10y_from_prior_close_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-17' AND date <= '2026-07-24'
ORDER BY dateMierząc od odczytu z 17 lipca, rentowność dziesięciolatki zmieniła się o 16 punktu bazowego do 4.71% w ostatnim dostępnym odczycie, przy czym dwulatka wyniosła 4.37%, a trzydziestolatka 5.17%. Spread dwu–dziesięcioletni zakończył serię na poziomie 34 punktu bazowego. Plik obligacji skarbowych jest opóźniony o około jedną sesję względem notowań, dlatego panel ten zawiera 5 odczytów, każdy z datą w tabeli.
Krótkie pozycje: pliki dzienne
FINRA publikuje dzienny plik z wolumenem krótkiej sprzedaży. Wolumen krótkiej sprzedaży to dzienny przepływ brutto, a nie pozycja, a pliki te czasami docierają obcięte, dlatego przed podaniem jakiegokolwiek wskaźnika na ich podstawie mierzy się kompletność danych.
Dokładny kod SQL dla każdej liczby
SELECT date, tickers_on_file, short_shares_bn,
round(100.0 * tickers_on_file / max(tickers_on_file) OVER (), 1) AS pct_of_fullest_file
FROM (
SELECT toString(date) AS date,
uniqExact(ticker) AS tickers_on_file,
round(sum(short_shares) / 1e9, 2) AS short_shares_bn
FROM (
SELECT date, ticker, max(short_volume) AS short_shares
FROM global_markets.stocks_short_volume
WHERE date >= '2026-07-20' AND date <= '2026-07-24'
GROUP BY date, ticker
)
GROUP BY date
)
ORDER BY date5 plików dziennych jest dostępnych na ten tydzień. Pierwszy zawiera 15098 tickerów i 4.71 miliarda akcji oznaczonych jako krótkie; ostatni zawiera 15062 tickerów, czyli 99.7% liczby tickerów z najpełniejszego pliku. Każde twierdzenie o wolumenie krótkiej sprzedaży dla konkretnego papieru, pochodzące z pliku znacząco odbiegającego objętością od sąsiednich, pozostaje niemożliwe do zweryfikowania do czasu ponownego przesłania tego pliku.
Kalendarz stojący za tygodniem
Dokładny kod SQL dla każdej liczby
SELECT toString(filing_date) AS date,
count() AS filings,
countIf(form_type = '4') AS form4,
countIf(form_type = '8-K') AS form8k,
countIf(form_type = '424B2') AS f424b2
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24'
GROUP BY filing_date
ORDER BY datePierwsza sesja w zbiorze przyniosła 3012 zgłoszeń, z czego 632 to raporty insiderów Formularz 4, a 166 to formularze 8-K. Ostatnia sesja przyniosła 3814 zgłoszeń, w tym 644 formularzy 4 i 223 formularzy 8-K. Dla 5 sesji w tygodniu dostępny jest dzienny indeks EDGAR; indeks ten pojawia się według własnego harmonogramu, który czasami pozostaje w tyle za taśmą.
Dokładny kod SQL dla każdej liczby
SELECT
(SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filings_week,
(SELECT uniqExact(filing_date) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filing_days_on_file,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS ex_dividends_week,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS household_ex_dividends_week,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS reverse_splits_week,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS forward_splits_week,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= '2026-07-20' AND listing_date <= '2026-07-24') AS listings_week,
(SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_week,
(SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_publishers_weekPozostała dokumentacja tygodnia: 17106 zgłoszeń SEC w ciągu 5 indeksowanych dni, 592 rekordów ex-dividend, z czego 1 pochodzi od dziesięciu znanych spółek sprawdzanych przez ten panel, 25 odwrotnych i 11 zwykłych podziałów akcji, 4 nowych notowań oraz 1704 artykułów od 2 wydawców. Ta ostatnia para mierzy uwagę jednego kanału informacyjnego, a nie globalne media.
Sesje, zweryfikowane
Dokładny kod SQL dla każdej liczby
WITH spy AS (
SELECT d, c, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS p
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)
)
SELECT
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_in_week,
toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,
toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session,
count() AS regular_bars_in_week,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-20' AND date <= '2026-07-24') AS holiday_rows_in_week,
(SELECT countIf(c > p) FROM spy WHERE d >= '2026-07-20') AS up_sessions,
(SELECT countIf(c < p) FROM spy WHERE d >= '2026-07-20') AS down_sessions,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 11995 sesji, 2026-07-20 do 2026-07-24, z 0 wierszami świątecznymi w dowolnym miejscu okna. SPY wygenerował 1950 minutowych słupków sesji regularnej w ich obrębie. 2 sesji zamknęło się powyżej poprzedniego zamknięcia, a 3 poniżej. Kolejne planowane zamknięcie przypada na Labor Day w dniu 2026-09-07.
Na tapecie
W nadchodzącym tygodniu, z naszych własnych tabel:
Dokładny kod SQL dla każdej liczby
SELECT
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-27' AND date <= '2026-07-31' AND status != 'open') AS closures_next_week,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS ex_dividends_next_week,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS household_ex_div_next_week,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-27' AND execution_date <= '2026-07-31') AS splits_next_week,
(SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) FROM global_markets.options_trades WHERE sip_timestamp >= '2026-07-24 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00') AS jul31_expiry_pct_of_friday_volume,
(SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-24') AS latest_short_interest_settlementTabela świąteczna pokazuje 0 zamknięć w następnym tygodniu. W jego trakcie przypada 368 rekordów ex-dividend, w tym 0 z zestawu gospodarstw domowych, obok 15 zaplanowanych splitów. Z piątkowego wolumenu opcji 14.2% znajdowało się już w kontraktach wygasających w następny piątek. Najnowsza data rozliczenia krótkiej sprzedaży w plikach to 2026-07-15, plik publikowany z opóźnieniem na tyle długim, że ma własne wyjaśnienie.
FAQ
Jak zachowywał się rynek akcji w tygodniu 20 lipca 2026 r.?
SPY zmienił się o -0.59% w ujęciu zamknięcie do zamknięcia od 17 do 24 lipca, przy QQQ na -1.59%, DIA na -0.38% i IWM na -0.98%. Wśród płynnych spółek 2437 wzrosło, a 3630 spadło.
Który sektor przewodził w tygodniu 20 lipca 2026 r.?
Energy, z wynikiem 3.33%. Najsłabszym z jedenastu sektorowych ETF-ów SPDR był Consumer Discretionary z wynikiem -5.2%, 8.53 punktu procentowego za liderem.
Ile sesji handlowych było w tygodniu 20 lipca 2026 r.?
5, od 2026-07-20 do 2026-07-24, z 0 wierszami świątecznymi w oknie. Następne planowane zamknięcie to Labor Day.
Który ticker miał największy wolumen obrotu w dolarach w tygodniu 20 lipca 2026 r.?
MU, z 158.1 miliarda dolarów obrotu w godzinach regularnej sesji, przed SPY z 133.9 miliarda.
Uwagi dotyczące danych
Wszystkie przechowywane znaczniki czasu są w UTC; sesja regularna trwa 13:30-20:00 UTC, a tygodnie liczone są od zamknięcia sesji regularnej 17 lipca do 24 lipca. Każdy panel porównujący zamknięcie z zamknięciem odczytuje ostatni minutowy słupek sesji regularnej po każdej stronie porównania, więc notowanie po godzinach nigdy nie może ustanowić tygodniowego zamknięcia. Ranking roczny wstecz wykorzystuje tygodniowe stopy zwrotu od otwarcia do zamknięcia, więc nie będzie zgodny z zestawieniem zamknięcie do zamknięcia; obie definicje są oznaczone tam, gdzie występują. Tygodniowy zasięg oraz tablice zmian stosują filtr obrotu w sesji regularnej wynoszący pięć milionów dolarów, a zasięg podaje liczbę spółek odrzuconych przez ten filtr. Tablice zmian wykluczają spółki, których split został zrealizowany po zamknięciu 17 lipca i do 24 lipca, czyli dokładnie w okresie, za który mierzona jest zmiana; obejmuje to split nadany w weekend pomiędzy tymi dniami, jak również split nadany podczas sesji; nie wykluczają one funduszy ETF z dźwignią i odwróconych, które mogą dominować w tablicy w tygodniu kierunkowym. Dół tablicy spadków może znajdować się blisko całkowitej utraty wartości kwotowanej w danym tygodniu, a tablica ta podaje, w ilu z pięciu sesji dana spółka była notowana. Panel spreadu dla SPY zlicza jednostronne i skrzyżowane kwotowania, zamiast je cicho pomijać, a mediana jest obliczana z pozostałych ważnych kwotowań. Plik obligacji skarbowych jest opóźniony o około jedną sesję względem taśmy, a dzienny indeks EDGAR pojawia się według własnego harmonogramu, dlatego panele stóp procentowych i zgłoszeń podają, ile dni faktycznie obejmują. Żaden indeks zmienności implikowanej nie pojawia się tutaj: te serie nie są licencjonowane w tym magazynie danych, więc zmienność odczytywana jest z taśmy poprzez zakresy, udział opcji o tym samym terminie wygaśnięcia oraz zachowanie kwotowań.
Metodologia
- Źródło danych rynkowych: skonsolidowany tape.
delayed_stocks_minute_aggsdla cen i wolumenów,cache_stocks_quotesdla panelu NBBO,options_tradesdla tygodnia opcyjnego. - Zamknięcie: ostatni minutowy słupek regularnej sesji, nigdy zakładany wydruk o 16:00 ani wydruk z sesji wydłużonej.
- Sesje: zweryfikowane na podstawie tabeli świąt oraz zaobserwowanych słupków, nigdy zakładane na podstawie kalendarza.
- Obsługa stref czasowych: klauzule WHERE używają surowych literałów UTC, a
toTimeZonepojawia się wyłącznie w listach SELECT dla etykiet czasu wschodniego. - Miejsca dziesiętne: kolumny z ceną, wielkością i wolumenem są rzutowane na Float64 przed jakimkolwiek dzieleniem lub mnożeniem.
- Deterministyczne agregaty: dokładne kwantyle w całym tekście, a każde stwierdzenie o kolejności lub znaku w prozie jest zakodowane jako granica poprawności.
- Data bieżąca magazynu danych: 26 lipca 2026 r.
Odnośniki: poprzednie wydanie tego cyklu tygodniowego, czym jest spread bid-ask, kiedy wygasają opcje, krótka sprzedaż a krótki wolumen oraz spread dwu- i dziesięcioletnich obligacji skarbowych.
Każde z powyższych zapytań działa bez zmian na terminalu Strasmore, jeśli chcesz przekierować okno na inny tydzień.