Strasmore Research
Огляди ринку Matt ConnorВід Matt Connor · Оновлено 2026-07-24

Підсумки ринку за 29 червня 2026 року

Підсумки торгів за 29 червня 2026 року: динаміка індексів, зміна секторного спреду та аналіз 0DTE. Дізнайтеся детальні показники для прийняття рішень.

Понеділок, 29 червня 2026 року, став днем зростання ринку за умови вузького кола лідерів: QQQ зріс на 2.57%, SPY на 1.62%, 3968 ліквідних активів зросли на фоні 2327 активів, що впали — проте майже половина галузевих кошиків закрилася в червоній зоні. Кожне число зчитується із збереженого запиту; розгорніть будь-яку панель, щоб побачити SQL. Посегментний аналіз мікроструктури тієї ж сесії: глибокий аналіз мікроструктури за 29 червня.

Табло результатів

Кожне порівняння базується на останній хвилинній свічці регулярної сесії 29 червня та показниках п'ятниці, 26 червня.

ЗапитSPY / QQQ / DIA / IWM — 29 червня порівняно з закриттям 26 червня, основні сесії
Точний SQL-код для кожного числа
WITH friday AS (
    SELECT ticker, argMax(close, window_start) AS friday_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00'
    GROUP BY ticker
),
monday AS (
    SELECT ticker,
           argMin(open, window_start) AS monday_open,
           argMax(close, window_start) AS monday_close,
           max(high) AS day_high,
           min(low) AS day_low,
           round(toFloat64(sum(volume)) / 1e6, 1) AS shares_traded_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    GROUP BY ticker
)
SELECT
    m.ticker AS ticker,
    toFloat64(f.friday_close) AS jun26_close,
    toFloat64(m.monday_open) AS jun29_open,
    toFloat64(m.monday_close) AS jun29_close,
    round((toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) * 100, 2) AS pct_change,
    round(100 * (toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) / max(toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) OVER (), 1) AS pct_of_best_change,
    toFloat64(m.day_high) AS day_high,
    toFloat64(m.day_low) AS day_low,
    m.shares_traded_m AS shares_traded_m
FROM monday m
JOIN friday f ON m.ticker = f.ticker
ORDER BY m.ticker

SPY відкрився на рівні $736.525 порівняно з ціною закриття п'ятниці $729.09 і завершив торги на рівні $740.88, що нижче за денний максимум $741.56. Показник QQQ +2.57% порівняно з DIA +0.81% свідчить про день зростання та технологічного сектору; капіталізація компаній малої капіталізації IWM зросла на 0.45%.

Чи був цей день нетиповим?

Відсоткова зміна не має значення без порівняння. Ця панель порівнює показники за 29 червня з даними за попередній місяць за абсолютною величиною зміни ціни закриття.

