Итоги торгов 29 июня 2026 года в цифрах
Обзор рыночной сессии за двадцать девятое июня две тысячи двадцать шестого года. Анализ роста индексов QQQ и SPY, отраслевой динамики, объемов торгов и ключевых показателей ликвидности.
Понедельник, 29 июня 2026 года, стал днем роста, ведомого технологическим сектором при узком составе лидеров: QQQ прибавил 2.57%, SPY — 1.62%. Ликвидные бумаги в количестве 3968 показали рост против 2327 подешевевших, однако почти половина отраслевых корзин закрылась в минусе. Каждое число получено из сохраненного запроса; разверните любую панель для просмотра SQL. Тиковый анализ этой же сессии: микроструктурный анализ 29 июня.
Табло
Каждое изменение сравнивает минутный бар последней регулярной сессии 29 июня с показателями пятницы, 26 июня.
| Тикер | Закрытие 26.06 | Открытие 29.06 | Закрытие 29.06 | Изм. (%) | % от лучшего изм. | Максимум дня | Минимум дня | Объем (млн) |
|---|---|---|---|---|---|---|---|---|
| DIA | 517.5 | 520.63 | 521.68 | 0.81 | 31.5 | 522.975 | 519.4 | 5.5 |
| IWM | 297.61 | 298.11 | 298.95 | 0.45 | 17.5 | 299.16 | 294.68 | 21.7 |
| QQQ | 705.84 | 713.99 | 723.95 | 2.57 | 100 | 724.58 | 705.172 | 38.5 |
| SPY | 729.09 | 736.525 | 740.88 | 1.62 | 63 | 741.56 | 732.09 | 46 |
Точный 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.tickerSPY открылся на уровне $736.525 против закрытия пятницы на $729.09 и завершил торги на $740.88, не достигнув своего максимума в $741.56. Рост QQQ на 2.57% против роста DIA на 0.81% указывает на день преобладания акций роста и технологического сектора; фонд малой капитализации IWM прибавил 0.45%.
Был ли этот день необычным?
Процентное изменение мало что значит без эталона для сравнения. В этой таблице 29 июня ранжируется относительно предыдущего месяца по абсолютному размеру изменения цены закрытия к закрытию.
| QQQ изм. закр./закр. (%) | QQQ ранг абс. движения | QQQ сравн. сессий | QQQ макс. изм. за мес. (%) | QQQ сессий роста | SPY изм. закр./закр. (%) | SPY ранг абс. движения | SPY сравн. сессий | SPY изм. откр./закр. (%) | Первая сессия |
|---|---|---|---|---|---|---|---|---|---|
| 2.57 | 5 | 21 | 4.76 | 10 | 1.62 | 4 | 21 | 0.59 | May 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 тикеров, торговавшихся в обе сессии.
| Растущие | Падающие | Без изм. | Ликвидные тикеры | Тикеры в обеих сессиях | Тикеры в обеих сессиях (опис.) | Отсеяно по ликвидности | Отсеяно по ликвидности (опис.) | % растущих |
|---|---|---|---|---|---|---|---|---|
| 3968 | 2327 | 72 | 6367 | 11475 | 11,475 | 5108 | 5,108 | 62.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 > 03968 растущих бумаг, 2327 падающих, 72 без изменений: 62.3% ликвидного рынка показали рост при поштучном подсчете, день был широким.
Секторный анализ: ралли оказалось более узким, чем казалось
Равное взвешивание инструментов — это один из подходов, взвешивание по рыночной капитализации — другой. Одиннадцать отраслевых ETF серии SPDR представляют собой краткий обзор второго подхода, где каждый фонд является корзиной акций S&P 500, взвешенной по рыночной стоимости. Их показатели резко расходятся с данными по широте рынка.
| Сектор | Тикер | Изм. (%) | Диапазон (%) | Объем в $ (млн) | % выше худшего сектора |
|---|---|---|---|---|---|
| Technology | XLK | 2.52 | 3.91 | 2075 | 4.34 |
| Consumer discretionary | XLY | 2.37 | 2.17 | 1142 | 4.2 |
| Communication services | XLC | 1.66 | 0.78 | 669 | 3.48 |
| Industrials | XLI | 0.89 | 1.23 | 1231 | 2.72 |
| Financials | XLF | 0.28 | 0.64 | 1593 | 2.1 |
| Health care | XLV | 0.26 | 0.76 | 1897 | 2.08 |
| Utilities | XLU | -0.32 | 1.18 | 759 | 1.5 |
| Consumer staples | XLP | -0.38 | 1.23 | 764 | 1.44 |
| Energy | XLE | -0.52 | 1.51 | 1098 | 1.3 |
| Real estate | XLRE | -0.64 | 1.45 | 217 | 1.18 |
| Materials | XLB | -1.82 | 2.28 | 626 | 0 |
Точный 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) | Диапазон (%) |
|---|---|---|---|---|---|---|---|---|
| MU | 1122.92 | 1145 | 1.97 | 1148.79 | 15:59 | 1023.65 | 10:18 | 12.22 |
| SNDK | 2091.08 | 2051.29 | -1.9 | 2090.71 | 09:30 | 1895 | 10:18 | 10.33 |
| STX | 895.27 | 968.4 | 8.17 | 987.57 | 14:48 | 880.01 | 10:00 | 12.22 |
| WDC | 586.32 | 651.7 | 11.15 | 652.98 | 15:59 | 590 | 09:31 | 10.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 tickerMU — это хрестоматийный пример разрыва между внутридневным диапазоном и итоговым изменением: внутридневной диапазон составил 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. Если оценивать по количеству акций, картина иная.
| Тикер | Таблица лидеров | Объем ($ млрд) | Объем ($ млн) | Акции (млн) | % от лидера |
|---|---|---|---|---|---|
| MU | by dollars traded | 58.47 | None | 53.5 | 100 |
| SPY | by dollars traded | 33.97 | None | 46 | 58.1 |
| QQQ | by dollars traded | 27.67 | None | 38.5 | 47.3 |
| NVDA | by dollars traded | 21.66 | None | 111.8 | 37 |
| TSLA | by dollars traded | 20.66 | None | 51.4 | 35.3 |
| SNDK | by dollars traded | 19.73 | None | 10 | 33.7 |
| SOXS | by shares traded | 2.84 | None | 695.3 | 100 |
| INLF | by shares traded | 0.02 | 23 | 353.8 | 50.9 |
| TZA | by shares traded | 1.3 | None | 330.7 | 47.6 |
| BITO | by shares traded | 2.03 | None | 250.7 | 36.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 июня прослеживается классическая «улыбка» объема:
| Время (ET) | Акции (млрд) | % от макс. группы | % от минимума |
|---|---|---|---|
| 09:30 | 2.3 | 96.3 | 199.9 |
| 10:00 | 1.9 | 79.5 | 147.6 |
| 10:30 | 1.42 | 59.4 | 85.1 |
| 11:00 | 1.23 | 51.6 | 60.6 |
| 11:30 | 1.1 | 46.2 | 43.7 |
| 12:00 | 0.91 | 38.2 | 18.8 |
| 12:30 | 0.85 | 35.4 | 10.4 |
| 13:00 | 0.92 | 38.6 | 20.2 |
| 13:30 | 0.77 | 32.1 | 0 |
| 14:00 | 0.82 | 34.2 | 6.4 |
| 14:30 | 0.82 | 34.5 | 7.4 |
| 15:00 | 1.05 | 44 | 36.9 |
| 15:30 | 2.39 | 100 | 211.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_time2.3 млрд акций в первые полчаса, минимум в 0.77 млрд в 13:30 и самый крупный объем, 2.39 млрд, в последние полчаса, когда концентрируются аукционы закрытия и потоки индексных фондов.
Лента опционов
Объем торгов опционами составил 66.33 миллиона контрактов в рамках 11.04 миллиона сделок.
| Сделки опц. (млн) | Контракты (млн) | % Call в объеме | % эксп. сегодня | Контр. эксп. 2 июля (млн) | Сделки эксп. 3 июля | Сделки премаркета | Метка сделок премаркета | Сделки премаркета (не индекс) | Базовые активы премаркета | Контракты SPY (млн) | Контракты QQQ (млн) | Базовый актив | Страйк | Тип контракта | Экспирация | Объем контракта | Метка объема контракта | Ср. цена контракта | Страйк минус закрытие SPY |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11.04 | 66.33 | 55.7 | 35.8 | 10.73 | 0 | 40621 | 40,621 | 0 | RUTW, SPX, SPXW, VIX, VIXW, XSP | 12.01 | 7.32 | SPY | 741 | C | 2026-06-29 | 788133 | 788,133 | 0.474 | 0.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 (млн) | Медианный спред (б.п.) | Спред 30 мин. (б.п.) | Дневной спред (б.п.) | Открытие минус полдень (б.п.) | Отклоненные неверные котировки |
|---|---|---|---|---|---|---|
| MU | 0.75 | 4.6 | 6.55 | 4.11 | 2.44 | 414 |
| QQQ | 4.42 | 0.84 | 0.98 | 0.55 | 0.42 | 629 |
| SPY | 3.98 | 0.41 | 0.41 | 0.27 | 0.14 | 1544 |
| WDC | 0.12 | 8.2 | 14.33 | 7.55 | 6.78 | 43 |
Точный 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 июня (%) | Изменение за день (б.п.) |
|---|---|---|
| 1 month | 3.71 | 1 |
| 3 month | 3.87 | 4 |
| 1 year | 3.97 | 3 |
| 2 year | 4.1 | 3 |
| 5 year | 4.14 | 2 |
| 10 year | 4.38 | 0 |
| 30 year | 4.86 | -1 |
| 2s10s spread | 0.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 июня | Экс-дивиденды известных компаний | Проверенные известные компании | Пиковый день экс-дивидендов | Записи в пиковый день | Исполненные сплиты | IPO 29 июня | Дебюты IPO 1 июля | Отчеты SEC | Отчеты 424B2 | Отчеты инсайдеров (Form 4) | Отчеты 8-K | Новостные статьи | Издатели новостей | Статьи о NVDA | Статьи о других компаниях | NVDA минус остальные | Записи сплита HON | Сплит HON (от) | Сплит HON (до) | Закрытие HON 26 июня | Закрытие HON 29 июня |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 449 | 0 | 25 | July 1 | 746 | 23 | 0 | BSP, ITG, LIME | 6173 | 1473 | 1277 | 231 | 170 | 3 | 14 | 12 | 2 | 1 | 2 | 1 | 231.3 | 227.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_jun29449 дивидендных реестров закрылись 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 3 июля | Первый бар SPY (ET) | Последний бар SPY (ET) | Минутные бары SPY | Бары основной сессии | QQQ 1107: изолированный минимум | QQQ 1107: минимум смежных баров | QQQ: изолированный принт ниже смежных |
|---|---|---|---|---|---|---|---|
| 0 | 04:00 | 19:59 | 897 | 390 | 709.58 | 715.09 | 5.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 июня.