Strasmore Research
Обзор рынка Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-03

Итоги торгов 29 июня 2026 года в цифрах

Обзор рыночной сессии за двадцать девятое июня две тысячи двадцать шестого года. Анализ роста индексов QQQ и SPY, отраслевой динамики, объемов торгов и ключевых показателей ликвидности.

Понедельник, 29 июня 2026 года, стал днем роста, ведомого технологическим сектором при узком составе лидеров: QQQ прибавил 2.57%, SPY — 1.62%. Ликвидные бумаги в количестве 3968 показали рост против 2327 подешевевших, однако почти половина отраслевых корзин закрылась в минусе. Каждое число получено из сохраненного запроса; разверните любую панель для просмотра SQL. Тиковый анализ этой же сессии: микроструктурный анализ 29 июня.

Табло

Каждое изменение сравнивает минутный бар последней регулярной сессии 29 июня с показателями пятницы, 26 июня.

ЗапросSPY / QQQ / DIA / IWM: 29 июня относительно закрытия 26 июня, основная торговая сессия
ТикерЗакрытие 26.06Открытие 29.06Закрытие 29.06Изм. (%)% от лучшего изм.Максимум дняМинимум дняОбъем (млн)
DIA517.5520.63521.680.8131.5522.975519.45.5
IWM297.61298.11298.950.4517.5299.16294.6821.7
QQQ705.84713.99723.952.57100724.58705.17238.5
SPY729.09736.525740.881.6263741.56732.0946
Точный 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 = максимальное абсолютное изменение)
QQQ изм. закр./закр. (%)QQQ ранг абс. движенияQQQ сравн. сессийQQQ макс. изм. за мес. (%)QQQ сессий ростаSPY изм. закр./закр. (%)SPY ранг абс. движенияSPY сравн. сессийSPY изм. откр./закр. (%)Первая сессия
2.575214.76101.624210.59May 29, 2026
Точный 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%, поэтому основная часть прироста пришлась на гэп при открытии, еще до того, как был зафиксирован первый бар основной торговой сессии. QQQ закрывался ростом в 10 из этих сессий: месяц с вероятностью исхода «орел или решка».

Ширина рынка: насколько масштабным было ралли?

Растущей бумагой считается тикер, цена закрытия которого в понедельник оказалась выше пятничной, среди инструментов с объемом торгов не менее одного миллиона долларов; этот фильтр отсеивает 5,108 из 11,475 тикеров, торговавшихся в обе сессии.

ЗапросРастущие и падающие акции с объемом торгов от $1 млн за 29 июня
РастущиеПадающиеБез изм.Ликвидные тикерыТикеры в обеих сессияхТикеры в обеих сессиях (опис.)Отсеяно по ликвидностиОтсеяно по ликвидности (опис.)% растущих
396823277263671147511,47551085,10862.3
Точный 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 июня, основная торговая сессия
СекторТикерИзм. (%)Диапазон (%)Объем в $ (млн)% выше худшего сектора
TechnologyXLK2.523.9120754.34
Consumer discretionaryXLY2.372.1711424.2
Communication servicesXLC1.660.786693.48
IndustrialsXLI0.891.2312312.72
FinancialsXLF0.280.6415932.1
Health careXLV0.260.7618972.08
UtilitiesXLU-0.321.187591.5
Consumer staplesXLP-0.381.237641.44
EnergyXLE-0.521.5110981.3
Real estateXLRE-0.641.452171.18
MaterialsXLB-1.822.286260
Точный 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 процентных пункта. При этом секторы коммунальных услуг, товаров первой необходимости, энергетики, недвижимости и материалов завершили день в «красной зоне», несмотря на рост индекса. Широкий охват по количеству наименований и узкий по весу — вот что может скрывать доходность индексного фонда.

Главное событие дня: память и системы хранения данных

Четыре компании торговались в рамках одной темы с совершенно разными результатами, различаясь лишь по степени корреляции и амплитуде; данные не объясняют причин этого.