ЗапитQQQ та SPY: рейтинг за 29 червня порівняно з попереднім місяцем сесій (ранг 1 = найбільше абсолютне зміщення)
Точний SQL-код для кожного числа
SELECT
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-06-29')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-06-29'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-06-29'))) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ') AS qqq_sessions_compared,
    round(max(if(ticker = 'QQQ', abs(cc_pct), 0)), 2) AS qqq_biggest_move_of_month_pct,
    countIf(ticker = 'QQQ' AND cc_pct > 0) AS qqq_up_sessions,
    round(anyIf(cc_pct, ticker = 'SPY' AND d = toDate('2026-06-29')), 2) AS spy_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'SPY' AND d = toDate('2026-06-29'))), groupArrayIf(abs(cc_pct), ticker = 'SPY' AND d != toDate('2026-06-29'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-06-29')), 2) AS spy_open_to_close_pct,
    concat(monthName(min(d)), ' ', toString(toDayOfMonth(min(d))), ', ', toString(toYear(min(d)))) AS first_session
FROM (
    SELECT ticker, d,
           (close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct,
           oc_pct
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS close_px,
               (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'QQQ')
          AND window_start >= toDateTime('2026-05-28 00:00:00')
          AND window_start < toDateTime('2026-06-30 00:00:00')
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker, d
    )
)
WHERE isFinite(cc_pct)

Значна зміна, але не рекордна: зміна QQQ на 2.57% займає 5 місць серед 21 сесій з May 29, 2026, у місяці, коли найбільша одноразова зміна склала 4.76%; показник SPY на 1.62% займає 4 місць серед 21. Важливо, звідки виникла зміна: зростання SPY від ціни відкриття до ціни закриття склало лише 0.59%, тому більша частина прибутку була сформована через нічний розрив (gap) до початку першої світової торгової сесії. QQQ закривався вище на 10 таких сесій: результат місяця подібний до підкидання монети.

Ширина ринку: наскільки масштабним був ралі?

Під «акціями, що зростають» (advancers) ми розуміємо ті тікери, ціна закриття яких у понеділок перевищила ціну закриття п'ятниці, серед активів з обсягом торгів не менше $1 мільйона. Цей фільтр виключає 5,108 від 11,475 тікерів, що демонстрували зміну ціни протягом двох сесій поспіль.

ЗапитКількість зростаючих та падаючих активів серед тикерів з обсягом торгів ≥ $1M за 29 червня
Точний SQL-код для кожного числа
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') AS monday_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
       OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
    GROUP BY ticker
)
SELECT
    countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000) AS advancers,
    countIf(monday_close < friday_close AND monday_dollar_volume >= 1000000) AS decliners,
    countIf(monday_close = friday_close AND monday_dollar_volume >= 1000000) AS unchanged,
    countIf(monday_dollar_volume >= 1000000) AS liquid_tickers,
    count() AS tickers_traded_both_sessions,
    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_label,
    count() - countIf(monday_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(monday_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_label,
    round(100.0 * countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000)
        / countIf(monday_dollar_volume >= 1000000), 1) AS advancer_pct
FROM per_ticker
WHERE friday_close > 0 AND monday_close > 0

3968 зростаючих, 2327 падаючих, 72 без змін: 62.3% ліквідних активів продемонстрували зростання — підрахунок здійснювався по кожній позиції окремо, що свідчить про широку ринкову динаміку.

Посекторний аналіз: ралі було менш масовим, ніж здавалося

Рівна кількість компаній — це один підхід; зважування за розміром компанії — інший. Одинадцять секторних ETF від SPDR є уособленням другого підходу — по одному кошику на кожен сектор S&P 500 з вагою за ринковою капіталізацією. Ці показники суттєво розходяться з даними про кількість акцій.

ЗапитОдинадцять секторних кошиків: 29 червня порівняно з закриттям 26 червня, основні сесії
Точний SQL-код для кожного числа
WITH per_etf AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
        maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') / 1e6, 0) AS dollar_volume_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
      AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
        OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
    GROUP BY ticker
)
SELECT
    sector,
    ticker,
    round((monday_close / friday_close - 1) * 100, 2) AS pct_change,
    round((day_high / day_low - 1) * 100, 2) AS range_pct,
    dollar_volume_m,
    round((monday_close / friday_close - 1) * 100 - min((monday_close / friday_close - 1) * 100) OVER (), 2) AS pct_above_worst_sector
FROM (
    SELECT *,
        multiIf(ticker = 'XLB', 'Materials',
                ticker = 'XLC', 'Communication services',
                ticker = 'XLE', 'Energy',
                ticker = 'XLF', 'Financials',
                ticker = 'XLI', 'Industrials',
                ticker = 'XLK', 'Technology',
                ticker = 'XLP', 'Consumer staples',
                ticker = 'XLRE', 'Real estate',
                ticker = 'XLU', 'Utilities',
                ticker = 'XLV', 'Health care',
                'Consumer discretionary') AS sector
    FROM per_etf
)
ORDER BY pct_change DESC

Технологічний сектор лідував з показником 2.52%, за ним у другому місці йшов сектор споживчих товарів не першої необхідності з 2.37%; матеріали закрилися на рівні -1.82%, а нерухомість — на -0.64%. Різниця між найкращим і найгіршим — дисперсія секторів за день — склала 4.34 відсоткових пунктів. Коли індекс зростав, сектори комунальних послуг, споживчих товарів першої необхідності, енергетики, нерухомості та матеріалів показали від'ємну динаміку. Прибуток індексного фонду може приховувати той факт, що за кількістю активів ралі було широким, а за вагою — вузьким.

