Strasmore Research
Market Recap

Обзор рынка за неделю с 29 июня 2026 года

Matt ConnorBy Matt Connor Updated 2026-07-24

Последняя неделя июня состояла из четырех торговых сессий: рынок работал с понедельника, 29 июня, по четверг, 2 июля. Пятница, 3 июля, была выходным днем в связи с Днем Независимости — 4 июля выпало на субботу, поэтому праздник отмечался в предыдущую пятницу. Данные о закрытии рынка и другие показатели представлены в панелях. Самый значимый факт недели отражен в таблице объемов: один производитель чипов памяти обеспечил оборот в $190.2 billion за четыре дня — это в полтора раза больше, чем объем торгов по SPY. Все числа на этой странице являются результатами запросов к базе данных; вы можете развернуть любую панель, чтобы увидеть точный SQL-запрос.

Итоги недели

Рынок восстановился после падения на прошлой неделе или продолжил снижение? Данные указывают на восстановление: в этой таблице рассчитывается еженедельное изменение каждого индексного ETF и, для сравнения, изменение за предыдущую неделю — оба показателя получены из одного запроса.

ЗапросНедельная динамика: четыре индексных ETF к закрытию предыдущей пятницы
Точный SQL-код для каждого числа
SELECT ticker,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS prior_friday_close,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS week_close,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS week_change_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-18') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
  AND window_start >= toDateTime('2026-06-15 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY ticker
ORDER BY ticker

SPY завершил неделю на уровне $744.8, что на 2.2% выше показателей предыдущей пятницы — после -2.3% на прошлой неделе. QQQ вырос на 1% после -4.6% на предыдущей неделе, DIA прибавил 2%, а IWM закрылся на отметке 297.530% за неделю, показав отсутствие динамики на фоне роста индексов компаний с большой капитализацией.

Недельная динамика в сравнении с показателями за год

ЗапросТекущая неделя к итогам года: SPY, цена открытия/закрытия (ранг 1 — лучший; короткие недели исключены)
Точный SQL-код для каждого числа
SELECT round(anyIf(ret, wk = toDate('2026-06-29')), 2) AS week_2026_pct,
       arrayCount(x -> x > anyIf(ret, wk = toDate('2026-06-29')), groupArrayIf(ret, wk != toDate('2026-06-29'))) + 1 AS rank_best,
       count() AS weeks_compared,
       toString(min(wk)) AS first_week,
       anyIf(sessions, wk = toDate('2026-06-29')) AS sessions_this_week
FROM (
    SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
           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 = 'SPY'
      AND window_start >= toDateTime('2025-06-29 00:00:00')
      AND window_start < toDateTime('2026-07-03 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 wk
    HAVING sessions >= 3
)

Изменение цены от открытия до закрытия за неделю — от первой регулярной сессии понедельника до последней сессии четверга. Этот метод отличается от приведенного выше показателя по закрытию пятницы. Результат таков: недельная динамика SPY занимает 14 место среди последних 53 недель (1 — лучший результат). Это средний показатель для года, в котором наблюдались как распродажи, так и восстановление рынка. Недели, содержащие менее трех торговых сессий, исключены; в данной неделе было 4 сессий. Исторический контекст зависит от временного интервала: обзоры за месяц, квартал и полугодие сравнивают свои периоды со всеми годами в истории торгов.

Четыре сессии, затем выходной

Пятидневная торговая неделя является лишь предположением, а не фактом — в данном случае было четыре сессии. Панель отчетности подтверждает закрытие по данным ленты: за 3 июля не зафиксировано ни одного бара SPY, при этом за четыре торговых дня было сформировано 1560 баров регулярной сессии.

ЗапросДанные по сессиям: четыре торговых дня и закрытие пятницы согласно котировкам
Точный 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-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS sessions_in_week,
    (SELECT countIf((toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS regular_bars_week,
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-03 00:00:00') AND window_start < toDateTime('2026-07-04 00:00:00')) AS jul3_spy_bars
ЗапросПо сессиям: цена закрытия SPY, изменение и полный объем за день
Точный SQL-код для каждого числа
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
    round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS spy_close,
    round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / any(prev) - 1) * 100, 1) AS change_pct,
    round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
INNER JOIN (
    SELECT d, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
        GROUP BY d
    )
) AS p ON toDate(toTimeZone(window_start, 'America/New_York')) = p.d
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY et_date
ORDER BY et_date

Все четыре сессии прошли по полному регулярному графику — 1560 баров регулярной сессии соответствуют ровно четырем 390-минутным сессиям. Неделя закрылась практически без изменений (-0.1%) 2026-07-02 перед выходным — основной рост за неделю был достигнут в течение первых трех сессий.

Широта рынка: количество растущих активов

Рост одного индекса может скрывать падение рынка. В данном разделе учитывается каждый тикер, цена закрытия которого изменилась в ту или иную сторону за неделю; список исключенных активов раскрывается, а не скрывается.

ЗапросКоличество растущих и падающих акций за неделю с учетом фильтра ликвидности
Точный SQL-код для каждого числа
SELECT
    countIf(chg > 0 AND NOT dropped) AS advancers,
    countIf(chg < 0 AND NOT dropped) AS decliners,
    countIf(chg = 0 AND NOT dropped) AS unchanged,
    countIf(dropped) AS dropped_by_liquidity_filter,
    count() AS tickers_with_both_closes
FROM (
    SELECT ticker,
        argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
      - argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS chg,
        sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29')) < 1e6 AS dropped
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
    GROUP BY ticker
    HAVING countIf(toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
       AND countIf(toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
)

5047 тикеров выросли за неделю против 3525 упавших (39 без изменений) — рост был широким, а не ограниченным только уровнем индекса. Фильтр ликвидности отделил 3163 тикеров, объем торгов которыми за всю неделю составил менее $1M; они включены в этот расчет, а не скрыты.

Лидеры торгов: одна акция обошла ETF

ЗапросОбъем торгов в долларах в основную сессию, неделя от 29 июня (один тикер исключен до верификации)
Точный 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-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 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 8

MU лидирует по всему рынку с объемом торгов в $190.2 миллиарда в обычные торговые часы. SPY, крупнейший ETF, составил 66.4% от этого объема. Тот факт, что одна компания торговала активнее основного индексного фонда рынка в течение всей недели, является ключевым показателем; на этой странице указан объем потока, а не его причина. Основание: обычные торговые часы с 29 июня по 2 июля; одна компания с дублирующимся символом исключена из списка до подтверждения данных — подробности доступны в отдельном анализе.

Праздники изменили график еженедельных экспираций

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

ЗапросТорговый объем контрактов за неделю по датам экспирации (разовое сканирование)
Точный SQL-код для каждого числа
SELECT concat('20', substring(expiry_raw, 1, 2), '-', substring(expiry_raw, 3, 2), '-', substring(expiry_raw, 5, 2)) AS expiry,
    round(sum(size) / 1e6, 1) AS contracts_m,
    round(100 * sum(size) / max(sum(size)) OVER (), 1) AS pct_of_biggest
FROM (
    SELECT substring(ticker, length(ticker) - 14, 6) AS expiry_raw, size
    FROM global_markets.options_trades
    WHERE sip_timestamp >= toDateTime64('2026-06-29 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-03 00:00:00', 9)
)
GROUP BY expiry
ORDER BY contracts_m DESC
LIMIT 6

Самой загруженной экспирацией недели стала 2026-07-02 — четверг — объемом в 74.1 миллионов контрактов, что на 42.2% больше, чем у следующей даты. Из-за закрытия рынка 3 июля, «пятничная» экспирация этой недели сместилась на четверг; в таблице также представлены ежедневные экспирации с понедельника по среду и месячная экспирация 17 июля. Даты экспирации извлекаются из символа OCC каждого контракта (столбец экспирации в ленте данных может быть неточным); подробности механизмов работы таких недель экспирации можно найти в пояснении к праздничным дням.

Ставки: рост доходности 10-летних облигаций

ЗапросДоходность казначейских облигаций за неделю (данные от 2 июля еще не загружены)
Точный SQL-код для каждого числа
SELECT toString(date) AS d,
    round(yield_10_year, 2) AS y10,
    round(yield_2_year, 2) AS y2,
    round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-06-26') AND date <= toDate('2026-07-02')
ORDER BY date

Доходность 10-летних облигаций выросла с 4.38% в прошлую пятницу до 4.48% к 2026-07-01, при этом спред 2s10s зафиксировался на уровне около 31 базисных пунктов. Важное примечание: на момент генерации страницы данные по доходности 2-летних облигаций за июль еще не были загружены (обработано 4 строк по 1 июля) — данные появятся при следующем обновлении.

Календарь: завершение квартала и пропуск дня подачи отчетности

ЗапросКорпоративный календарь за неделю — с учетом разрыва в индексе отчетности на 30 июня
Точный SQL-код для каждого числа
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-06-29') AND ex_dividend_date <= toDate('2026-07-02')) AS ex_div_events,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-06-29') AND execution_date <= toDate('2026-07-02')) AS splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-06-29') AND listing_date <= toDate('2026-07-02')) AS ipos,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_jun29,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-01')) AS filings_jul1,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-02')) AS filings_jul2,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= toDateTime('2026-06-29 00:00:00') AND published_utc < toDateTime('2026-07-03 00:00:00')) AS news_articles

