Итоги торгов 29 июня 2026 года в цифрах
Обзор рыночной сессии за двадцать девятое июня: рост технологических индексов, отраслевой спред в четыре пункта, динамика акций памяти и анализ ликвидности торгового дня.
736.525
Понедельник, 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.tickerETF SPY открылся на уровне $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 | 59.8 | 199.9 |
| 10:00 | 1.9 | 49.3 | 147.6 |
| 10:30 | 1.42 | 36.9 | 85.1 |
| 11:00 | 1.23 | 32 | 60.6 |
| 11:30 | 1.1 | 28.6 | 43.7 |
| 12:00 | 0.91 | 23.7 | 18.8 |
| 12:30 | 0.85 | 22 | 10.4 |
| 13:00 | 0.92 | 24 | 20.2 |
| 13:30 | 0.77 | 19.9 | 0 |
| 14:00 | 0.82 | 21.2 | 6.4 |
| 14:30 | 0.82 | 21.4 | 7.4 |
| 15:00 | 1.05 | 27.3 | 36.9 |
| 15:30 | 3.85 | 100 | 401.8 |
Точный SQL-код для каждого числа
SELECT
et_time,
round(sum(shares) / 1e9, 2) AS shares_bn,
round(100 * sum(shares) / max(sum(shares)) OVER (), 1) AS pct_of_biggest_bucket,
round(100 * (sum(shares) / min(sum(shares)) OVER () - 1), 1) AS pct_above_trough
FROM
(
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
toFloat64(volume) AS shares
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'
UNION ALL
SELECT
'15:30' AS et_time,
toFloat64(size) AS shares
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 20:00:00' AND sip_timestamp < '2026-06-29 20:15:00'
AND has(conditions, 8)
)
GROUP BY et_time
ORDER BY et_time2.3 млрд акций в первые полчаса, минимум в 0.77 млрд в 13:30 и самый крупный объем, 3.85 млрд, в последние полчаса, когда концентрируются аукционы закрытия и потоки индексных фондов.
Лента опционов
Объём торгов опционами составил 66.33 миллиона контрактов, распределённых по 11.04 миллионам сделок.
| Сделки (млн) | Контракты (млн) | Call (%) | Экспирация сегодня (%) | Контракты на 02.07 (млн) | Сделки на 03.07 | Премаркет-сделки | Премаркет-сделки (описание) | Премаркет (не индекс) | Премаркет (активы) | 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 сделка с опционами до открытия рынка акций в девять тридцать, все они прошли по индексам с расчётами денежными средствами (RUTW, SPX, SPXW, VIX, VIXW, XSP), при этом в тот же период было совершено 0 сделок с опционами на акции или ETF. Это правило, а не случайность: опционы на индексы торгуются в расширенные часы, тогда как опционы на акции и ETF открываются одновременно с фондовым рынком. Акции торгуются раньше, см. премаркет и постмаркет, их опционы — нет.
В течение всего дня не было зафиксировано ни одной сделки по контрактам с датой экспирации в пятницу, третье июля (0 сделок), так как в эту пятницу рынок закрыт, в то время как по контрактам с экспирацией в четверг, второе июля, объём торгов составил 10.73 миллиона.
Лента котировок: во что обошлась торговля за день
Каждая цена на этой странице поступает из потока котировок — Национального лучшего предложения на покупку и продажу (NBBO), которое непрерывно обновляется для каждого листингового инструмента. Разрыв между лучшей ценой покупки и лучшей ценой продажи, спред 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 реестров закрылись 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), но не идентичен ей.
- Последние полчаса в панели объемов учитывают сделки аукциона закрытия. Минутные бары не включают сделки аукциона, поэтому в панель за полчаса добавляются все сделки с условием исполнения «closing-print», зафиксированные в консолидированной ленте с 16:00 до 16:15 по восточному времени, и относятся к последнему временному интервалу.
- Котируемые спреды не включают невалидные котировки (односторонние или пересекающиеся записи NBBO); панель учитывает количество исключенных записей (1544 по SPY). Медианная ширина котировки — это статистический показатель котирования, а не стоимость исполнения сделки; заявки часто исполняются внутри спреда.
- Единичная сделка может исказить максимум или минимум минутного бара. Бар QQQ в 11:07 по восточному времени содержит минимум на уровне $709.58, хотя ни один соседний бар не опускался ниже $715.09; это результат одной сделки на $5.51 ниже текущего рынка. Каждый максимум и минимум был проверен по соседним барам; внутридневной минимум QQQ на уровне $705.172 прошел проверку.
Полные примечания к данным
- Покрытие казначейских облигаций меньше, чем предусмотрено схемой. Четыре заявленных срока погашения (6 месяцев, 3 года, 7 лет и 20 лет) не были заполнены данными; кривая отображает семь существующих сроков, плюс строку 2s10s.
- «Обратный сплит» Honeywell противоречит данным ленты. В ленте содержится запись 1 по HON от 29 июня: обратный сплит, конвертирующий 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 процентных пункта. Секторы коммунальных услуг, товаров первой необходимости, энергетики и недвижимости также закрылись в минусе.
Какова была доля 0DTE в объеме торгов опционами 29 июня 2026 года?
На контракты с истечением в тот же день пришлось 35.8% от общего объема в 66.33 миллионов контрактов; самым активным отдельным инструментом стал call-опцион на SPY с исполнением в тот же день и страйком 741 (788,133 контрактов), который закрылся вне денег.
Почему опционы торгуются до открытия фондового рынка?
Это касается только индексных опционов. Все 40,621 сделок с опционами до девяти тридцати утра по восточному времени 29 июня пришлись на индексные инструменты с расчетами денежными средствами (RUTW, SPX, SPXW, VIX, VIXW, XSP), для которых предусмотрены расширенные глобальные торговые сессии; количество сделок с опционами на акции и ETF в этом временном окне составило 0.
Методология
- Временные метки хранятся в формате UTC и преобразуются в нью-йоркское время внутри запросов. «Закрытие» (Close) соответствует последнему минутному бару основной торговой сессии, а не цене аукциона; при смене дня сравниваются 29 июня и 26 июня, сессия подтверждена на основе наблюдаемого диапазона баров.
- Ранжирование за скользящий месяц использует изменение цены закрытия к закрытию в основные часы торгов, первая сессия исключается (отсутствует цена закрытия до начала периода). Даты экспирации опционов повторно парсятся из тикера OCC (столбец экспирации в таблице содержит ошибки).
- Каждая панель считывается один раз в момент написания через защищенный канал доступа только для чтения. Состояние хранилища данных на 13 июля 2026 года.
Каждая панель представляет собой результат сохраненного запроса, график, таблицу и SQL-код в одном объекте. Любой из этих элементов можно вставить в терминал Strasmore. Следующая сессия: 30 июня.