Strasmore Research
Resúmenes de mercado Matt ConnorPor Matt Connor · Actualizado 2026-07-23

Resumen de mercado 30 de junio de 2026

Análisis de la última sesión del trimestre con alzas en tecnología y el desempeño de los ETFs principales frente a un mercado mayoritariamente rojo.

El martes 30 de junio de 2026 —la última sesión del trimestre— fue un día de alzas liderado por el sector tecnológico en un mercado mayoritariamente rojo: QQQ ganó 1.63% y SPY 0.73%, pero solo el 4 de los fondos del sector S&P 10 cerraron al alza (3,349 nombres líquidos subieron, 3,033 bajaron). La sesión anterior: el resumen del 29 de junio. Cada cifra a continuación se lee de una consulta almacenada; expanda cualquier panel para ver el SQL.

El marcador

Cada cambio compara la última barra de sesión regular del 30 de junio con la del lunes 29 de junio.

ConsultaSPY / QQQ / DIA / IWM — 30 de junio vs cierre del 29 de junio, horario regular
El SQL exacto detrás de cada cifra
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-06-29 13:30:00' AND window_start < '2026-06-29 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-06-30 13:30:00' AND window_start < '2026-06-30 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

SPY abrió a $741.29 y cerró a $746.32, cerca de su máximo de $748.02. El 1.63% de QQQ frente al 0.12% de DIA define la tendencia del día: las acciones de crecimiento subieron, las blue chips apenas se movieron e IWM 0.49%.

El cierre del trimestre

El 30 de junio cerró la última de las 62 sesiones del segundo trimestre, y la tendencia del día fue un reflejo a pequeña escala de lo ocurrido en el trimestre.

ConsultaQ2 2026 de principio a fin: cada ETF de índice desde la apertura del 1 de abril al cierre del 30 de junio, horario regular
El SQL exacto detrás de cada cifra
WITH q2 AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS d_open,
           argMax(toFloat64(close), window_start) AS d_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND 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
    GROUP BY ticker, d
)
SELECT
    ticker,
    toString(min(d)) AS quarter_first_session,
    count() AS quarter_sessions,
    round(argMin(d_open, d), 2) AS quarter_open,
    round(argMax(d_close, d), 2) AS quarter_close,
    round((argMax(d_close, d) / argMin(d_open, d) - 1) * 100, 2) AS quarter_pct,
    countIf(d_close > d_open) AS up_sessions
FROM q2
GROUP BY ticker
ORDER BY quarter_pct DESC, ticker ASC

Del 1 de abril al cierre del 30 de junio: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08%. El QQQ lideró el trimestre y también la jornada del 30 de junio, aunque hubo un cambio en la posición relativa: el SPY superó ligeramente al IWM durante el día, pero el IWM lideró al SPY durante todo el trimestre. El QQQ cerró al alza en 38 de las 62 sesiones (el resumen del Q2 presenta el análisis detallado).

¿Fue un día inusual?

ConsultaMovimiento de apertura a cierre de SPY comparado con el mes de sesiones anterior (rango 1 = mayor movimiento absoluto)
El SQL exacto detrás de cada cifra
SELECT round(anyIf(oc_pct, d = toDate('2026-06-30')), 2) AS day_move_pct,
       arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-06-30'))), groupArrayIf(abs(oc_pct), d != toDate('2026-06-30'))) + 1 AS abs_move_rank,
       count() AS sessions_compared,
       toString(min(d)) AS first_session
FROM (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-06-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
    GROUP BY d
)

El movimiento del SPY desde la apertura hasta el cierre —una perspectiva distinta al marcador de cierre sobre cierre— fue de 0.68%, lo que lo sitúa en el puesto 7 de 21 sesiones anteriores en términos de magnitud absoluta. El índice se mantuvo estable; la actividad en el mercado no lo estuvo.

Amplitud: una ventaja positiva estrecha