На рубеже кварталов произошли 2217 событий с выплатой дивидендов, 48 дроблений акций и 7 новых листингов. В столбцах отчетности обнаружена ошибка качества данных: индекс заявок SEC показывает 4439 заявок на 29 июня и 4282 на 1 июля, но только 31 на 30 июня — последний день квартала. В аналогичные дни на конец квартала прошлого года приходятся тысячи заявок. Пробел возник в потоке данных, а не в фактических отчетах компаний; любой показатель количества заявок за июнь или за второй квартал, включающий 30 июня, будет занижен, пока индекс не проведет корректировку данных. Это часть закономерности конца месяца, характерной для 2026 года — диагностическая заметка содержит подтверждающие данные; информация опубликована здесь, а также в обзорах за июнь и второй квартал.

Короткие позиции: один неполный файл и три полных

ЗапросВнебиржевой объем коротких продаж FINRA по сессиям: покрытие и маркированные короткие акции
Точный SQL-код для каждого числа
SELECT toString(date) AS d,
    uniqExact(ticker) AS tickers_on_file,
    max(ticker) AS alphabetical_end,
    round(100 * sum(toFloat64(short_volume)) / sum(toFloat64(total_volume)), 1) AS marked_short_pct
FROM (
    SELECT date, ticker, any(short_volume) AS short_volume, any(total_volume) AS total_volume
    FROM global_markets.stocks_short_volume
    WHERE date >= toDate('2026-06-29') AND date <= toDate('2026-07-02')
    GROUP BY date, ticker
)
GROUP BY date
ORDER BY date