Головна подія дня: пам'ять та накопичувачі

Чотири компанії демонстрували однакову ринкову динаміку, але з різними результатами — спостерігалася лише спільна рухність; дані не пояснюють причин.

ЗапитАктиви сектору memory/storage: зміна порівняно з закриттям п'ятниці та intraday діапазон
Точний SQL-код для кожного числа
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
        maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-06-29 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-29 00:00:00') AS high_bar
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
      AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
        OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(friday_close, 2) AS jun26_close,
    round(monday_close, 2) AS jun29_close,
    round((monday_close / friday_close - 1) * 100, 2) AS pct_chg,
    round(day_high, 2) AS day_high,
    formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
    round(day_low, 2) AS day_low,
    formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
    round((day_high / day_low - 1) * 100, 2) AS range_pct
FROM per_name
ORDER BY ticker

MU є класичним прикладом розриву між діапазоном цін та чистою зміною вартості: внутрішньоденний діапазон склав 12.22% — мінімум $1023.65 о 10:18 ET, максимум $1148.79 о 15:59 — проте ціна закриття була на 1.97% вище, ніж у п'ятницю. Western Digital зросла на 11.15%, а Seagate — на 8.17%; SanDisk закрилася на -1.9% у межах 10.33% — єдиний показник зниження в цьому групі активів. Ціна закриття не відображає волатильність, яку пережили власники акцій.

Where the money traded

By dollars traded, Micron (MU) towered over everything, index funds included: $58.47 billion against SPY's $33.97 billion. By share count, a different day.

ЗапитЛідери за обсягами: топ-6 за обсягом у $, топ-4 за кількістю акцій
Точний SQL-код для кожного числа
SELECT ticker, leaderboard, dollar_volume_bn, if(dollar_volume_bn < 1, dollar_volume_m, NULL) AS dollar_value_m, shares_m,
    round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
        / max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    GROUP BY ticker
    ORDER BY dollar_volume_bn DESC
    LIMIT 6
    UNION ALL
    SELECT
        'by shares traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESC

Share-count boards mislead: the share leaders were SOXS, a 3x-leveraged inverse semiconductor ETF (695.3 million shares), and INLF, a penny stock whose 353.8 million shares were worth about $23 million all day. Dollar volume shows where money moved; relative volume shows whether a name's activity is unusual for itself.

In 30-minute New York buckets, June 29 traces the classic volume "smile":

ЗапитОбсяг торгів акціями за 30-хвилинними інтервалами, основні сесії (млрд)
Точний SQL-код для кожного числа
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
    round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket,
    round(100 * (sum(toFloat64(volume)) / min(sum(toFloat64(volume))) OVER () - 1), 1) AS pct_above_trough
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
GROUP BY et_time
ORDER BY et_time

2.3 billion shares in the opening half hour, a 0.77 billion trough at 13:30, and the biggest bucket — 2.39 billion — in the closing half hour, where closing auctions and index-tracking flows concentrate.

Дані по опціонах

Обсяг торгів опціонами склав 66.33 мільйонів контрактів за 11.04 мільйонів операцій.

ЗапитДані за весь день опціонів: обсяг, 0DTE, тиждень з урахуванням вихідного дня
Точний SQL-код для кожного числа
WITH
    (
        SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
                any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
                sum(size), count(), round(avg(toFloat64(price)), 3))
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
        GROUP BY ticker
        ORDER BY sum(size) DESC
        LIMIT 1
    ) AS top_contract,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    ) AS spy_regular_close
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_pct_of_volume,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260629') / sum(size), 1) AS same_day_expiry_pct,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260702')) / 1e6, 2) AS thu_jul2_expiry_contracts_m,
    countIf(substring(ticker, length(ticker) - 14, 6) = '260703') AS fri_jul3_expiry_prints,
    countIf(sip_timestamp < '2026-06-29 13:30:00') AS premarket_prints,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(sip_timestamp < '2026-06-29 13:30:00'))), '[0-9]{1,3}'), ',')) AS premarket_prints_label,
    countIf(sip_timestamp < '2026-06-29 13:30:00'
        AND underlying_symbol NOT IN ('SPX', 'SPXW', 'XSP', 'RUTW', 'VIX', 'VIXW')) AS premarket_non_index_prints,
    arrayStringConcat(arraySort(groupUniqArrayIf(underlying_symbol, sip_timestamp < '2026-06-29 13:30:00')), ', ') AS premarket_underlyings,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
    top_contract.1 AS top_contract_underlying,
    top_contract.2 AS top_contract_strike,
    top_contract.3 AS top_contract_type,
    top_contract.4 AS top_contract_expiry,
    top_contract.5 AS top_contract_volume,
    reverse(arrayStringConcat(extractAll(reverse(toString(assumeNotNull(top_contract.5))), '[0-9]{1,3}'), ',')) AS top_contract_volume_label,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'

