Первая половина 2026 года: обзор рынка
Первая половина 2026 года состояла из двух различных рыночных фаз: в первом квартале все основные индексные ETF снижались или находились в боковике, а второй квартал с избытком компенсировал эти потери. По итогам полугодия SPY вырос на 8.8%; QQQ прибавил 18.7%; а результат IWM в 21.3% стал лучшим показателем первого полугодия для этого ETF на акции малой капитализации за всю историю наших данных. Ниже приведены расчеты, сопоставленные с результатами всех предыдущих лет в рамках одного запроса. Рынок ставок развивался по собственному сценарию: спред 2s10s сузился с 72 базисных пунктов до 30 за полугодие, не переходя при этом в инверсию. На этой странице представлена полная отчетность за полугодие: итоговые показатели, исторические ранги, помесячная динамика, кривая доходности по всем срокам погашения, одиннадцать секторов, эволюция рынка опционов по месяцам и наиболее значимые отдельные бумаги. Каждая цифра здесь является результатом сохраненного запроса; разверните любую панель для просмотра SQL-кода.
Итоги полугодия
| ticker | Доходность H1 (%) | Доходность Q1 (%) | Доходность Q2 (%) | Закрытие H1 |
|---|---|---|---|---|
| DIA | 8.4 | -3.9 | 12.1 | 522.28 |
| IWM | 21.3 | 0.1 | 20.2 | 300.42 |
| QQQ | 18.7 | -6.9 | 26.5 | 735.76 |
| SPY | 8.8 | -5.2 | 14.1 | 746.32 |
Точный SQL-код для каждого числа
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS h1_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerРазделение на два квартала определяет динамику полугодия: SPY -5.2%, затем 14.1%; QQQ -6.9%, затем 26.5%. IWM стал тихим лидером полугодия с результатом 21.3%; за шесть месяцев акции малой капитализации обошли все индексы крупной капитализации. Детали по кварталам приведены в обзоре второго квартала. Примечание к арифметике полугодий: показатель SPY 8.8% за шесть месяцев значительно ниже, чем только за второй квартал, поскольку полугодие включает в себя как просадку, так и восстановление. Сложный процент от -5.2% и 14.1% дает итоговое значение, указанное в таблице, и любой заголовок о «доходности за первое полугодие» по умолчанию учитывает весь этот цикл колебаний.
Первое полугодие в сравнении с историческими данными
Является ли 8.8% полугодие необычным? В приведенных ниже таблицах пересчитывается доходность за первое полугодие — от открытия до закрытия основной торговой сессии с января по июнь — для каждого года, по которому имеются минутные данные. Расчеты для каждой пары ETF проводятся по единой методике, после чего текущий результат ранжируется относительно остальных периодов. Самая ранняя дата в минутных данных подтверждена в методологии ниже; первым полным полугодием в архиве считается период, указанный в отчетах.
| Г | ticker | Сессии | Доходность H1 (%) |
|---|---|---|---|
| 2004 | QQQ | 124 | 2.9 |
| 2004 | SPY | 124 | 2.4 |
| 2005 | SPY | 125 | -2.1 |
| 2006 | SPY | 125 | 1.5 |
| 2007 | SPY | 124 | 5.4 |
| 2008 | SPY | 125 | -12.8 |
| 2009 | SPY | 124 | 1.8 |
| 2010 | SPY | 124 | -8.2 |
| 2011 | SPY | 125 | 4.2 |
| 2012 | QQQ | 125 | 12.7 |
| 2012 | SPY | 125 | 6.6 |
| 2013 | QQQ | 124 | 6.8 |
| 2013 | SPY | 124 | 10.4 |
| 2014 | QQQ | 124 | 7.3 |
| 2014 | SPY | 124 | 6.4 |
| 2015 | QQQ | 124 | 3.2 |
| 2015 | SPY | 124 | -0.2 |
| 2016 | QQQ | 125 | -1.7 |
| 2016 | SPY | 125 | 4.5 |
| 2017 | QQQ | 125 | 15.2 |
Точный SQL-код для каждого числа
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASC| ticker | H1 2026 (%) | Рейтинг | Сравнение полугодий | Первый год | Сессии 2026 |
|---|---|---|---|---|---|
| QQQ | 18.7 | 3 | 16 | 2004 | 123 |
| SPY | 8.8 | 6 | 23 | 2004 | 123 |
Точный SQL-код для каждого числа
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS halves_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASCРезультат SPY 8.8% занимает 6 место из 23 первых полугодий начиная с 2004 года (первое место — лучший результат). Это верхняя треть списка, но не рекорд. Результат QQQ 18.7% занимает 3 место из 16 сопоставимых полугодий. Временной ряд QQQ короче, так как фонд в течение нескольких лет торговался под другим тикером. Любой год, в котором для инструмента набралось менее ста торговых сессий в первом полугодии, исключается из выборки согласно фильтру по количеству сессий, указанному в таблице; таким образом, исключения являются явными, а не скрытыми.
| Г | ticker | Сессии | Доходность H1 (%) |
|---|---|---|---|
| 2004 | DIA | 124 | -0.5 |
| 2004 | IWM | 124 | 5.9 |
| 2005 | DIA | 125 | -5.1 |
| 2005 | IWM | 125 | -51.3 |
| 2006 | DIA | 125 | 3.9 |
| 2006 | IWM | 125 | 6.3 |
| 2007 | DIA | 124 | 7 |
| 2007 | IWM | 124 | 5.2 |
| 2008 | DIA | 125 | -14.5 |
| 2008 | IWM | 125 | -9.3 |
| 2009 | DIA | 124 | -3.9 |
| 2009 | IWM | 124 | 2.5 |
| 2010 | DIA | 124 | -6.8 |
| 2010 | IWM | 124 | -3.4 |
| 2011 | DIA | 125 | 6.4 |
| 2011 | IWM | 125 | 4.9 |
| 2012 | DIA | 125 | 3.7 |
| 2012 | IWM | 125 | 5.3 |
| 2013 | DIA | 124 | 11.7 |
| 2013 | IWM | 124 | 12.3 |
Точный SQL-код для каждого числа
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASC| ticker | H1 2026 (%) | Рейтинг | Сравнение полугодий | Первый год | Сессии 2026 |
|---|---|---|---|---|---|
| DIA | 8.4 | 4 | 23 | 2004 | 123 |
| IWM | 21.3 | 1 | 23 | 2004 | 123 |
Точный SQL-код для каждого числа
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS halves_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASCСтрока с данными по компаниям малой капитализации — главный итог полугодия: IWM занимает 1 место из 23 первых полугодий начиная с 2004 года. Это лучший результат за всю историю фонда, превосходящий показатели любого восстановительного полугодия в таблице. Результат DIA 8.4% занимает 4 место из 23. Базис расчета: доходность от открытия до закрытия основной сессии внутри каждого календарного полугодия. Методика расчета идентична для всех лет, верхняя граница выборки зафиксирована на конец текущего периода, чтобы набор данных для сравнения не расширялся автоматически при добавлении последующих лет.
Помесячная динамика
| Начало периода | ticker | Доходность мес. (%) | Закрытие мес. |
|---|---|---|---|
| 2026-01-01 | QQQ | 0.3 | 621.81 |
| 2026-01-01 | SPY | 0.9 | 691.85 |
| 2026-02-01 | QQQ | -1.8 | 607.45 |
| 2026-02-01 | SPY | -0.5 | 686.23 |
| 2026-03-01 | QQQ | -3.6 | 577.14 |
| 2026-03-01 | SPY | -4.2 | 650.24 |
| 2026-04-01 | QQQ | 14.8 | 667.6 |
| 2026-04-01 | SPY | 9.9 | 718.43 |
| 2026-05-01 | QQQ | 10.3 | 738.25 |
| 2026-05-01 | SPY | 4.9 | 756.4 |
| 2026-06-01 | QQQ | -0.2 | 735.76 |
| 2026-06-01 | SPY | -1.2 | 746.32 |
Точный SQL-код для каждого числа
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start, ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY period_start, ticker
ORDER BY period_start, tickerГрафик напоминает лестницу: небольшой подъём, затем снижение, резкий рост и снова небольшое падение. Апрель стал поворотной точкой полугодия (SPY 9.9%, QQQ 14.8%; для QQQ это был лучший месяц из шести), а июнь завершил полугодие на спокойной ноте с показателем -1.2% для SPY. Итоги июня с разбором рыночного охвата, скрывающимся за этой нейтральной цифрой, представлены здесь. Если рассматривать таблицу помесячно: год начался почти без изменений (SPY 0.9% в январе), в феврале (-0.5%) и марте (-4.2%) последовало снижение, затем апрель развернул тренд за один месяц, май его закрепил (4.9%), а в июне темпы замедлились. Три из шести месяцев оказались отрицательными — результат «орлянки» для полугодия, которое в итоге закрылось уверенным ростом. Это типичная конфигурация для полугодовых периодов на рынке акций, и об этом стоит помнить, когда результаты одного месяца пытаются выдать за окончательный вердикт.
Ставки: вся кривая, по срокам погашения
Кривая доходности казначейских облигаций в течение полугодия подверглась «скручиванию», а не сдвигу. Самый короткий конец кривой, сроки погашения которого наиболее тесно коррелируют с монетарной политикой, практически не изменился; двухлетние бумаги выросли на две трети процентного пункта; тридцатилетние бумаги почти не отреагировали. В таблице представлена вся кривая: состояние на начало полугодия в сравнении с концом.
| Срок погашения | Нач. (%) | Кон. (%) | Изменение (б.п.) |
|---|---|---|---|
| 1-month | 3.72 | 3.7 | -2 |
| 3-month | 3.65 | 3.87 | 22 |
| 1-year | 3.47 | 3.98 | 51 |
| 2-year | 3.47 | 4.14 | 67 |
| 5-year | 3.74 | 4.19 | 45 |
| 10-year | 4.19 | 4.44 | 25 |
| 30-year | 4.86 | 4.91 | 5 |
Точный SQL-код для каждого числа
SELECT maturity, start_pct, end_pct, round((end_pct - start_pct) * 100, 0) AS change_bp FROM (
SELECT '1-month' AS maturity, (SELECT round(argMin(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS start_pct, (SELECT round(argMax(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS end_pct, 1 AS o
UNION ALL SELECT '3-month', (SELECT round(argMin(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), (SELECT round(argMax(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), 2
UNION ALL SELECT '1-year', (SELECT round(argMin(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), (SELECT round(argMax(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), 3
UNION ALL SELECT '2-year', (SELECT round(argMin(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), (SELECT round(argMax(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), 4
UNION ALL SELECT '5-year', (SELECT round(argMin(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), (SELECT round(argMax(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), 5
UNION ALL SELECT '10-year', (SELECT round(argMin(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), (SELECT round(argMax(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), 6
UNION ALL SELECT '30-year', (SELECT round(argMin(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), (SELECT round(argMax(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), 7
) ORDER BY oЕсли прочитать столбец изменений сверху вниз, «скручивание» становится очевидным: доходность одномесячных бумаг изменилась на -2 базисных пунктов за шесть месяцев, в то время как двухлетние выросли на 67, а тридцатилетние — всего на 5. Параллельный сдвиг предполагает движение всех сроков погашения в одном направлении; в этом полугодии движение затронуло середину кривой, тогда как оба конца остались зафиксированными: краткосрочные ставки привязаны к уровню политики регулятора, а долгосрочные ставки почти не подверглись переоценке.
Как это повлияло на наклон
| Нач. (б.п.) | Кон. (б.п.) | Мин. (б.п.) | Сделки |
|---|---|---|---|
| 72 | 30 | 27 | 124 |
Точный SQL-код для каждого числа
SELECT
round((argMin(yield_10_year - yield_2_year, date)) * 100, 0) AS start_bp,
round((argMax(yield_10_year - yield_2_year, date)) * 100, 0) AS end_bp,
round(min((yield_10_year - yield_2_year)) * 100, 0) AS min_bp,
count() AS prints
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)Более быстрый рост доходности на коротком конце кривой по сравнению с длинным — это и есть суть сглаживания: спред 2s10s снизился с 72 до 30 базисных пунктов за 124 сделок, при этом минимальное значение за полугодие составило 27, поэтому кривая сгладилась, так и не перейдя в состояние инверсии. Означает ли сглаживание кривой что-либо для будущих событий — это вопрос прогнозирования, а данная таблица прогнозов не содержит.
| Д | Спред 2s10s (б.п.) |
|---|---|
| 2026-01-02 | 72 |
| 2026-01-05 | 71 |
| 2026-01-06 | 71 |
| 2026-01-07 | 68 |
| 2026-01-08 | 70 |
| 2026-01-09 | 64 |
| 2026-01-12 | 65 |
| 2026-01-13 | 65 |
| 2026-01-14 | 64 |
| 2026-01-15 | 61 |
| 2026-01-16 | 65 |
| 2026-01-20 | 70 |
| 2026-01-21 | 66 |
| 2026-01-22 | 65 |
| 2026-01-23 | 64 |
| 2026-01-26 | 66 |
| 2026-01-27 | 71 |
| 2026-01-28 | 70 |
| 2026-01-29 | 71 |
| 2026-01-30 | 74 |
Точный SQL-код для каждого числа
SELECT toString(date) AS d, round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)
ORDER BY dateДневные данные показывают, что сглаживание не было разовым событием, а происходило постепенно: 124 сделок фиксировали снижение на протяжении полугодия, при этом спред начал год на уровне 72 базисных пунктов, а завершил его на отметке 30.
Секторы: дисперсия, скрытая индексом
Какие именно сегменты рынка обеспечили доходность за полугодие? Одиннадцать отраслевых ETF SPDR, разделенных по полугодиям и кварталам, в одном запросе.
| ticker | Доходность H1 (%) | Доходность Q1 (%) | Доходность Q2 (%) | H1 ($ млрд) |
|---|---|---|---|---|
| XLB | 11.7 | 9.8 | 1 | 86.8 |
| XLC | -9.3 | -6.2 | -3.7 | 90.3 |
| XLE | 18.8 | 36.9 | -11 | 316.2 |
| XLF | -2.2 | -9.9 | 7.7 | 271.7 |
| XLI | 19 | 3.9 | 13.3 | 222.8 |
| XLK | 30.8 | -8.7 | 42 | 286 |
| XLP | 6.9 | 5.5 | 1.7 | 163.7 |
| XLRE | 9.1 | 1.3 | 7.7 | 38.4 |
| XLU | 5.7 | 7 | -1 | 128.7 |
| XLV | 2.5 | -5.4 | 7.8 | 218.8 |
| XLY | -2.3 | -9.3 | 6.9 | 132.5 |
Точный SQL-код для каждого числа
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerГлавная история — это дисперсия: сектор технологий (XLK) завершил полугодие ростом на 30.8%, показав 42% во втором квартале, тогда как сектор коммуникационных услуг (XLC) закончил период с результатом -9.3%. Разрыв между лучшим и худшим сектором за шесть месяцев составил около сорока процентных пунктов. Владение «рынком» означало владение обоими этими полюсами. Энергетический сектор (XLE) служит предостережением для тех, кто смотрит на длинные временные интервалы: он показал уверенные 18.8% за полугодие, что сложилось из 36.9% в ПЕРВОМ квартале и -11% во втором. Это был самый сильный крупный сектор рынка в квартале, когда индексы падали, и один из самых слабых в квартале, когда они восстанавливались. Финансовый сектор (XLF) прошел тот же путь в обратном направлении: -9.9% в первом квартале и 7.7% во втором. Единый показатель за первое полугодие сглаживает оба этих движения; разделение по кварталам дает более объективную картину.
Стоимость торговли в каждом секторе
Таблицы доходности встречаются повсеместно, в отличие от лент котировок. Данная панель измеряет медианный спред bid-ask для каждого отраслевого ETF в течение одной полной репрезентативной сессии из 123 сессий за полугодие. В качестве такой сессии выбрано 29 июня, данные по которому приведены здесь на основе каждого обновления NBBO в этот день.
| ticker | Мед. спред (б.п.) | Обновл. котировок (млн) | Отклонено |
|---|---|---|---|
| XLV | 0.62 | 2.11 | 150 |
| XLY | 0.86 | 1.19 | 21 |
| XLC | 0.93 | 1.12 | 82 |
| XLI | 1.1 | 1.38 | 12 |
| XLK | 1.1 | 2.72 | 55 |
| XLP | 1.18 | 0.76 | 33 |
| XLE | 1.85 | 0.59 | 1 |
| XLF | 1.86 | 0.38 | 2 |
| XLB | 1.97 | 0.41 | 0 |
| XLU | 2.18 | 0.29 | 6 |
| XLRE | 2.23 | 0.28 | 0 |
Точный SQL-код для каждого числа
SELECT ticker,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND sip_timestamp >= toDateTime64('2026-06-29 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-29 20:00:00', 9)
GROUP BY ticker
ORDER BY med_spread_bpsКаждая из одиннадцати котировок составляет несколько базисных пунктов или меньше: самая дешевая — 0.62 б.п. (XLV), самая широкая — 2.23 б.п. (XLRE). В этом и заключается практический смысл утверждения о том, что «отраслевые ETF ликвидны»: стоимость входа в любую отраслевую позицию измеряется сотыми долями процента. Для сравнения с отдельными акциями, в глубоком анализе за 29 июня спред низколиквидного инструмента в ту же сессию оценивается в сотни раз выше.
Ширина рынка за полугодие
Анализ ширины рынка на полугодовом отрезке представлен в двух масштабах. Крупный масштаб: SPY показал 64 сессий роста против 59 сессий снижения за 123 торговых дней полугодия. Это почти равновероятное распределение дней внутри периода с уверенной положительной динамикой, что характерно для постепенного роста котировок. Детальный анализ по всем тикерам проводится в месячном масштабе: соотношение растущих и падающих акций в июне приведено в июньском обзоре (там количество упавших тикеров превысило число выросших), а данные на конец квартала — в обзоре за второй квартал. Единый скан растущих акций по всему рынку за шесть месяцев превышает лимит запросов, установленный для этой страницы; это ограничение раскрывается здесь открыто, а не через скрытое сужение выборки.
| Рост. сессии | Пад. сессии | Нейтр. сессии | Всего сессий |
|---|---|---|---|
| 64 | 59 | 0 | 123 |
Точный SQL-код для каждого числа
SELECT countIf(day_ret > 0) AS up_sessions,
countIf(day_ret < 0) AS down_sessions,
countIf(day_ret = 0) AS flat_sessions,
count() AS sessions_total
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS day_ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
)Динамика рынка опционов по месяцам
Что показывает полугодовой срез: как менялась активность на рынке опционов. Каждый график ниже представляет собой скан общего объема торгов за месяц, совокупный объем контрактов и долю сделок, совершенных в день истечения срока действия (0DTE). Статистика такова: объем торгов вырос с 1316.1 миллионов контрактов в январе до 1477.9 миллионов в июне, который стал самым активным месяцем полугодия. Доля контрактов с истечением в день сделки увеличилась с 26.5% в январе до 34.3% в июне, что стало максимальным показателем за полугодие. Треть июньского объема торгов опционами пришлась на контракты, истекающие в тот же день.
| Контракты (млн) | 0DTE (%) | Сессии |
|---|---|---|
| 1316.1 | 26.5 | 20 |
Точный SQL-код для каждого числа
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-01-01 00:00:00')
AND window_start < toDateTime('2026-02-01 00:00:00')| Контракты (млн) | 0DTE (%) | Сессии |
|---|---|---|
| 1262.3 | 27 | 19 |
Точный SQL-код для каждого числа
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-02-01 00:00:00')
AND window_start < toDateTime('2026-03-01 00:00:00')| Контракты (млн) | 0DTE (%) | Сессии |
|---|---|---|
| 1442.6 | 29.5 | 22 |
Точный SQL-код для каждого числа
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-03-01 00:00:00')
AND window_start < toDateTime('2026-04-01 00:00:00')| Контракты (млн) | 0DTE (%) | Сессии |
|---|---|---|
| 1386.9 | 30.3 | 21 |
Точный SQL-код для каждого числа
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00')
AND window_start < toDateTime('2026-05-01 00:00:00')| Контракты (млн) | 0DTE (%) | Сессии |
|---|---|---|
| 1394.6 | 30.3 | 20 |
Точный SQL-код для каждого числа
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-05-01 00:00:00')
AND window_start < toDateTime('2026-06-01 00:00:00')| Контракты (млн) | 0DTE (%) | Сессии |
|---|---|---|
| 1477.9 | 34.3 | 21 |
Точный SQL-код для каждого числа
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')Стоимость совершения сделок, ежемесячная выборка
| Сессия | Мед. спред (б.п.) | Обновл. котировок (млн) | Отклонено |
|---|---|---|---|
| 2026-01-14 | 0.145 | 10.65 | 1410 |
| 2026-02-11 | 0.144 | 12.39 | 1365 |
| 2026-03-11 | 0.295 | 7.59 | 5639 |
| 2026-04-15 | 0.286 | 2.12 | 1047 |
| 2026-05-13 | 0.27 | 2.64 | 661 |
| 2026-06-10 | 0.409 | 7.48 | 12382 |
Точный SQL-код для каждого числа
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 3) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND ((sip_timestamp >= toDateTime64('2026-01-14 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-01-14 21:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-02-11 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-02-11 21:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-03-11 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-03-11 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-04-15 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-04-15 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-05-13 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-05-13 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-06-10 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-10 20:00:00', 9)))
GROUP BY session
ORDER BY session ASCМедианный котируемый спред SPY во вторую среду каждого месяца: 0.145 б.п. в январской выборке, 0.144 в февральской, примерно в два раза больше в весенних выборках и 0.409 б.п. в июньской, что является максимальным значением из шести. Основание для раскрытия: это данные по отдельным сессиям (вторая среда каждого месяца), а не медианные значения за весь месяц, так как полный анализ ленты котировок за шесть месяцев превышает лимит запросов для этой страницы. Даты выборки указаны на панели, невалидные котировки учитываются в статистике, а не исключаются без уведомления.
Значимые бумаги полугодия
Критерий значимости — не редакционный выбор, а объективные показатели: ниже представлен список лидеров по объему торгов в долларовом выражении за квартал. Данные пересчитаны для обеспечения точности отчета, а для каждой бумаги, по которой проводился углубленный анализ, добавлена ссылка.
| ticker | $ млрд | % от лидера |
|---|---|---|
| MU | 2047.5 | 100 |
| SPY | 2032 | 99.2 |
| QQQ | 1658.5 | 81 |
| NVDA | 1591.8 | 77.7 |
| TSLA | 1198.8 | 58.5 |
| SNDK | 980 | 47.9 |
| AMD | 755.2 | 36.9 |
| INTC | 712.3 | 34.8 |
Точный SQL-код для каждого числа
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8MU опередил SPY по объему торгов во втором квартале (2047.5 миллиардов против 2032 миллиардов); эти же данные приведены в обзоре второго квартала. Динамика шести отдельных акций из этого списка за полугодие:
| ticker | Доходность H1 (%) | Доходность Q2 (%) | H1 ($ млрд) |
|---|---|---|---|
| AMD | 165.3 | 179.8 | 1185.9 |
| INTC | 269.3 | 210 | 969 |
| MU | 290 | 229.9 | 2862.1 |
| NVDA | 5.2 | 13.5 | 3287.9 |
| SNDK | 830.1 | 248.4 | 1592.7 |
| TSLA | -8.2 | 11 | 2577.1 |
Точный SQL-код для каждого числа
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, window_start >= toDateTime('2026-04-01 00:00:00') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'NVDA', 'TSLA', 'SNDK', 'AMD', 'INTC')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerСектор памяти и полупроводников доминирует в этом полугодии: доходность SNDK за шесть месяцев составила 830.1%, MU — 290% (подробный потиковый разбор июня доступен здесь), INTC — 269.3%. NVDA, лидер по обороту в этом списке с показателем 3287.9 миллиардов за полгода, принесла 5.2% — это однозначный показатель на фоне кратного роста бумаг сектора памяти; июньский глубокий анализ демонстрирует это расхождение по сессиям. TSLA — единственный аутсайдер списка с результатом -8.2%. Июньское мега-размещение торгуется под повторно использованным тикером и исключено из сканирования лидеров до завершения верификации эмитента; первый месяц торгов разобран в отдельной публикации. Основа: список лидеров сформирован по объему торгов в долларах в основную сессию второго квартала (сканирование выше); столбцы доходности отражают результаты за полугодие, от цены открытия первой основной сессии до цены закрытия последней основной сессии.
Волна IPO за полугодие: помесячная динамика
| м | Листинги |
|---|---|
| 2026-01-01 | 36 |
| 2026-02-01 | 47 |
| 2026-03-01 | 17 |
| 2026-04-01 | 30 |
| 2026-05-01 | 40 |
| 2026-06-01 | 35 |
Точный SQL-код для каждого числа
SELECT toString(toStartOfMonth(listing_date)) AS m, count() AS listings
FROM global_markets.stocks_ipos
WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')
GROUP BY m
ORDER BY mВолна размещений была неравномерной и пришлась преимущественно на начало периода: февраль стал самым активным месяцем полугодия с 47 листингами, а март — самым спокойным с 17. Знаковое июньское мегаразмещение состоялось в месяц с обычным для рынка объемом (35 листингов).
Календарь полугодия
| Экс-дивиденды | Сплиты | IPO | Отчетность H1 | Отчетность 31 мар | Отчетность 30 апр | Отчетность 30 июн |
|---|---|---|---|---|---|---|
| 28356 | 830 | 205 | 471377 | 55 | 34 | 31 |
Точный SQL-код для каждого числа
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-01-01') AND ex_dividend_date <= toDate('2026-06-30')) AS ex_div_events,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-01-01') AND execution_date <= toDate('2026-06-30')) AS splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')) AS ipos,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= toDate('2026-01-01') AND filing_date <= toDate('2026-06-30')) AS h1_filings,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-03-31')) AS filings_mar31,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS filings_apr30,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30В первом полугодии на биржу вышли 205 компаний. Это волна размещений, крупнейший июньский дебют которой имеет собственный разбор по каждой квитанции, наряду с 830 сплитами и 28356 событиями ex-dividend. Для масштаба: это более одного нового листинга на каждую торговую сессию в течение полугодия. Общее число заявок содержит тройное раскрытие: индекс SEC почти пуст на конец каждого месяца полугодия, последний календарный день которого приходился на будний день (55 заявок проиндексировано 31 марта, 34 — 30 апреля и 31 — 30 июня, против тысяч в соседние дни), поэтому показатели заявок за полугодие занижены, пока лента не заполнится данными, разрыв на конец месяца имеет собственную диагностическую заметку.
Результаты торговой сессии
| Сессии H1 |
|---|
| 123 |
Точный SQL-код для каждого числа
SELECT
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')) AS h1_sessionsПримечания к данным
Полные примечания к данным
- Данные по short interest приведены на дату расчётов 15 июня (на момент формирования отчёта; ожидаются данные за конец июня, полная информация будет доступна в июньском обзоре; публикация обновится автоматически после поступления данных).
- Три отчётных дня на конец месяца в 2026 году практически пусты (31 марта, 30 апреля, 30 июня — все те концы месяцев, чей последний календарный день пришёлся на будни); информация об этом приведена вместе с показателями, причины разобраны в заметке о разрывах в данных на конец месяца. В предыдущие годы на эти даты приходились тысячи отчётов, поэтому речь идёт о техническом сбое в потоке данных, а не об отсутствии отчётности.
- Лидеры рынка за полугодие ограничены в выборке: шестимесячное сканирование всего рынка превышает лимит запросов, установленный для данной страницы, поэтому список значимых имён сформирован на основе квартального рейтинга, представленного в тексте. Доходность за полугодие рассчитана для этого фиксированного набора активов, база расчёта указана в соответствующих разделах. Полные таблицы лидеров по соответствующим масштабам приведены в обзорах за второй квартал и июнь.
- Ширина рынка в целом за полугодие также ограничена, представлено распределение по дням; данные в разрезе тикеров доступны на месячном и квартальном уровнях, ссылки на них приведены в разделе о ширине рынка.
- Исторический ряд QQQ короче, чем у SPY: в течение нескольких лет фонд торговался под другим основным тикером; фильтр по количеству торговых сессий исключает эти годы (количество сессий по годам приведено в таблице).
- Шесть панелей опционов представляют собой ежемесячные сканирования всего объёма торгов, а тренд спредов демонстрирует выборку по одной сессии в месяц; оба показателя получены пакетной обработкой, базы выборок указаны в тексте.
- Анализ микроструктуры рынка представлен в глубоком обзоре от 29 июня.
Методология
- Период охватывает интервал с первого января по тридцатое июня две тысячи двадцать шестого года, 123 торговых сессий, верифицированных по наблюдаемым барам. Доходность рассчитывается от цены открытия основной торговой сессии до цены закрытия основной торговой сессии в рамках каждого окна; все показатели вычислены с помощью одних и тех же запросов.
- Исторические сравнения пересчитываются в режиме реального времени на основе полной минутной истории на момент генерации, а не считываются из сохраненных значений. Верификация глубины данных: самая ранняя дата минутного бара в используемом здесь представлении с задержкой совпадает с датой в базовой таблице (сентябрь две тысячи третьего года), что было проверено при составлении материала, поэтому первым полным полугодием в архиве является первое полугодие две тысячи четвертого года. Каждый запрос к истории фиксирует верхнюю границу на момент окончания данного периода (набор для сравнения не расширяется при добавлении данных за последующие годы) и применяет ограничение по минимальному количеству сессий с учетом ежегодных показателей.
- Временные метки хранятся в формате UTC с использованием исходных границ UTC. Многолетние исторические блоки фильтруют данные основной торговой сессии по восточному времени (с девяти тридцати до пятнадцати пятидесяти девяти, конвертация выполняется для каждой строки, что является единственным надежным методом учета перехода на летнее время на протяжении десятилетий); блоки с одним окном в диапазонах только по EDT используют эквивалентный диапазон в исходном UTC. Оба метода указаны здесь.
- Генерация выполняется через защищенный путь доступа только для чтения; публичная страница не делает запросов к «живым» данным. Состояние хранилища данных на пятое июля две тысячи двадцать шестого года.
Это первое издание регулярного полугодового обзора; полнолетнее издание выйдет в январе. Детали по кварталам: второй квартал две тысячи двадцать шестого года. Макроэкономические релизы, на фоне которых велись торги в данном полугодии, представлены в разделе макроэкономическая картина.