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

Обзор рынка 2 июля 2026 года в цифрах

Ротация активов перед праздником: рост широты рынка при снижении Nasdaq. Технологический сектор и полупроводники под давлением на фоне разделения котировок.

Четверг, 2 июля 2026 года — последняя торговая сессия перед закрытием рынка в честь Дня независимости — прошел в условиях ротации активов на фоне общего снижения котировок. Индекс QQQ снизился на -1.71%, в то время как DIA вырос на 1.04%. Широта рынка была ПОЛОЖИТЕЛЬНОЙ: 3398 ликвидных бумаг выросли, в то время как 2758 составило 54.6%. Индекс роста снизился. Восемь из одиннадцати отраслевых фондов закрылись ростом; продажи сосредоточились в технологическом секторе и в сегменте полупроводников, который начал падать накануне.

Итоги торгов

ЗапросSPY / QQQ / DIA / IWM — 2 июля к закрытию 1 июля, основные сессии
Точный SQL-код для каждого числа
WITH prior AS (
    SELECT ticker, argMax(close, window_start) AS prior_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00'
    GROUP BY ticker
),
sess AS (
    SELECT ticker,
           argMin(open, window_start) AS day_open,
           argMax(close, window_start) AS day_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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
    GROUP BY ticker
)
SELECT
    s.ticker AS ticker,
    round(toFloat64(p.prior_close), 2) AS prior_close,
    round(toFloat64(s.day_open), 2) AS day_open,
    round(toFloat64(s.day_close), 2) AS day_close,
    round((toFloat64(s.day_close) / toFloat64(p.prior_close) - 1) * 100, 2) AS pct_change,
    round(toFloat64(s.day_high), 2) AS day_high,
    round(toFloat64(s.day_low), 2) AS day_low,
    s.shares_traded_m AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.ticker

Основной итог дня: разрыв между DIA на уровне 1.04% и QQQ на уровне -1.71% составил почти три процентных пункта; акции промышленного сектора обогнали акции роста. SPY показал средний результат на уровне -0.12%; IWM закрылся на уровне -0.59%.

Was the day unusual?

Two lenses in one panel: SPY's open-to-close move and QQQ's close-over-close move, each ranked against the trailing month by absolute size (rank 1 = biggest).

ЗапросРейтинг SPY и QQQ за последний месяц (1 = максимальное изменение)
Точный SQL-код для каждого числа
WITH per_day AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct,
           argMax(toFloat64(close), window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ')
      AND window_start >= toDateTime('2026-06-02 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
    GROUP BY ticker, d
),
with_prev AS (
    SELECT ticker, d, oc_pct,
           lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) AS prev_close,
           (rth_close / lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct
    FROM per_day
)
SELECT
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-02'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-02') AND isFinite(cc_pct) AND prev_close > 0)) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ' AND isFinite(cc_pct) AND prev_close > 0) AS qqq_sessions_compared,
    toString(minIf(d, ticker = 'SPY')) AS first_session
FROM with_prev

At the index level, no. SPY's -0.35% open-to-close ranks 15 of 22 trailing sessions — the bottom half. QQQ was louder but still not extreme: its -1.71% close-over-close ranks 9 of 21 sessions with a defined prior close, back to 2026-06-02 — a mid-pack bad day for the growth index. The single-name tape is where July 2 was loud.

Ширина рынка: рост числа растущих акций при снижении индекса роста

ЗапросКоличество растущих и падающих акций (объем торгов ≥ $1M на 2 июля)
Точный SQL-код для каждого числа
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
       OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
    GROUP BY ticker
)
SELECT
    countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
    countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
    countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
    countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
    count() AS tickers_traded_both_sessions,
    count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
        / countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close > prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS advancers_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close < prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS decliners_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_fmt
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0