ЗапросСектор памяти/хранения данных: изменение относительно закрытия пятницы и внутридневной диапазон
ТикерЗакрытие 26.06Закрытие 29.06Изм. (%)Максимум дняМакс. дня (ET)Минимум дняМин. дня (ET)Диапазон (%)
MU1122.9211451.971148.7915:591023.6510:1812.22
SNDK2091.082051.29-1.92090.7109:30189510:1810.33
STX895.27968.48.17987.5714:48880.0110:0012.22
WDC586.32651.711.15652.9815:5959009:3110.67
Точный 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 по восточному времени, максимум $1148.79 в 15:59, при этом закрытие произошло на 1.97% выше уровня пятницы. Акции Western Digital выросли на 11.15%, а Seagate — на 8.17%; SanDisk закрылся с понижением на -1.9% в рамках диапазона 10.33%, став единственной бумагой в группе, завершившей день в минусе. Итоговая цена закрытия скрывает то, что пришлось пережить держателям акций в течение дня.

Где торговались деньги

По объему торгов в долларовом выражении Micron (MU) превзошла всех, включая индексные фонды: $58.47 млрд против $33.97 млрд у SPY. Если оценивать по количеству акций, картина иная.

ЗапросЛидеры по объему: топ-6 по денежному обороту, топ-4 по количеству акций
ТикерТаблица лидеровОбъем ($ млрд)Объем ($ млн)Акции (млн)% от лидера
MUby dollars traded58.47None53.5100
SPYby dollars traded33.97None4658.1
QQQby dollars traded27.67None38.547.3
NVDAby dollars traded21.66None111.837
TSLAby dollars traded20.66None51.435.3
SNDKby dollars traded19.73None1033.7
SOXSby shares traded2.84None695.3100
INLFby shares traded0.0223353.850.9
TZAby shares traded1.3None330.747.6
BITOby shares traded2.03None250.736.1
Точный 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
Запустите сами

Данные по количеству акций вводят в заблуждение: лидерами стали SOXS, трехкратно кредитный инверсный ETF на полупроводники (695.3 млн акций), и INLF — «грошовая» акция, чьи 353.8 млн акций стоили в сумме около $23 млн за весь день. Долларовый объем показывает, куда перемещался капитал; относительный объем показывает, является ли активность по инструменту необычной для него самого.

В 30-минутных интервалах торговой сессии в Нью-Йорке 29 июня прослеживается классическая «улыбка» объема:

ЗапросОбъем торгов по 30-минутным интервалам, основная торговая сессия (млрд)
Время (ET)Акции (млрд)% от макс. группы% от минимума
09:302.396.3199.9
10:001.979.5147.6
10:301.4259.485.1
11:001.2351.660.6
11:301.146.243.7
12:000.9138.218.8
12:300.8535.410.4
13:000.9238.620.2
13:300.7732.10
14:000.8234.26.4
14:300.8234.57.4
15:001.054436.9
15:302.39100211.4
Точный 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 млрд акций в первые полчаса, минимум в 0.77 млрд в 13:30 и самый крупный объем, 2.39 млрд, в последние полчаса, когда концентрируются аукционы закрытия и потоки индексных фондов.

Лента опционов

Объем торгов опционами составил 66.33 миллиона контрактов в рамках 11.04 миллиона сделок.

ЗапросИтоги торгового дня по опционам: объем, 0DTE, неделя с учетом праздничного сдвига
Сделки опц. (млн)Контракты (млн)% Call в объеме% эксп. сегодняКонтр. эксп. 2 июля (млн)Сделки эксп. 3 июляСделки премаркетаМетка сделок премаркетаСделки премаркета (не индекс)Базовые активы премаркетаКонтракты SPY (млн)Контракты QQQ (млн)Базовый активСтрайкТип контрактаЭкспирацияОбъем контрактаМетка объема контрактаСр. цена контрактаСтрайк минус закрытие SPY
11.0466.3355.735.810.7304062140,6210RUTW, SPX, SPXW, VIX, VIXW, XSP12.017.32SPY741C2026-06-29788133788,1330.4740.12
Точный 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'
Запустите сами

На долю call-опционов пришлось 55.7% от общего объема контрактов, при этом 35.8% всех проторгованных инструментов истекали в тот же понедельник — это доля опционов с нулевым сроком до экспирации (0DTE). Самым активным отдельным контрактом стал call-опцион на SPY с ценой исполнения $741, истекающий в тот же день: 788,133 контрактов при средней премии в $0.474. Поскольку SPY закрылся на 0.12 доллара ниже цены исполнения, самый торгуемый опцион дня завершил сессию вне денег (out of the money). Объем торгов базовым активом SPY составил 12.01 миллиона контрактов, QQQ — 7.32 миллиона.

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