ConsultaAvances vs declives entre tickers con al menos $1M negociados el 30 de junio
El SQL exacto detrás de cada cifra
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
       OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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,
    countIf(ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')) AS sector_funds_counted,
    countIf(ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
        AND day_close > prior_close) AS sector_funds_up
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0

3,349 avances, 3,033 declives, 88 sin cambios: el 51.8% de la cinta líquida subió — un resultado incierto bajo un reporte de crecimiento del índice de 1.63%. El filtro de liquidez descarta el 5,055 de los 11,525 tickers de doble sesión (con menos de un millón de dólares negociados), contabilizados aquí, nunca ocultos.

Por sector: hacia dónde se movió realmente el dinero

Contar nombres por voto individual oculta la distribución del capital. Los diez fondos a continuación poseen una parte del S&P 500, y el spread entre el mejor y el peor sector mide qué tan desigual fue la sesión.

ConsultaLos diez fondos sectoriales del S&P al 30 de junio: cambio vs cierre del lunes y distancia respecto al líder
El SQL exacto detrás de cada cifra
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
      AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
        OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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,
    if(day_close > prior_close, 1, 0) AS is_up,
    round(max((day_close / prior_close - 1) * 100) OVER () - (day_close / prior_close - 1) * 100, 2) AS pts_behind_leader,
    day_dollar_bn
FROM per_name
ORDER BY pct_chg DESC, ticker ASC

Technology (XLK) ganó un 2.69% y destacó por sí solo: industrials 1.34%, materials 0.36% y discretionary 0.15% fueron los únicos otros sectores en verde, mientras que el resto del tablero está en rojo, desde financials (-0.17%) hasta utilities (-1.48%), staples (-1.53%) y real estate al final con un -2%. Diferencia entre el mejor y el peor: 4.69 puntos porcentuales, con un 4 de 10 fondos en verde. Un índice con una subida menor al uno por ciento y un spread de cuatro puntos: un solo sector impulsó la jornada.

Los mayores movimientos del día, en todo el mercado

La amplitud mide cuántos valores subieron; esto muestra cuáles se movieron más — los cinco mejores y peores por cambio porcentual entre los nombres con un volumen de negociación de $10 millones o más.

ConsultaTop 5 ganadores y top 5 perdedores entre nombres con más de $10M negociados el 30 de junio (se excluye un símbolo duplicado)
El SQL exacto detrás de cada cifra
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
       OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00')
    GROUP BY ticker
    HAVING prior_close > 1 AND day_close > 0 AND day_dollar_volume >= 10000000 AND ticker NOT IN ('SPCX')
)
SELECT
    board,
    ticker,
    prior_close,
    day_close,
    pct_chg,
    round(abs(pct_chg), 2) AS abs_pct_chg,
    dollar_volume_m,
    if(ticker IN (SELECT ticker FROM global_markets.stocks_splits
                  WHERE execution_date >= '2026-06-29' AND execution_date <= '2026-06-30'), 1, 0) AS split_record_on_file
FROM (
    SELECT 'top gainers' AS board, 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_dollar_volume / 1e6, 0) AS dollar_volume_m
    FROM per_ticker
    ORDER BY (day_close / prior_close) DESC, ticker ASC
    LIMIT 5
    UNION ALL
    SELECT 'top decliners' AS board, 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_dollar_volume / 1e6, 0) AS dollar_volume_m
    FROM per_ticker
    ORDER BY (day_close / prior_close) ASC, ticker ASC
    LIMIT 5
)
ORDER BY if(board = 'top gainers', 0, 1) ASC, pct_chg DESC, ticker ASC

Ninguna de las dos bolsas se parece al índice. JEM lideró con un +256.76% con $141 millones negociados; SOC perdió un 55.89% con $306 millones. ABVX subió un 38.56% con $942 millones, el mayor turnover en ambas bolsas; NVCT cayó un 35.62% y UNCY un 39.09%. La columna de split-record mantiene la integridad de la bolsa — un reverse split de uno por diez se registra como una "ganancia" del 900% en una cinta no ajustada — y cada nombre aquí tiene un 0: transacciones reales.