Кол-опціони склали 55.7% від загального обсягу контрактів, а 35.8% від усіх угод експірували того ж понеділка — акції з терміном експірації нуль днів (0DTE). Найактивнішим одноденним контрактом став SPY call зі страйком $741: 788,133 контрактів із середньою премією $0.474, при цьому ціна закриття SPY опинилася на 0.12 доларів нижче страйку — найбільш торгуваний опціон дня завершився поза грошима. Обсяг торгів SPY як базового активу склав 12.01 мільйонів контрактів; QQQ — 7.32 мільйонів.

Панель також фіксує 40,621 операцій з опціонами до відкриття ринку акцій о 9:30 — усі вони стосуються індексних опціонів з розрахунком готівкою (RUTW, SPX, SPXW, VIX, VIXW, XSP), тоді як за той же період було зафіксовано 0 операцій з опціонами на акції або ETF. Це не випадковість, а правило: сесії індексних опціонів тривають протягом усього глобального торгівельного дня, тоді як опціони на акції та ETF відкриваються разом із ринком акцій. Акції торгуються раніше — див. позабіржовий та післяринковий трейдинг — їхні опціони — ні.

Жоден контракт із датою експірації п'ятниця, липень 3, не був проведений протягом дня (0 операцій) — у ту п'ятницю ринок закритий, — тоді як обсяг торгів контрактами з експірацією у четвер, липень 2, склав 10.73 мільйонів.

Котирувальна стрічка: вартість торгів протягом дня

Кожна ціна на цій сторінці базується на потоці котирувань — National Best Bid and Offer, що безперервно оновлюється для кожної лістингової назви. Різниця між найкращою ціною купівлі та найкращою ціною продажу, bid-ask spread, — це те, що сплачує ордер за здійснення угоди.

ЗапитВартість виконання за спредом: оновлення NBBO та медіанна ширина котирувань, основні сесії
Точний SQL-код для кожного числа
SELECT
    ticker,
    round(count() / 1e6, 2) AS nbbo_updates_m,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00'), 2) AS open_30min_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS midday_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00')
        - quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS open_minus_midday_bps,
    countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid_quotes
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'MU', 'WDC')
  AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
GROUP BY ticker
ORDER BY ticker

Медіанна ширина котирувань SPY становила 0.41 базисних пунктів від середньої ціни, порівняно з 0.84 для QQQ, 4.6 для Micron та 8.2 для Western Digital — остання має найширший показник серед чотирьох. Один базисний пункт від ордера у $10,000 становить один долар, тому купівля та миттєвий продаж SPY на суму $10,000 за котируванням коштує приблизно $0.41; той самий цикл у Western Digital коштує $8.2. Розмір угоди не змінювався; змінилася лише назва активу.

У перші півгодини торгів усі чотири активи мали ширші котирування, ніж у період середини дня — SPY 0.41 bps проти 0.27, Western Digital 14.33 проти 7.55, що дає премію відкриття у 6.78 bp для активу з найширшим спредом. Друга складова — це обсяг оновлень: 3.98 мільйонів оновлень NBBO для SPY у регулярні години торгів та 4.42 мільйонів для QQQ.

Ставки: крива майже не змінилася

Понеділок для Treasury пройшов спокійно. Дохідність вказана за ціною закриття дня, порівняно з 26 червня.