В течение дня не было зафиксировано ни одной сделки по контрактам с кодом экспирации в пятницу, третье июля (0 сделок), так как в эту пятницу рынок закрыт, в то время как по контрактам с экспирацией в четверг, второе июля, объем торгов составил 10.73 миллиона.

Лента котировок: во что обошлась торговля за день

Каждая цена на этой странице поступает из потока котировок, National Best Bid and Offer, который непрерывно транслируется для каждого листингового инструмента. Разрыв между лучшей ценой покупки и лучшей ценой продажи, спред bid-ask, — это то, что платит заявка за исполнение.

ЗапросСтоимость исполнения по спреду: обновления NBBO и медианная ширина котировок, основная торговая сессия
ТикерОбновления NBBO (млн)Медианный спред (б.п.)Спред 30 мин. (б.п.)Дневной спред (б.п.)Открытие минус полдень (б.п.)Отклоненные неверные котировки
MU0.754.66.554.112.44414
QQQ4.420.840.980.550.42629
SPY3.980.410.410.270.141544
WDC0.128.214.337.556.7843
Точный 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, что является самым широким спредом из четырех. Один базисный пункт от заявки на десять тысяч долларов равен одному доллару, поэтому покупка и мгновенная продажа SPY на десять тысяч долларов по котировкам стоит около 0.41 долларов; такой же полный цикл сделки по Western Digital стоит 8.2 долларов. Размер сделки не изменился; изменился инструмент.

Все четыре актива котировались с более широким спредом в первые полчаса торгов, чем в контрольный период в середине дня: SPY 0.41 б.п. против 0.27, Western Digital 14.33 против 7.55, что дает премию за открытие в 6.78 б.п. для самого широкого инструмента. Оборот — это вторая составляющая: 3.98 миллиона обновлений NBBO по SPY в основную торговую сессию, 4.42 миллиона по QQQ.

Ставки: кривая почти не изменилась

Понедельник на рынке казначейских облигаций прошел спокойно. Доходности указаны по ценам закрытия дня в сравнении с двадцать шестым июня.

ЗапросКривая доходности казначейских облигаций: закрытие 29 июня относительно 26 июня (только представленные сроки погашения)
Точка кривойДоходность 29 июня (%)Изменение за день (б.п.)
1 month3.711
3 month3.874
1 year3.973
2 year4.13
5 year4.142
10 year4.380
30 year4.86-1
2s10s spread0.28-3
Точный 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
)
Запустите сами

Десятилетние облигации закрылись на уровне 4.38%, не изменившись за день (0 б.п.), в то время как трехмесячные векселя прибавили 4 б.п. до 3.87%. Спред 2s10s, разница между доходностью десятилетних и двухлетних бумаг, закрылся на отметке 0.28 процентного пункта (-3 б.п.): спред остается положительным, но немного сузился.

Календарь событий за день

ЗапросКорпоративный календарь и информационный поток за 29 июня
Реестры экс-дивидендов 29 июняЭкс-дивиденды известных компанийПроверенные известные компанииПиковый день экс-дивидендовЗаписи в пиковый деньИсполненные сплитыIPO 29 июняДебюты IPO 1 июляОтчеты SECОтчеты 424B2Отчеты инсайдеров (Form 4)Отчеты 8-KНовостные статьиИздатели новостейСтатьи о NVDAСтатьи о других компанияхNVDA минус остальныеЗаписи сплита HONСплит HON (от)Сплит HON (до)Закрытие HON 26 июняЗакрытие HON 29 июня
449025July 1746230BSP, ITG, LIME617314731277231170314122121231.3227.71
Точный 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 дивидендных реестров закрылись 29 июня. Владейте акциями до наступления даты ex-dividend, иначе выплата не будет вам начислена. Среди 25 известных компаний, которые мы проверили, 0 попали в этот список. Пик активности пришелся на конец квартала: 746 записей 29 июня (July 1). Было проведено 23 дробление акций и состоялось 0 IPO, при этом дебюты среды (BSP, ITG, LIME) уже внесены в календарь.

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

Примечания к данным