Tres filas representan la misma operación dos veces: CRCA (-35.16%) y CRCG (-35.19%) cayeron mientras CRCD subió un 35.47% — cada uno cercano al doble del movimiento del -17.53% del nombre relacionado con cripto a continuación: wrappers de acciones individuales apalancados.

El hecho destacado del día: los semiconductores en el giro del trimestre

Seis nombres, un mismo tema y resultados muy distintos: solo se observa movimiento conjunto y magnitud; los datos no indican la causa.

ConsultaNombres de semiconductores y almacenamiento: cambio vs cierre del lunes, rango y volumen en dólares
El SQL exacto detrás de cada cifra
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-06-30 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-06-30 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-06-30 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-30 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AMD', 'INTC', 'MU', 'SNDK', 'TSM', 'WDC')
      AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
        OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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 subió un 10.79%, AMD un 7.7%, Intel un 5.93% y TSMC un 4.86% — mientras que MU, con el mayor volumen de negociación de la sesión de $37.41 mil millones, cerró apenas un 0.52% arriba y Western Digital (-2.01%) no participó. Este es el componente detrás del reporte del sector tecnológico de 2.69% (MU en junio, tick por tick).

La tendencia contraria afectó a las financieras vinculadas a las criptomonedas, en contra del mercado alcista:

ConsultaFinancieros vinculados a cripto: cambio vs cierre del lunes, rango y volumen en dólares
El SQL exacto detrás de cada cifra
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-06-30 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-06-30 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-06-30 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-30 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('COIN', 'CRCL', 'HOOD', 'MSTR')
      AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
        OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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

CRCL registró un -17.53%, alcanzando su mínimo de $62.52 a las 15:59 ET —el último minuto de la sesión— junto con MSTR -6.2%, COIN -3.61% y HOOD -1.53%. Se observó movimiento conjunto; no se afirma la causa.

Lo que reportó el feed de noticias

Un resumen que evita afirmar causas debe al lector lo que realmente se publicó ese día.

ConsultaFeed de noticias del 30 de junio: conteo de artículos y último titular del día para cada nombre en este resumen
El SQL exacto detrás de cada cifra
SELECT
    names.n AS ticker,
    countIf(has(tickers, names.n)) AS articles_today,
    if(countIf(has(tickers, names.n)) = 0, 'none',
       formatDateTime(toTimeZone(argMaxIf(published_utc, (published_utc, id), has(tickers, names.n)), 'America/New_York'), '%H:%i')) AS latest_et,
    if(countIf(has(tickers, names.n)) = 0, 'no article in our feed this session',
       JSONExtractString(argMaxIf(publisher, (published_utc, id), has(tickers, names.n)), 'name')) AS publisher_name,
    if(countIf(has(tickers, names.n)) = 0, 'no article in our feed this session',
       argMaxIf(title, (published_utc, id), has(tickers, names.n))) AS latest_headline
FROM global_markets.stocks_news
CROSS JOIN (SELECT arrayJoin(['NVDA', 'MU', 'SNDK', 'CRCL', 'SOC', 'ABVX', 'JEM']) AS n) AS names
WHERE published_utc >= '2026-06-30 04:00:00' AND published_utc < '2026-07-01 04:00:00'
GROUP BY names.n
ORDER BY articles_today DESC, ticker ASC

El nombre con mayor cobertura fue NVDA con 21 artículos — sin estar entre los activos con mayor movimiento del día — su última nota de la sesión (16:28 ET, Investing.com) se tituló "These Stocks Could Benefit as the Robotaxi Race Heats Up". MU registró 7; el único artículo de SanDisk (The Motley Fool) es el único titular del día que menciona un movimiento real: "Why Sandisk Stock Is Skyrocketing Today".

El hallazgo es la brecha: el mayor declinante del día, su mayor ganador y el nombre vinculado a las cripto que más cayó registraron 0, 0 y 0 artículos — cero en cada caso, dentro de un feed de 211 piezas. La cobertura no es un indicador del price action.