3,398 растущих, 2,758 падающих, 63 без изменений — 54.6% ликвидных акций выросли, в то время как QQQ снизился. Индексы с капитализационной взвешенностью и индексы широкого рынка с равным весом показали разные результаты; подобные дни объясняют, почему оба показателя важны. Фильтр исключает 5,317 из 11,536 тикеров с объемом торгов менее одного миллиона долларов за две сессии.

По секторам: где наблюдался рост

Ширина рынка учитывает количество акций, но не их тип. Одиннадцать секторных фондов SPDR показали результаты по отраслям; разрыв между лучшим и худшим показателем отражает дневную дисперсию.

Запрос11 секторных ETF SPDR — закрытие 2 июля к закрытию 1 июля, основные сессии
Точный SQL-код для каждого числа
WITH per_etf AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_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 >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(prior_close, 2) AS prior_close,
    round(day_close, 2) AS day_close,
    round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
    round((day_close / prior_close - 1) * 100 - min((day_close / prior_close - 1) * 100) OVER (), 2) AS pts_above_worst_sector,
    day_dollar_bn
FROM per_etf
ORDER BY ticker

Здравоохранение (XLV) лидировало с результатом 2.63%, далее следуют коммунальные услуги 2.23%, потребительские товары первой необходимости 2% и сырьевые товары 1.94%. Технологический сектор (XLK) закрылся последним с показателем -2.71% — это единственный сектор, упавший более чем на один пункт; потребительские товары циклического спроса (-0.81%) и услуги связи (-0.13%) также показали отрицательную динамику, остальные восемь секторов выросли. Дисперсия от лучшего к худшему: 5.34 процентных пункта. Разрыв между ростом DIA и падением QQQ наблюдался по всему рынку, а не только среди четырех крупнейших компаний по капитализации. Именно поэтому рост линии индикатора Advance-Decline при падающем Nasdaq не является противоречием.

Главное событие дня: распродажа акций производителей памяти, второй день

Колебания, начавшиеся в среду, усилились в четверг — это связано с масштабом и синхронностью движения, а не с их причиной.

ЗапросАкции памяти и накопителей: изменение к закрытию среды, диапазон и объем в $
Точный SQL-код для каждого числа
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(prior_close, 2) AS prior_close,
    round(day_close, 2) AS day_close,
    round((day_close / prior_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,
    day_dollar_bn
FROM per_name
ORDER BY ticker

SanDisk показала рост на -14.32%, Seagate — на -10.38%, Western Digital — на -9.92%, MU — на -5.57%. Это произошло на фоне оборота MU в размере $51.4 миллиарда, что примерно в полтора раза больше оборота SPY. MU и SanDisk достигли минимумов в конце торгов (15:26, 15:26 ET), Seagate и Western Digital — раньше (14:23, 13:59). Контекст: среда и анализ акций MU.

Вторая часть ротации затронула компании с наибольшей капитализацией:

ЗапросРотация мега-кап компаний: изменение к закрытию среды, диапазон и объем в $
Точный SQL-код для каждого числа
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(prior_close, 2) AS prior_close,
    round(day_close, 2) AS day_close,
    round((day_close / prior_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,
    day_dollar_bn
FROM per_name
ORDER BY ticker

AAPL выросла на 4.75% в стабильном восходящем тренде — минимум был в 09:30 ET, максимум — в 15:57 за три минуты до закрытия. TSLA продемонстрировала зеркальное движение на уровне -7.65%. MSFT прибавила 1.41%; NVDA закрылась ростом на -1.55%. Один и тот же индекс, противоположные результаты дня.

Направления торговых потоков

ЗапросЛидеры по объему: топ-6 по $ и топ-4 по акциям (один дубликат исключен)
Точный 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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
      AND ticker NOT IN ('SPCX')
    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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
      AND ticker NOT IN ('SPCX')
    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

Лидером торгов четвертую сессию подряд стала компания MU с объемом в $51.4 миллиарда (понедельник, вторник, среда), против $32.7 миллиарда у SPY. SanDisk с объемом $26.57 миллиарда стала вторым представителем сектора памяти в первой четверке лидеров. SOXS — трехкратный обратный ETF на полупроводники — занял первое место по количеству акций с показателем 748.2 миллионов: дешевые акции преобладают в количестве, а дорогие — в долларовом выражении; относительный объем сравнивает показатель с нормой конкретной акции. Основано на данных за 2 июля в основные торговые часы, за исключением одного листинга с переиспользованным символом (отчеты).

ЗапросОбъем торгов акциями за 30-минутный интервал, основные сессии (млрд)
Точный SQL-код для каждого числа
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
    round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
GROUP BY et_time
ORDER BY et_time

2.13 миллиарда акций в первые полчаса торгов, минимум в 14:30 составил 0.81 миллиарда, а к закрытию перед праздником объем достиг 2.3 миллиарда — последний период стал самым крупным, так как закрытый аукцион объединяет оставшиеся ордера в одну котировку.

Лента опционов: смещение недельных экспираций

ЗапросДанные по опционам за день: объем, экспирация в тот же день, неделя и июль
Точный 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-07-02 00:00:00' AND sip_timestamp < '2026-07-03 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-07-02 13:30:00' AND window_start < '2026-07-02 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) = '260702') / 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,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260710')) / 1e6, 2) AS jul10_weekly_contracts_m,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717')) / 1e6, 2) AS jul17_monthly_contracts_m,
    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_fmt,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close,
    round(spy_regular_close - top_contract.2, 2) AS spy_close_minus_strike
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