Аномальные данные сопровождаются примечанием, мы не исключаем их без уведомления; эти четыре пункта касаются ключевых показателей.

  • Отраслевые корзины — это заявленный метод. Под «сектором» понимаются одиннадцать отраслевых ETF SPDR, взвешенных по рыночной капитализации; это неизменный набор названий для каждой сессии, а не классификация по тикерам от стороннего поставщика.
  • Денежный объём — это прокси-показатель на минуту, цена закрытия, умноженная на объём, суммируется по минутному бару; значение близко к сумме стоимостей сделок (prints), но не идентично ей.
  • Котируемые спреды не включают невалидные котировки (односторонние или пересекающиеся записи NBBO); панель учитывает количество отброшенных записей (1544 по SPY). Медианная ширина котировки — это статистический показатель котирования, а не стоимость исполнения сделки; заявки часто исполняются внутри спреда.
  • Единичная сделка может исказить максимум или минимум минутного бара. Бар QQQ в одиннадцать часов семь минут по восточному времени содержит минимум 709.58, тогда как соседние бары не опускались ниже 715.09; одна сделка прошла на 5.51 ниже текущего рынка. Каждый максимум и минимум выше был перепроверен по соседним барам; минимум сессии по QQQ в 705.172 был подтвержден.
Полные примечания к данным
  • Покрытие казначейских облигаций тоньше, чем предусмотрено схемой. Четыре заявленных срока погашения (шестимесячные, трех-, семи- и двадцатилетние) так и не были заполнены; кривая отображает семь существующих, плюс строку спреда 2s10s.
  • «Обратный сплит» Honeywell противоречит ленте. Поток содержит запись 1 по HON от двадцать девятого июня: обратный сплит, конвертирующий 2 старых акций в 1 новых. HON закрылся на уровне 231.3 в пятницу и 227.71 в понедельник, удвоения не произошло. Мы не применяли эту корректировку.
  • Количество новостей — это данные из потока одного поставщика, 3 издателей, которых мы транслируем, а не «все рыночные новости».
  • Поступления на уровне тиков, пересекающиеся котировки, корректировка фантомного объёма, усеченный файл FINRA по объёмам коротких позиций (и почему объём коротких продаж не является открытым коротким интересом) находятся в подробном обзоре.

Торговая сессия, верификация

ЗапросОбзор сессии: минутный диапазон SPY и закрытие пятницы по ленте сделок
Бары SPY 3 июляПервый бар SPY (ET)Последний бар SPY (ET)Минутные бары SPYБары основной сессииQQQ 1107: изолированный минимумQQQ 1107: минимум смежных баровQQQ: изолированный принт ниже смежных
004:0019:59897390709.58715.095.51
Точный 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 баров в рамках основной торговой сессии; полнота сессии подтверждена данными ленты сделок (календарь биржи содержит информацию только о предстоящих закрытиях). В пятницу, третьего июля, торги не проводились, 0 баров SPY были зафиксированы в течение дня, а четвёртое июля пришлось на субботу; четырёхдневная торговая неделя имеет собственный обзор.

Часто задаваемые вопросы

Как фондовый рынок завершил торги 29 июня 2026 года?

Рост рынка был обеспечен акциями компаний роста: QQQ закрылся на 2.57% выше уровня пятницы, SPY — на 1.62%, DIA — на 0.81%, а IWM — на 0.45%. При этом 62.3% тикеров с объемом торгов от одного миллиона долларов и выше завершили день в плюсе.

Был ли 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 сделки с опционами, прошедшие до девяти тридцати утра по восточному времени 29 июня, были совершены с инструментами на базе индексов с расчетами денежными средствами (RUTW, SPX, SPXW, VIX, VIXW, XSP), для которых предусмотрены расширенные глобальные торговые сессии; количество сделок с опционами на акции и ETF в этот период составило 0.

Методология

  • Временные метки хранятся в формате UTC и преобразуются в нью-йоркское время внутри запросов. «Закрытие» — это последняя минутная свеча основной торговой сессии, а не принт аукциона; при смене дня сравниваются 29 июня и 26 июня, сессия подтверждена по наблюдаемому диапазону свечей.
  • Ранжирование за скользящий месяц использует изменения цены закрытия к закрытию в основные торговые часы, первая сессия исключается (отсутствует предыдущее закрытие внутри окна). Даты экспирации опционов повторно парсятся из тикера OCC (собственный столбец экспирации в таблице поврежден).
  • Каждая панель считывается один раз, в момент написания, через защищенный путь доступа только для чтения. Состояние хранилища данных на 13 июля 2026 года.

Каждая панель представляет собой результат сохраненного запроса, график, таблицу и SQL в одном объекте. Вставьте любой из них в терминал Strasmore. Следующая сессия: 30 июня.

#recap#daily#spy#qqq#market structure