Dónde se negoció el dinero

ConsultaLíderes de volumen de dos formas: top 6 por dólares negociados, top 4 por acciones negociadas (se excluye un símbolo duplicado pendiente de verificación)
El SQL exacto detrás de cada cifra
SELECT ticker, leaderboard, dollar_volume_bn, if(dollar_volume_bn < 1, dollar_volume_m, NULL) AS dollar_value_m, shares_m,
    round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
        / max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 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-06-30 13:30:00' AND window_start < '2026-06-30 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

En términos de dólares, MU superó a todo lo demás, incluidos los fondos indexados: $37.41 mil millones frente a los $31.84 mil millones de SPY; es la segunda sesión consecutiva en la que superó en volumen de negociación al principal fondo indexado (el resumen del lunes contiene el primero). El tablero de acciones muestra algo distinto: SOXS, un ETF inverso de semiconductores con apalancamiento de 3x (515.5 millones de acciones), y dos valores con precios inferiores al dólar cuyo valor es insignificante comparado con el de MU — el volumen se interpreta de dos formas.

Un nombre se mantiene fuera de ambos tableros deliberadamente: una salida a bolsa en junio cuyo ticker pertenecía anteriormente a una empresa distinta y no relacionada, por lo que los proveedores de datos etiquetan a dos entidades con las mismas tres letras (recibos aquí).

ConsultaAcciones negociadas por bloque de 30 minutos, horario regular (billones)
El SQL exacto detrás de cada cifra
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-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
GROUP BY et_time
ORDER BY et_time

2.05 mil millones de acciones en la primera media hora, un mínimo de 0.78 mil millones a las 13:30, y el mayor bloque del día — 2.69 mil millones — hacia un cierre de trimestre, donde la subasta de cierre y sus flujos de rebalanceo se registran (el análisis profundo del 29 de junio se detalla a continuación).

El tape de opciones

ConsultaUna fila para toda la jornada de opciones: volumen, vencimiento intradía, skew put/call de SPY por moneyness, semana ajustada por feriado
El SQL exacto detrás de cada cifra
WITH
    (
        SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
                any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
                sum(size), count(), round(avg(toFloat64(price)), 3))
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'
        GROUP BY ticker
        ORDER BY sum(size) DESC
        LIMIT 1
    ) AS top_contract,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
    ) AS spy_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) = '260630') / 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, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'))
        / toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C')), 2) AS spy_put_call_ratio,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'
        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) > spy_close)) / 1e6, 2) AS spy_0dte_otm_calls_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'
        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) <= spy_close)) / 1e6, 2) AS spy_0dte_itm_calls_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'
        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) < spy_close)) / 1e6, 2) AS spy_0dte_otm_puts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'
        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) >= spy_close)) / 1e6, 2) AS spy_0dte_itm_puts_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,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_close, 2) AS top_strike_minus_spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'

Se negociaron 61.95 millones de contratos de opciones en 10.06 millones de operaciones; las calls representaron el 57.3% del volumen total, y el 28% de este venció ese martes. El SPY mostró una tendencia opuesta: 12.04 millones de contratos con un put/call ratio de 1.09 —más puts que calls, en un día en que el fondo subió.

Al comparar los vencimientos del mismo día del SPY con su cierre de $746.32, el skew se vuelve evidente: 3.33 millones de puts out-of-the-money (strikes por debajo del cierre) y 2.28 millones de calls out-of-the-money, frente a 1.77 millones de calls in-the-money y 0.63 millones de puts in-the-money — los strikes con sesgo bajista que vencieron sin valor fueron el grupo más activo en la jornada 0DTE del SPY. No hubo operaciones para ningún contrato con código de vencimiento viernes 3 de julio (0 operaciones — el mercado está cerrado ese viernes); la weekly del jueves registró 10.52 millones.