В середине недели объем внебиржевых торгов был зафиксирован на низком уровне — примерно 48.8%. Это стандартные процессы маркетмейкеров, а не сигнал к сквизу. В колонках покрытия содержится примечание: файл за 29 июня неполный по всему рынку (5489 тикеров заканчиваются на «SSUS» против ~15 000, заканчивающихся на «ZYME» в полные дни). Таким образом, показатель 45.8% за 29 июня рассчитан на основе частичного файла. Подробный анализ за 29 июня содержит полный рыночный обзор.

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

Полные примечания к данным
  • 3 июля был ПОЛНЫЙ выходной, а не сокращенный день. 4 июля 2026 года пришлось на субботу; NYSE и Nasdaq закрылись в пятницу 3 июля — в этот день были зафиксированы бары 0 SPY. При обновлении страницы было обнаружено следующее: таблица биржевых календарей представляет собой динамический список предстоящих праздников, и строка за 3 июля была удалена после наступления праздника (она присутствовала в первой версии этой страницы), поэтому отсутствие данных за этот день является следствием работы системы; подробности описаны в пояснении к праздникам.
  • Короткий интерес (short interest) рассчитан по состоянию на расчетную дату 15 июня. На момент генерации страницы данные по расчетной дате за конец июня еще не были опубликованы; в данном материале они не используются, а полная информация представлена в обзоре за июнь. Данный пост будет обновлен после публикации данных.
  • Разрыв индекса отчетности за 30 июня указан выше; данные по казначейским облигациям за 2 июля ожидаются.
  • Файл FINRA по коротким объемам за 29 июня неполный по всему рынку; его коэффициент указан с учетом охвата данных.
  • Исключение лидера по объему: один листинг за июнь торгуется под повторно используемым символом и исключен из рейтинга до подтверждения данных о компании (подтверждающие сведения содержатся в отдельном посте).

Методология

  • Период охватывает даты с 29 июня по 2 июля 2026 года — четыре торговые сессии недели; 3 июля был выходной день на рынке. Границы сессий подтверждаются по фактическим барам, а не по предположениям (набор данных с календарем биржи содержит только предстоящие праздники — см. примечание к данным).
  • Временные метки хранятся в формате UTC и фильтруются по необработанным границам UTC; регулярные часы на этой неделе (EDT) составляют 13:30–20:00 UTC. Закрытием считается последняя минутная свеча в рамках регулярных часов; объем в долларах рассчитывается как произведение цены закрытия на объем за минуту и суммируется за регулярные часы.
  • Показатели недельной динамики сравниваются с ценой закрытия предыдущей пятницы; значение вычисляется заново в том же запросе, что и текущая неделя, а не считывается из сохраненного значения. Ранг за прошедший год пересчитывается каждую неделю идентичным образом (регулярные часы по восточному времени, ограничение по минимальной сессии, верхняя граница зафиксирована на окончании текущей недели).
  • Генерация данных выполняется через защищенный путь только для чтения; публичная страница никогда не делает запросы к живым данным. Состояние хранилища на 5 июля 2026 года.

Это первое издание регулярного еженедельного обзора — выпуск на следующей неделе будет охватывать период с 6 по 10 июля и будет содержать ссылку на этот отчет. Ежедневный обзор за 29 июня содержит подробные данные за понедельник.