Объем торгов опционами составил 80.96 миллионов контрактов при 13.15 миллионах сделок. 47.4% этого объема пришлось на экспирацию в этот четверг. Контракты с датой экспирации 3 июля в течение дня не торговались (всего 0 сделок), поэтому в четверг одновременно завершилась ежедневная и смещенная недельная экспирация. Самым активным контрактом стал SPY put с ценой исполнения $740 с экспирацией в тот же день — 540,403 контрактов со средней премией $0.499. SPY закрылся на 4.8 доллара выше страйка, то есть опцион оказался вне денег. Это был пут на рынке, где вторник и среда характеризовались коллами. На коллы по-прежнему приходилось 58.4% объема; следующая недельная экспирация составила 9.64 миллионов контрактов, а июльская месячная — 8.82 миллионов (механика экспирации).

The quote tape: what it cost to trade

Prices say what happened; quotes say what it cost. The bid-ask spread is the toll on every round trip, in basis points of the mid-price (a basis point is a hundredth of a percent). We measure it every session, ordinary or not — which is what makes "spreads blew out" a falsifiable claim.

ЗапросОбновления котировок NBBO: 2 июля к 1 июля, по тикерам (млн)
Точный SQL-код для каждого числа
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / 1e6, 2) AS jul2_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-01')) / 1e6, 2) AS jul1_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / countIf(toDate(sip_timestamp) = toDate('2026-07-01')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'SPY') / 1e6, 2) AS jul2_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'QQQ') / 1e6, 2) AS jul2_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'MU') / 1e6, 2) AS jul2_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

The national best bid and offer — the top of the consolidated book — was rewritten 597.22 million times on July 2 against 449.15 million on July 1: a 33% jump into the closure. QQQ took 7.56 million, above SPY's 5.42 million; MU 1.01 million.

ЗапросМедианный спред в базисных пунктах, основные сессии — индексные ETF, мега-кап и память
Точный SQL-код для каждого числа
SELECT
    ticker,
    round(med_bps, 2) AS median_spread_bps,
    round(med_dollars * 100, 1) AS median_spread_cents,
    round(med_bps / min(med_bps) OVER (), 1) AS times_the_spy_spread,
    round(quote_updates / 1e6, 2) AS rth_updates_m,
    invalid_quotes_dropped