ConsultaLos seis contratos de opciones más activos del 30 de junio, por contratos negociados
El SQL exacto detrás de cada cifra
SELECT
    concat(underlying, ' $', toString(strike), ' ', if(typ = 'C', 'call', 'put')) AS contract,
    toString(expiry) AS expires,
    formatDateTimeInJodaSyntax(expiry, 'MMMM d, yyyy') AS expires_label,
    if(expiry = toDate('2026-06-30'), 1, 0) AS is_same_day,
    contracts,
    round(avg_px, 3) AS avg_premium,
    round(100 * contracts / max(contracts) OVER (), 1) AS pct_of_busiest
FROM (
    SELECT any(underlying_symbol) AS underlying,
           any(toFloat64(strike_price)) AS strike,
           any(option_type) AS typ,
           any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) AS expiry,
           sum(size) AS contracts,
           avg(toFloat64(price)) AS avg_px,
           any(ticker) AS occ
    FROM global_markets.options_trades
    WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'
    GROUP BY ticker
    ORDER BY contracts DESC, occ ASC
    LIMIT 6
)
ORDER BY contracts DESC, contract ASC

El contrato más negociado fue la call del SPY de $747 con vencimiento el mismo día — 821,361 contratos con una prima promedio de $0.641, cerrando $0.68 por encima de la última barra regular del SPY y sin valor. El patrón detrás de esto es la lección: cinco de los seis contratos más activos en el tape fueron strikes del SPY con vencimiento el mismo día y con un dólar de diferencia cerca del cierre (SPY $748 call siguiente), cada uno negociándose por centavos. La excepción, con el 65.1% del volumen del líder, fue KWEB $29 call venciendo el December 18, 2026, que no era un contrato de un día: una posición a seis meses entre cinco boletos de lotería de tarde.

Tasas: el tramo largo subió al cierre del primer semestre

ConsultaCurva de los Treasuries, cierre del 30 de junio vs 29 de junio (solo vencimientos con datos)
El SQL exacto detrás de cada cifra
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jun30_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-06-30') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-29') AS p
)

El tramo largo aumentó en el último día del semestre: el bono a 10 años subió 6 bp hasta 4.44%, el de 2 años 4 bp hasta 4.14%, y el spread 2s10s se empinó 2 bp hasta 0.3 puntos. Los rendimientos largos subieron durante una sesión donde sus sectores más débiles, bienes raíces (-2%) y el tercero más débil, servicios públicos (-1.48%), son ambos clásicamente sensibles a las tasas: una coincidencia digna de notar, aunque no es un mecanismo que estos datos puedan probar (el resumen del H1 define la curva del semestre).

El calendario detrás de la jornada