ЗапитКрива Treasury, закриття 29 червня порівняно з 26 червня (тільки доступні терміни)
Точний SQL-код для кожного числа
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jun29_yield_pct,
    round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
    SELECT arrayJoin([
        ('1 month',  toFloat64(mon.yield_1_month),  toFloat64(fri.yield_1_month)),
        ('3 month',  toFloat64(mon.yield_3_month),  toFloat64(fri.yield_3_month)),
        ('1 year',   toFloat64(mon.yield_1_year),   toFloat64(fri.yield_1_year)),
        ('2 year',   toFloat64(mon.yield_2_year),   toFloat64(fri.yield_2_year)),
        ('5 year',   toFloat64(mon.yield_5_year),   toFloat64(fri.yield_5_year)),
        ('10 year',  toFloat64(mon.yield_10_year),  toFloat64(fri.yield_10_year)),
        ('30 year',  toFloat64(mon.yield_30_year),  toFloat64(fri.yield_30_year)),
        ('2s10s spread', toFloat64(mon.yield_10_year - mon.yield_2_year), toFloat64(fri.yield_10_year - fri.yield_2_year))
    ]) AS t
    FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-29') AS mon,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-26') AS fri
)

10-річні облігації закрилися на рівні 4.38%, без змін за день (0 bp), тоді як дохідність 3-місячних векселів зросла на 4 bp і склала 3.87%. 2s10s spread — різниця між 10-річними та 2-річними облігаціями — закрився на рівні 0.28 відсоткових пунктів (-3 bp): значення залишається позитивним, але крива стала дещо пласкішою.

Календар дня

ЗапитКорпоративний календар та інформаційні потоки за 29 червня в одному рядку
Точний SQL-код для кожного числа
WITH
    (
        SELECT (argMax(d, n), max(n))
        FROM (
            SELECT ex_dividend_date AS d, count() AS n
            FROM global_markets.stocks_dividends
            WHERE ex_dividend_date BETWEEN '2026-06-22' AND '2026-07-02'
            GROUP BY d
        )
    ) AS peak_ex_div,
    (
        SELECT (countIf(form_type = '424B2'), countIf(form_type = '4'), countIf(form_type = '8-K'), count())
        FROM global_markets.stocks_sec_edgar_index
        WHERE filing_date = '2026-06-29'
    ) AS filings,
    (
        SELECT (count(), uniqExact(publisher), countIf(has(tickers, 'NVDA')))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-29'
    ) AS news,
    (
        SELECT max(n)
        FROM (
            SELECT t, count() AS n
            FROM (
                SELECT arrayJoin(tickers) AS t
                FROM global_markets.stocks_news
                WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-29'
            )
            WHERE t NOT IN ('NVDA', 'SPCX')
            GROUP BY t
        )
    ) AS runner_up_articles,
    (
        SELECT (any(split_from), any(split_to), count())
        FROM global_markets.stocks_splits
        WHERE ticker = 'HON' AND execution_date = '2026-06-29'
    ) AS hon_split,
    (
        SELECT (
            round(toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')), 2),
            round(toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')), 2)
        )
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'HON'
          AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
            OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
    ) AS hon_close
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-29') AS ex_dividend_records_jun29,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-29'
        AND ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'GOOG', 'META', 'TSLA', 'JPM', 'JNJ',
                       'XOM', 'KO', 'PG', 'V', 'MA', 'HD', 'WMT', 'CVX', 'MRK', 'PEP',
                       'SPY', 'QQQ', 'DIA', 'IWM', 'VTI')) AS household_name_ex_dividends,
    length(['AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'GOOG', 'META', 'TSLA', 'JPM', 'JNJ',
            'XOM', 'KO', 'PG', 'V', 'MA', 'HD', 'WMT', 'CVX', 'MRK', 'PEP',
            'SPY', 'QQQ', 'DIA', 'IWM', 'VTI']) AS household_names_checked,
    concat(monthName(peak_ex_div.1), ' ', toString(toDayOfMonth(peak_ex_div.1))) AS busiest_ex_div_day_of_window,
    peak_ex_div.2 AS busiest_ex_div_day_records,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-06-29') AS splits_executed,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-29') AS ipos_listed_jun29,
    (SELECT arrayStringConcat(groupArray(ticker), ', ') FROM (
        SELECT ticker FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-01' ORDER BY ticker
    )) AS jul1_ipo_debuts,
    filings.4 AS sec_filings,
    filings.1 AS prospectus_424b2_filings,
    filings.2 AS insider_form4_filings,
    filings.3 AS filings_8k,
    news.1 AS news_articles,
    news.2 AS news_publishers,
    news.3 AS nvda_articles,
    runner_up_articles AS next_most_covered_articles,
    news.3 - runner_up_articles AS nvda_minus_next_most_covered,
    hon_split.3 AS hon_split_records,
    hon_split.1 AS hon_split_from,
    hon_split.2 AS hon_split_to,
    hon_close.1 AS hon_close_jun26,
    hon_close.2 AS hon_close_jun29