FROM (
    SELECT
        ticker,
        quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000,
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_bps,
        quantileExactIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price),
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_dollars,
        count() AS quote_updates,
        countIf(NOT (toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price))) AS invalid_quotes_dropped
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'TSLA', 'NVDA', 'MU', 'SNDK', 'WDC')
      AND sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
    GROUP BY ticker
)
ORDER BY median_spread_bps ASC

SPY quoted a median 0.27 basis points wide: about 2 cents on a $744.8 ETF. QQQ came in at 0.83 bps, NVDA 1.03. The names doing the falling were the expensive ones to trade: MU 5.52 bps, SanDisk 10.4, Western Digital 10.7940x SPY's spread. Crossing a basket of memory names cost multiples of crossing the index, before any price impact. Invalid quotes (one-sided, crossed) are counted per name, not hidden.

ЗапросАномальная ликвидность? Медианный спред SPY в основные сессии к среднему за месяц
Точный SQL-код для каждого числа
WITH per_day AS (
    SELECT toDate(sip_timestamp) AS d,
           quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000) AS med_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-06-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
      AND toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)
    GROUP BY d
)
SELECT
    round(anyIf(med_bps, d = toDate('2026-07-02')), 3) AS jul2_median_spread_bps,
    round(quantileExact(0.5)(med_bps), 3) AS trailing_median_bps,
    round(anyIf(med_bps, d = toDate('2026-07-02')) - quantileExact(0.5)(med_bps), 3) AS jul2_minus_trailing_bps,
    arrayCount(x -> x > anyIf(med_bps, d = toDate('2026-07-02')), groupArrayIf(med_bps, d != toDate('2026-07-02'))) + 1 AS wider_rank,
    count() AS sessions_compared,
    round(max(med_bps), 3) AS widest_session_bps
FROM per_day

An ordinary day for liquidity, and that is the finding: SPY's median spread of 0.27 bps sits 0 bps from the trailing month's median (0.27 bps), ranking 11 of 22 sessions by wideness — nowhere near the month's widest at 0.409 bps. A concentrated rout under a green tape did not stress the plumbing.

Ставки: данные за 2 июля получены

ЗапросДанные по казначейским облигациям: отчет за 2 июля
Точный SQL-код для каждого числа
SELECT
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS jul2_rows,
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS jul1_rows

Данные казначейства поступают с задержкой в один-два дня. На момент первой публикации закрытые данные за 2 июля отсутствовали, и на этой странице вместо предположений указывалось отсутствие данных. Теперь информация получена: 1 строк за 2 июля и 1 за 1 июля. Ниже представлена кривая доходности за данную сессию.

ЗапросКривая доходности сессии: 2 июля к 1 июля (только доступные сроки погашения)
Точный SQL-код для каждого числа
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul2_yield_pct,
    round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
    SELECT arrayJoin([
        ('1 month',  toFloat64(d.yield_1_month),  toFloat64(p.yield_1_month)),
        ('3 month',  toFloat64(d.yield_3_month),  toFloat64(p.yield_3_month)),
        ('1 year',   toFloat64(d.yield_1_year),   toFloat64(p.yield_1_year)),
        ('2 year',   toFloat64(d.yield_2_year),   toFloat64(p.yield_2_year)),
        ('5 year',   toFloat64(d.yield_5_year),   toFloat64(p.yield_5_year)),
        ('10 year',  toFloat64(d.yield_10_year),  toFloat64(p.yield_10_year)),
        ('30 year',  toFloat64(d.yield_30_year),  toFloat64(p.yield_30_year)),
        ('2s10s spread', toFloat64(d.yield_10_year - d.yield_2_year), toFloat64(p.yield_10_year - p.yield_2_year))
    ]) AS t
    FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS p
)

На момент закрытия доходность 10-летних облигаций составила 4.49%, а спред 2s10s0.35 базисных пунктов.

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