ConsultaCalendario corporativo y flujo de información del 30 de junio en una fila (se muestra la brecha del índice de presentaciones)
El SQL exacto detrás de cada cifra
WITH
    (
        SELECT (count(), uniqExact(publisher))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-30'
    ) 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-06-30'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-30') AS ex_dividend_records,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-06-30') AS splits_executed,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-30') AS ipos_listed,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS sec_filings,
    (SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS insider_form4_filings,
    (SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS filings_8k,
    (SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
        SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-30' 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 uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_prior_session

704 registros de dividendos pasaron a fecha ex-dividend el último día del trimestre — una ola de cierre de trimestre, dado que la mayoría de las empresas de EE. UU. pagan trimestralmente — con 7 splits y 2 nuevas cotizaciones (AACU — Ares Acquisition Corp III; OSPRU — Osprey Acquisition Corp. III). La columna de presentaciones es el dato principal de calidad: el índice de la SEC contiene 31 presentaciones para el 30 de junio — 0 insider Form 4s, 0 8-Ks — frente a 4439 de la sesión anterior. Existe un patrón de fin de mes en el feed, identificado en la nota sobre el gap de fin de mes; cualquier conteo que incluya este día será inferior al real hasta que se complete el registro histórico.

La sesión, verificada

ConsultaRevisión de sesión: rango de barras de un minuto observado en SPY
El SQL exacto detrás de cada cifra
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-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00') AS day_sessions
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-30 00:00:00' AND window_start < '2026-07-01 00:00:00'

Las barras de SPY transcurren de 04:00 a 19:59 hora de Nueva York con exactamente 390 barras de ventana regular — una sesión completa, verificada mediante el tape (el conjunto de datos del calendario de la bolsa solo contiene cierres próximos).

Lo que representa la sesión

Un cierre de 0.73% SPY con un 51.8% de acciones al alza, un 4 de fondos del sector 10 en verde y un 4.69 de puntos de diferencia entre los mejores y peores no es un rally generalizado. Es el rally de un solo sector disfrazado de índice, con su media hora más intensa en una subasta de cierre de trimestre. El cambio de un índice es un promedio, y este fue impulsado por la tecnología mientras la mayoría de los sectores caían: analice la dispersión antes de confiar en la dirección.

Preguntas frecuentes

¿Cómo le fue al mercado de acciones el 30 de junio de 2026?

Cerró al alza: SPY ganó 0.73% y QQQ 1.63% frente al cierre del 29 de junio. La amplitud fue menor: 51.8% de los valores líquidos subieron, mientras que el 4 de los fondos sectoriales del S&P 10 cerraron en verde.

¿Qué sector lideró el mercado el 30 de junio de 2026?

Tecnología: XLK ganó 2.69%, frente al 1.34% de industriales y el -2% de bienes raíces en último lugar — una diferencia de 4.69 puntos entre el mejor y el peor sector.

¿Cuáles fueron las acciones con mayor movimiento el 30 de junio de 2026?

Entre los valores con un volumen de negociación de $10 millones o más, JEM fue la que más ganó (+256.76%) y SOC la que más perdió (55.89%). Ninguna registró un split: ambos son movimientos de precio reales y no artefactos de acciones corporativas.

¿Cómo le fue al mercado de acciones en el Q2 2026?

Desde la apertura del 1 de abril hasta el cierre del 30 de junio, a través de 62 sesiones: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08% — un trimestre liderado por el crecimiento, que concluyó con una jornada de crecimiento.

¿Por qué se negocia tanto volumen en la última media hora?

La media hora final registró 2.69 mil millones de acciones frente a 2.05 mil millones en la apertura. La subasta de cierre establece el precio oficial de cierre de cada acción en un solo cruce, y los fondos indexados negocian allí para igualarlo; el rebalanceo de fin de trimestre concentra el flujo.

Notas de datos y metodología

  • Las canastas. El tablero sectorial incluye los diez fondos sectoriales de SPDR mencionados en su panel; es la misma canasta cada sesión, por lo que el número de dispersión permite comparaciones entre días. Los tableros de movimientos requieren un volumen de negociación de $10 millones y un cierre previo superior a $1, excluyen la lista de símbolos reutilizados mencionada arriba y cuentan con una columna de registro de splits.
  • Las advertencias. El volumen en dólares es una aproximación por minuto (cierre × volumen por barra). El índice de la declaración del 30 de junio está casi vacío (la nota sobre la brecha de fin de mes lo diagnostica). El conteo de noticias proviene de una sola fuente de proveedor: la ausencia de un artículo aquí no es prueba de que no se haya publicado nada en ningún otro lugar.
  • La metodología. Una sesión (1, verificada mediante barras observadas); las marcas de tiempo se almacenan en UTC y se convierten a la hora de Nueva York en las consultas; el "cierre" es la última barra regular de un minuto, no la impresión de la subasta. Los vencimientos de opciones se procesan nuevamente desde el ticker de la OCC (la columna de la propia tabla presenta errores); la probabilidad de ejercicio (moneyness) se mide con respecto a la última barra regular de SPY. Los paneles se ejecutan una vez, al momento de la autoría, a través de la ruta de solo lectura restringida. Almacenamiento actualizado al 13 de julio de 2026.

Cada panel es el resultado de una consulta almacenada: gráfico, tabla y SQL en un solo objeto. Pegue cualquiera de ellos en la terminal Strasmore. Próxima sesión: 1 de julio.