449 дивідендних дат перейшли в статус ex-dividend 29 червня — щоб отримати виплату, потрібно володіти акціями до дати виключення з реєстру дивідендів — проте серед 25 відомих брендів, які ми перевірили, з'явився лише 0. Хвиля завершення кварталу досягла піку у 745 записів July 1. Було проведено 23 сплітів та зареєстровано 0 IPO; дебюти середи (BSP, ITG, LIME) вже заплановані в календарі.

SEC зафіксувала 6173 подань від 29 червня: 1473 додатків до ціноутворення структурованих продуктів (форма 424B2) та 1277 звітів про інсайдерську торгівлю (Form 4) значно перевищують кількість 231 форм 8-K, які стають головними новинами. Наша стрічка новин містила 170 статей від 3 видавців; якщо не враховувати один символ з неоднозначним тегом, який був виключений із запиту, найпопулярнішою назвою була NVDA з 14 статтями проти 12 у другого лідера.

Примітки до даних

Аномальні дані отримують примітку, а не просто ігноруються — ці чотири пункти впливають на основні показники.

  • Секторні кошики є визначеним методом. "Сектор" означає одинадцять ETF секторів SPDR з вагою за ринковою капіталізацією — ті самі назви щосесії, а не класифікація постачальника за кожним тікером.
  • Обсяг у доларах — це хвилинний показник — ціна закриття, помножена на обсяг, що підсумовується за кожну хвилинну свічку; це близьке значення, але не ідентичне сумі значень фактичних угод.
  • Котирувані спреди не включають невалідні котирування (односторонні або перехресні записи NBBO); панель підраховує кількість відкинутих записів (1544 для SPY). Медіанна ширина котирування є статистичним показником котирувань, а не витратами на кожну угоду — ордери часто виконуються всередині котирування.
  • Окреме значення угоди може змінити максимум або мінімум хвилинної свічки. Хвилинна свічка QQQ о 11:07 ET має мінімум $709.58, хоча жодна сусідня свічка не опускалася нижче $715.09 — одна угода була на $5.51 нижче за поточний ринок. Кожен максимум і мінімум вище були перевірені на відповідність сусіднім свічкам; денний мінімум QQQ на рівні $705.172 пройшов перевірку.
Повні примітки до даних
  • Охоплення Treasury менше, ніж у схемі. Чотири заявлені терміни погашення (6 місяців, 3, 7 та 20 років) ніколи не заповнювалися; крива відображає сім існуючих термінів, а також рядок 2s10s.
  • Дані суперечать "зворотному спліту" Honeywell. Потік містить запис 1 HON від 29 червня: зворотний спліт, що конвертує 2 старих акцій у 1 нових. HON закрився на $231.3 у п'ятницю та на $227.71 у понеділок — подвоєння відсутнє. Ми не застосовували цю корекцію.
  • Кількість новин — це стрічка одного постачальника, 3 видавців, яких ми використовуємо, а не "всі ринкові новини".
  • Дані на рівні тіків — перехресні котирування, корекція фантомного обсягу, усічені файли коротких обсягів FINRA (і чому короткий обсяг — це не короткий інтерес) — дивіться у детальний аналіз.

Сесія, підтверджена