ЗапросКорпоративный календарь и поток информации за 2 июля (включая сплиты)
Точный SQL-код для каждого числа
WITH
    (
        SELECT (count(), uniqExact(publisher))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-02'
    ) AS news,
    (
        SELECT (argMax(t, n), 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-07-02'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), countIf(split_to > split_from), countIf(split_to < split_from),
                arrayStringConcat(groupArray(concat(ticker, ' ', toString(split_to), '-for-', toString(split_from))), '; '))
        FROM global_markets.stocks_splits
        WHERE execution_date = '2026-07-02' AND ticker NOT IN ('SPCX')
    ) AS splits
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-02') AS ex_dividend_records,
    splits.1 AS splits_executed,
    splits.2 AS forward_splits,
    splits.3 AS reverse_splits,
    splits.4 AS split_records,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02') AS ipos_listed,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS sec_filings,
    (SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS insider_form4_filings,
    (SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS filings_8k,
    (SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
        SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02' ORDER BY ticker
    )) AS ipo_names,
    news.1 AS news_articles,
    news.2 AS news_publishers,
    top_news.1 AS most_covered_ticker,
    top_news.2 AS most_covered_articles,
    (SELECT any(split_from) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_from,
    (SELECT any(split_to) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_to,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00') AS crwd_prev_close,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_day_close,
    (SELECT round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_dollar_m,
    (SELECT count() FROM (
        SELECT ticker FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date = '2026-07-02')
          AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
        GROUP BY ticker
    )) AS split_names_with_bars

По 2 новым листингам (MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II) и 319 дивидендным реестрам наступил период ex-dividend. Индекс SEC зафиксировал 5200 заявок в праздничный день: 2109 Form 4s и 258 отчеты 8-K. Новостная лента содержала 201 статей от 3 издателей (NVDA наиболее часто упоминаемых, 18 из них).

Данные о сплитах могут ввести в заблуждение при анализе необработанных цен закрытия. CRWD провел дробление акций в соотношении 4 к 1, поэтому в ленте без корректировки указана цена $772.45 в среду и $193.67 в четверг. Это ложное снижение, которое на самом деле означает получение четырех новых акций вместо одной старой. Это не единичный случай: было проведено 8 сплитов, из них 5 — прямое и 3 — обратное (список представлен в колонке split_records). Обратный сплит создает противоположный эффект — резкий скачок цены за одну ночь. Только 2 этих компаний торговались в нашей ленте; оборот CRWD в размере $1473.51 миллионов достаточно велик, чтобы исказить экран, поэтому в каждом нашем экране отслеживания движений эта компания исключена.

В ожидании

Календарные факты, а не прогнозы — данные о предстоящих сессиях.

ЗапросПосле праздников: следующая сессия, экс-дивиденды, сплиты, закрытие и короткие позиции
Точный SQL-код для каждого числа
SELECT
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00') AS jul6_spy_regular_bars,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-06') AS exdiv_records_jul6,
    (SELECT arrayStringConcat(groupArray(ticker), ', ') FROM global_markets.stocks_dividends
     WHERE ex_dividend_date = '2026-07-06'
       AND ticker IN ('AAPL', 'MSFT', 'JPM', 'JNJ', 'XOM', 'KO', 'PG', 'WMT', 'CVX', 'HD')) AS household_exdivs_jul6,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS splits_jul6,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02') AS next_scheduled_closure,
    (SELECT any(name) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_name,
    (SELECT any(status) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_status,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS latest_si_settlement,
    (SELECT dateDiff('day', max(settlement_date), toDate('2026-07-02')) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS si_settlement_age_days

Понедельник, 6 июля, открылся полноценной сессией с баром 390, что подтверждается данными по барам. Было зафиксировано 118 записей по дивидендам — среди десяти исследуемых нами компаний (JPM) одна является широко известным брендом — и 15 исполнений по сплитам. Следующее запланированное закрытие: Labor Day, 2026-09-07 (closed). Данные по коротким позициям не изменились: последняя сверка данных по 2026-06-30, 2 дней назад, публикация отстает от даты сверки примерно на две недели (почему).

Итоги торговой сессии — и пятница, которой не было

ЗапросОбзор сессии: диапазон минутных баров SPY и закрытие 3 июля
Точный SQL-код для каждого числа
SELECT
    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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS day_sessions,
    (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
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-02 00:00:00' AND window_start < '2026-07-03 00:00:00'

2 июля была полная торговая сессия, а не раннее закрытие: бары SPY длились от 04:00 до 19:59 по нью-йоркскому времени (с учетом предрыночных и внебиржевых баров), при этом в основную торговую сессию пришлось ровно 390 баров. В пятницу 3 июля было зафиксировано 0 баров SPY — полноценная торговая сессия, так как 4 июля, День независимости, выпал на субботу. Обзор четырех торговых сессий недели: обзор недели.

FAQ

Почему Dow вырос, а Nasdaq упал 2 июля 2026 года?

Эти индексы включают разные компании: DIA закрылся на уровне 1.04%, QQQ — на -1.71%. Структура секторов совпадает: здравоохранение, коммунальные услуги и потребительские товары преобладают, а технологии находятся на последнем месте на уровне -2.71%. Разрыв между лучшим и худшим показателем составил 5.34 пункта.

Был ли открыт фондовый рынок в пятницу на неделе Дня независимости?

Нет. День независимости пришелся на субботу, поэтому биржи закрылись в пятницу в честь праздника. На следующий день после этой сессии наши данные показывают 0 минутных баров SPY.

Как дробление акций влияет на цену за одну акцию?

Количество акций увеличивается в четыре раза, а цена делится на четыре; стоимость позиции при этом не меняется. CRWD, 2 июля: цена закрытия в среду без учета дробления составила $772.45, в четверг — $193.67. Это ложное снижение в любом скринере, который не учитывает дробление.

Какими были спреды bid-ask 2 июля 2026 года?

Медианный спред SPY в обычные часы торговли составил 0.27 базисных пунктов от средней цены. Это составляет 11 от 22 предыдущих сессий по ширине спреда; это обычный день. У отдельных акций спреды были шире: MU — 5.52 б.п., WDC — 10.79.

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

  • Объем в долларах — это минутный показатель — цена закрытия × объем, суммированные за бар.
  • Данные по казначейским облигациям США со сроком погашения в июле были опубликованы после первого релиза — в оригинальной заметке отсутствие данных было подтверждено количеством строк; данная редакция включает эти данные, квитанция приведена ниже.
  • Изменение цены закрытия CRWD является следствием сплита — исключено из экранов лидеров роста.
Полные примечания к данным
  • Секторная панель состоит из одиннадцати фондов SPDR Select Sector (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY) — это фиксированная, заявленная корзина, а не поле сектора от поставщика данных.
  • Подсчет котировок ведется по дате UTC временной метки SIP; летняя сессия попадает в одни сутки UTC.
  • Один листинг за июнь с повторяющимся символом исключен из таблиц лидеров (квитанции); детальный анализ тиков представлен в глубоких исследованиях.

Методология

  • Период составляет одну торговую сессию (1 сессия, подтверждено по наблюдаемым барам). Временные метки хранятся в формате UTC и конвертируются в нью-йоркское время внутри запросов; «close» означает последнюю минутную свечу регулярной сессии, а смена дня сравнивает 2 июля с 1 июля. Закрытие 3 июля было подтверждено по барам, а не вычислено расчетным путем.
  • Спреды (ask минус bid) указаны в базисных пунктах от средней цены (mid-price), рассчитанных как медиана обновлений NBBO в регулярные часы на детерминированном квантиле. Десятичные дроби преобразуются в числа с плавающей запятой перед арифметическими операциями; сроки экспирации опционов пересчитываются из тикера OCC. Каждая панель считывается один раз в момент подготовки данных через защищенный путь только для чтения.

График, таблица и SQL являются единым объектом. Вы можете скопировать любую панель в терминал Strasmore для дальнейшего использования. Предыдущая сессия: 1 июля. Неделя: четырехсессионная праздничная неделя.