ЗапитПеревірка сесії: спостережуваний хвилинний діапазон SPY та закриття п'ятниці
Точний SQL-код для кожного числа
WITH
    (
        SELECT (
            round(toFloat64(minIf(low, formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '11:07')), 2),
            round(toFloat64(minIf(low, formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') IN ('11:04', '11:05', '11:06', '11:08', '11:09', '11:10'))), 2)
        )
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'QQQ' AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    ) AS qqq_lone
SELECT
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-03 00:00:00' AND window_start < '2026-07-04 00:00:00') AS jul3_spy_bars,
    formatDateTime(min(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS first_spy_bar_et,
    formatDateTime(max(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS last_spy_bar_et,
    count() AS spy_minute_bars,
    countIf(window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00') AS regular_session_bars,
    qqq_lone.1 AS qqq_1107_lone_low,
    qqq_lone.2 AS qqq_1107_adjacent_bars_low,
    round(qqq_lone.2 - qqq_lone.1, 2) AS qqq_lone_print_below_adjacent
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 00:00:00' AND window_start < '2026-06-30 00:00:00'

Бари SPY тривають з 04:00 по 19:59 за нью-йоркським часом і містять рівно 390 барів у межах регулярної торгової сесії — повна сесія, підтверджена за даними котирувань (календар біржі містить лише майбутні дати закриття). Та п'ятниця, липня 3 року, була повною торговою сесією — 0 бари SPY формувалися протягом усього дня, а липня 4 року припало на суботу; тиждень із чотирьох сесій має свій підсумок.

FAQ

Як відреагував фондовий ринок 29 червня 2026 року?

Ринок продемонстрував зростання завдяки акціям зростання: QQQ закрився на 2.57% вище рівня п'ятниці, SPY на 1.62%, DIA на 0.81% та IWM на 0.45%; при цьому 62.3% тикерів з обсягом торгів від $1m і вище завершили день зростанням.

Чи був 29 червня 2026 року значущим днем для Nasdaq?

Значущим, але не винятковим: зміна QQQ на 2.57% порівняно з попереднім днем за абсолютною величиною зайняла 5 місце серед 21 торгових сесій за останній місяць, при місячному максимумі 4.76%.

Які сектори стали лідерами 29 червня 2026 року?

Технології (2.52%) та споживчі товари непервочергового попиту (2.37%) стали лідерами серед одинадцяти секторних кошиків SPDR; матеріали посіли останнє місце з показником -1.82%, що на 4.34 відсоткових пунктів менше за лідера. Комунальні послуги, товари повсякденного попиту, енергетика та нерухомість також закрилися зниженням.

Яку частку в обсязі торгів опціонами 29 червня 2026 року склали 0DTE?

Опціони з експірацією в той же день склали 35.8% від 66.33 мільйонів укладених контрактів; найбільш активний окремий контракт — call-опціон на SPY з ціною виконання $741 (788,133 контрактів) — завершив торги поза грошима.

Чому опціони торгуються до відкриття фондового ринку?

Тільки індексні опціони. Усі 40,621 операцій з опціонами до 9:30 ET 29 червня червня базувалися на індексних активах з розрахунком готівкою (RUTW, SPX, SPXW, VIX, VIXW, XSP), які включають сесії з подовженими годинами глобальних торгів; кількість операцій з опціонами на акції та ETF у цей період склала 0.

Методологія

  • Часові мітки зберігаються в UTC і конвертуються у нью-йоркський час під час виконання запитів. "Close" — це остання хвилинна свічка регулярної сесії, а не ціна аукціону; порівняння денних показників проводиться за червень 29 та червень 26; тривалість сесії була перевірена за спостережуваним діапазоном свічок.
  • Ранжування за минулим місяцем базується на змінах ціни закриття (close-over-close) у регулярні години; перша сесія виключена (немає попереднього закриття в межах вікна). Дати експірації опціонів повторно розраховані за тикером OCC (власний стовпець експірації в таблиці містить помилки).
  • Кожна панель зчитується один раз під час підготовки матеріалу через обмежений доступ лише для читання. Стан сховища станом на липень 13, 2026.

Кожна панель є результатом збереженого запиту — графік, таблиця та SQL в одному об'єкті. Ви можете скопіювати будь-яку з них у термінал Strasmore. Наступна сесія: червень 30.