resumen semanal mercado 20 julio 2026
Primera semana completa tras vencimiento mensual de julio. SPY varió X% de cierre a cierre. Ranking semanal: puesto Y de Z semanas. Tablero con cambios por sector y flujo de dólares.
La semana del 20 de julio de 2026 fue la primera semana completa tras el vencimiento mensual de opciones de julio, y transcurrió 5 sesiones sin ningún cierre en su interior. La variación semanal de cierre a cierre de SPY fue de -0.59%, y medida de apertura a cierre frente al año previo de semanas, ocupó el puesto 43 de 53. Cada cifra proviene de una consulta almacenada, y cada ventana está fijada a fechas explícitas, por lo que al re-ejecutar el SQL se obtienen estos mismos valores.
La semana en el tablero
Los cambios semanales van del cierre regular del viernes 17 de julio al del viernes 24 de julio. La última columna muestra la semana anterior, para que ambas queden una al lado de la otra. Las filas están en orden alfabético.
El SQL exacto detrás de cada cifra
SELECT ticker,
round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00'), 2) AS prior_week_close,
round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'), 2) AS week_close,
round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00')
/ argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00') - 1) * 100, 2) AS week_change_pct,
round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
/ argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') - 1) * 100, 2) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND ((window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')
OR (window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
GROUP BY ticker
ORDER BY tickerEn la semana: DIA se movió -0.38%, IWM -0.98%, QQQ -1.59% y SPY -0.59% hasta un cierre de $738.85. Las lecturas de la semana anterior, en el mismo orden alfabético, fueron -0.95%, -0.63%, -4.17% y -1.55%. La distancia entre los cuatro índices es lo primero que mide un marcador, y no siempre es pequeña.
La semana contra el año anterior
El número de una semana significa poco sin la distribución que lo respalda. Este panel recalcula cada semana anterior con la misma lógica, de apertura a cierre durante la sesión regular, y clasifica esta semana dentro de ese conjunto.
El SQL exacto detrás de cada cifra
SELECT round(anyIf(ret, wk = toDate('2026-07-20')), 2) AS week_open_to_close_pct,
arrayCount(x -> x > anyIf(ret, wk = toDate('2026-07-20')), groupArrayIf(ret, wk != toDate('2026-07-20'))) + 1 AS rank_best,
count() AS weeks_compared,
toString(min(wk)) AS first_week,
anyIf(sessions_measured, wk = toDate('2026-07-20')) 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_measured,
(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-07-21 00:00:00')
AND window_start < toDateTime('2026-07-25 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_measured >= 3
)Medido de esa forma, SPY rindió -1.1% y se ubicó en el puesto 43 de 53 semanas desde 2025-07-21. Note la diferencia de definición: esta cifra comienza en la primera apertura de la sesión regular de la semana, mientras que el marcador anterior comienza en el cierre de la semana previa. Ambas están etiquetadas donde aparecen.
Cinco sesiones, un arco
El SQL exacto detrás de cada cifra
SELECT toString(d) AS date,
round(c, 2) AS spy_close,
round((c / prev_c - 1) * 100, 2) AS change_pct,
round(shares_m, 1) AS spy_shares_m
FROM (
SELECT d, c, shares_m,
lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c,
toFloat64(sum(volume)) / 1e6 AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)
)
WHERE d >= '2026-07-20'
ORDER BY dateSesión por sesión, la variación de SPY fue de -0.15% el lunes, 0.84% el martes, -0.12% el miércoles, -1.22% el jueves y 0.08% el viernes, cerrando en $738.85 con 40.1 millones de acciones. La cifra del lunes se mide contra el cierre del 17 de julio, la sesión inmediatamente anterior al período.
Amplitud, sesión por sesión
Un nivel del índice es un solo número. La amplitud cuenta cuántas acciones se movieron junto con él, y es el número que decide si una semana verde fue amplia o estrecha.
El SQL exacto detrás de cada cifra
SELECT toString(d) AS date, advancers, decliners, unchanged, measured_names
FROM (
SELECT d,
countIf(c > prev_c) AS advancers,
countIf(c < prev_c) AS decliners,
countIf(c = prev_c) AS unchanged,
count() AS measured_names
FROM (
SELECT d, c, dv,
lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c,
sum(toFloat64(close) * toFloat64(volume)) AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)
WHERE d >= '2026-07-20' AND prev_c > 0 AND dv >= 5000000
GROUP BY d
)
ORDER BY dateEl lunes, 1268 de 3945 nombres medidos subieron y 2632 bajaron. Para el viernes, el desglose mostraba 2273 al alza frente a 1635 a la baja de un total de 3950. Se excluyen los nombres sin cierre en ambos lados de una sesión, razón por la cual el recuento medido varía ligeramente de un día a otro.
La misma pregunta, formulada una vez y abarcando toda la semana:
El SQL exacto detrás de cada cifra
SELECT
countIf(cw > cp AND liquid) AS advancers,
countIf(cw < cp AND liquid) AS decliners,
countIf(cw = cp AND liquid) AS unchanged,
countIf(liquid) AS measured_names,
countIf(NOT liquid) AS dropped_by_liquidity_filter,
round(100.0 * countIf(cw > cp AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
SELECT ticker, cp, cw, dv >= 5000000 AS liquid
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING cp > 0 AND cw > 0
)
)De 6100 nombres que superaron el umbral de facturación de cinco millones de dólares en horario regular, 2437 cerraron por encima de su cierre del 17 de julio y 3630 cerraron por debajo, lo que da una participación de los avances de 40%. El filtro de liquidez apartó otros 5099 nombres que operaron por debajo de ese umbral durante la semana. Se contabilizan aquí en lugar de descartarse silenciosamente.
El tablero sectorial
Los once ETFs sectoriales de SPDR, del cierre del 17 de julio al cierre del 24 de julio, ordenados de mejor a peor.
El SQL exacto detrás de cada cifra
SELECT sector, week_pct, round(max(week_pct) OVER () - week_pct, 2) AS points_behind_best
FROM (
SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
round((cw / cp - 1) * 100, 2) AS week_pct
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw
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-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
GROUP BY ticker
HAVING cp > 0 AND cw > 0
)
)
ORDER BY week_pct DESCEnergy se ubicó en la cima del tablero con 3.33%. Consumer Discretionary quedó en el fondo con -5.2%, 8.53 puntos porcentuales por detrás. Esa brecha es la dispersión sectorial de la semana, y vale la pena leerla por sí sola: una semana en la que los once caen dentro de un punto entre sí es un mercado muy distinto a uno donde el spread llega a dos dígitos.
Adónde fueron los dólares
El SQL exacto detrás de cada cifra
SELECT ticker, week_dollar_bn, round(100 * week_dollar_bn / max(week_dollar_bn) OVER (), 1) AS pct_of_leader
FROM (
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS week_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY week_dollar_bn DESC
LIMIT 8
)
ORDER BY week_dollar_bn DESCMU registró 158.1 mil millones de dólares de volumen en horario regular durante las cinco sesiones, superando a SPY con 133.9 mil millones y a QQQ con 101.5 mil millones. En el octavo lugar, AAPL negoció 34.5% de los dólares del líder. Los registros de volumen muestran dónde pasó la semana discutiendo el mercado, y no tiene por qué coincidir con el precio. La versión por nombre de esta medida es volumen relativo.
Los mayores movimientos de la semana
Los splits cambian el precio impreso sin alterar el valor: un reverse split genera un falso avance de cuatro dígitos, y un forward split un falso desplome de la misma magnitud. La semana registró 25 reverse splits y 11 forward splits, y ambos cuadros excluyen cualquier emisora cuyo split se haya ejecutado entre el cierre del 17 de julio y el del 24 de julio, el intervalo exacto sobre el que se mide el cambio. Ambos también exigen cinco millones de dólares de facturación en horario regular.
El SQL exacto detrás de cada cifra
SELECT ticker, board, week_pct, week_dollar_m, sessions_traded,
round(100 * week_dollar_m / max(week_dollar_m) OVER (), 1) AS pct_of_dollar_max
FROM (
SELECT 'gainers' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker NOT IN ('SPCX')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING cp > 0 AND cw > 0 AND dv >= 5000000
)
ORDER BY week_pct DESC
LIMIT 10
UNION ALL
SELECT 'decliners' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
FROM (
SELECT ticker,
argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker NOT IN ('SPCX')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING cp > 0 AND cw > 0 AND dv >= 5000000
)
ORDER BY week_pct ASC
LIMIT 10
)
ORDER BY board DESC, abs(week_pct) DESCPara aparecer en cualquiera de los dos cuadros se necesitó un movimiento real. El avance más moderado mostrado subió 92.3%, y la caída más moderada registró -47.8%. En los extremos, STAK se movió 383.7% con 251.6 millones de dólares negociados, y LBGJ se movió -98.8% con 47.7 millones. Ese descenso se acerca al valor de cotización total de la emisora, por lo que el cuadro incluye su propio comprobante: LBGJ registró barras en horario regular durante 5 de las cinco sesiones, y no se ejecutó ningún split en su contra entre los dos cierres que mide el cuadro.
El diferencial cotizado, sesión por sesión
El precio es el titular. El costo de ejecutar la operación es el diferencial cotizado, medido aquí en SPY una sesión a la vez, directamente de la cinta NBBO en bruto y no de ningún resumen.
El SQL exacto detrás de cada cifra
SELECT toString(toDate(sip_timestamp)) AS date,
round(quantileExactIf(0.5)(
10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2),
bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= '2026-07-20 13:30:00'
AND sip_timestamp < '2026-07-24 20:00:00'
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY toDate(sip_timestamp)
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY toDate(sip_timestamp)La mediana del diferencial cotizado de SPY midió 0.27 puntos base del punto medio el lunes y 0.27 el viernes, sobre 3.89 millones y 4.4 millones de actualizaciones NBBO. Las dos últimas columnas son la divulgación, no el hallazgo: 0 cotizaciones unilaterales y 1084 cotizaciones cruzadas se contaron dentro de la mediana del lunes en lugar de descartarse en silencio. Una cotización cruzada, oferta por encima de la demanda, es un artefacto normal de un feed consolidado que se ensambla desde múltiples centros en resolución de nanosegundos.
La semana de opciones posterior al vencimiento mensual
El vencimiento mensual de julio ocurrió el viernes anterior al inicio de esta semana, por lo que todo contrato negociado en estas cinco sesiones lo ha sobrevivido. El momento del vencimiento marca el ritmo al que opera la multitud intradía.
El SQL exacto detrás de cada cifra
SELECT toString(toDate(sip_timestamp)) AS date,
round(toFloat64(sum(size)) / 1e6, 1) AS contracts_m,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = formatDateTime(toDate(sip_timestamp), '%y%m%d')) / sum(size), 1) AS pct_0dte,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 8, 1) = 'C') / sum(size), 1) AS pct_call,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260724') / sum(size), 1) AS pct_expiring_jul24
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-20 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00'
GROUP BY toDate(sip_timestamp)
ORDER BY toDate(sip_timestamp)El volumen de contratos alcanzó 64 millones el lunes y 71.1 millones el viernes. La participación intradía, es decir, contratos que vencen en la sesión en que se negocian, fue de 40.2% el lunes frente a 49% el viernes, la sesión de vencimiento de la semana. Las calls representaron 53.5% del volumen de contratos del viernes. Y el atractivo de ese viernes fue visible desde la sesión de apertura: 15.1% del volumen del lunes ya correspondía a contratos con fecha de vencimiento ese día.
Tasas a lo largo de la semana
El SQL exacto detrás de cada cifra
SELECT toString(date) AS date,
round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp,
round((toFloat64(yield_10_year) - (SELECT toFloat64(any(yield_10_year)) FROM global_markets.treasury_yields WHERE date = '2026-07-17')) * 100) AS chg_10y_from_prior_close_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-17' AND date <= '2026-07-24'
ORDER BY dateMedido desde el dato del 17 de julio, el bono a diez años se movió 16 puntos base hasta 4.71% en el último dato registrado, con el de dos años en 4.37% y el de treinta años en 5.17%. El diferencial entre dos y diez años finalizó la serie en 34 puntos base. El archivo del Tesoro va aproximadamente una sesión por detrás de la cinta, por lo que este panel contiene 5 datos, cada uno fechado en la tabla.
Los cortos: los archivos diarios
FINRA publica un archivo diario del volumen de ventas en corto. El volumen corto es un flujo bruto diario, no una posición, y estos archivos a veces llegan truncados, por lo que la cobertura se mide antes de citar cualquier ratio a partir de ellos.
El SQL exacto detrás de cada cifra
SELECT date, tickers_on_file, short_shares_bn,
round(100.0 * tickers_on_file / max(tickers_on_file) OVER (), 1) AS pct_of_fullest_file
FROM (
SELECT toString(date) AS date,
uniqExact(ticker) AS tickers_on_file,
round(sum(short_shares) / 1e9, 2) AS short_shares_bn
FROM (
SELECT date, ticker, max(short_volume) AS short_shares
FROM global_markets.stocks_short_volume
WHERE date >= '2026-07-20' AND date <= '2026-07-24'
GROUP BY date, ticker
)
GROUP BY date
)
ORDER BY dateSe dispone de 5 archivos diarios para la semana. El primero contiene 15098 tickers y 4.71 mil millones de acciones marcadas como cortas; el último contiene 15062 tickers, o el 99.7% del conteo de tickers del archivo más completo. Cualquier afirmación sobre el volumen corto por nombre extraída de un archivo muy por debajo de sus vecinos permanece no verificable hasta que ese archivo se vuelva a publicar.
El calendario detrás de la semana
El SQL exacto detrás de cada cifra
SELECT toString(filing_date) AS date,
count() AS filings,
countIf(form_type = '4') AS form4,
countIf(form_type = '8-K') AS form8k,
countIf(form_type = '424B2') AS f424b2
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24'
GROUP BY filing_date
ORDER BY dateLa primera sesión registrada tuvo 3012 presentaciones, 632 de ellas informes Formulario 4 de personas con información privilegiada y 166 de ellas 8-K. La última tuvo 3814, con 644 Formularios 4 y 223 8-K. 5 de las sesiones de la semana tienen un índice diario de EDGAR archivado; ese índice llega según su propio cronograma, que ocasionalmente va detrás de la cinta.
El SQL exacto detrás de cada cifra
SELECT
(SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filings_week,
(SELECT uniqExact(filing_date) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filing_days_on_file,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS ex_dividends_week,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS household_ex_dividends_week,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS reverse_splits_week,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS forward_splits_week,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= '2026-07-20' AND listing_date <= '2026-07-24') AS listings_week,
(SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_week,
(SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_publishers_weekEl resto de la documentación de la semana: 17106 presentaciones ante la SEC en 5 días indexados, 592 registros ex-dividendo, 1 de ellos de las diez empresas conocidas que revisa este panel, 25 divisiones inversas y 11 divisiones directas, 4 nuevas cotizaciones y 1704 artículos de 2 editores. Ese último par mide la atención de un solo feed, no la de los medios mundiales.
Las sesiones, verificadas
El SQL exacto detrás de cada cifra
WITH spy AS (
SELECT d, c, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS p
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)
)
SELECT
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_in_week,
toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,
toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session,
count() AS regular_bars_in_week,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-20' AND date <= '2026-07-24') AS holiday_rows_in_week,
(SELECT countIf(c > p) FROM spy WHERE d >= '2026-07-20') AS up_sessions,
(SELECT countIf(c < p) FROM spy WHERE d >= '2026-07-20') AS down_sessions,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 11995 sesiones, de 2026-07-20 a 2026-07-24, con filas festivas 0 en cualquier punto de la ventana. SPY imprimió 1950 barras de minuto de sesión regular a lo largo de ellas. 2 sesiones cerraron por encima del cierre anterior y 3 cerraron por debajo. El próximo cierre programado es Labor Day el 2026-09-07.
En la mira
La siguiente semana, según nuestras propias tablas:
El SQL exacto detrás de cada cifra
SELECT
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-27' AND date <= '2026-07-31' AND status != 'open') AS closures_next_week,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS ex_dividends_next_week,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS household_ex_div_next_week,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-27' AND execution_date <= '2026-07-31') AS splits_next_week,
(SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) FROM global_markets.options_trades WHERE sip_timestamp >= '2026-07-24 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00') AS jul31_expiry_pct_of_friday_volume,
(SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-24') AS latest_short_interest_settlementLa tabla de festivos muestra 0 cierres en la semana siguiente. 368 registros de fechas ex-dividendo caen dentro de ella, 0 del conjunto de hogares, junto con 15 divisiones programadas. Del volumen de opciones del viernes, 14.2% ya estaba en contratos que vencen el viernes siguiente. La fecha de liquidación de ventas en corto más reciente registrada es 2026-07-15, un archivo que se publica con un rezago suficiente como para tener su propio explicador.
Preguntas Frecuentes
¿Cómo le fue al mercado accionario la semana del 20 de julio de 2026?
SPY varió -0.59% de cierre a cierre del 17 al 24 de julio, con QQQ en -1.59%, DIA en -0.38% e IWM en -0.98%. Entre los nombres líquidos, 2437 subió y 3630 bajó.
¿Qué sector lideró la semana del 20 de julio de 2026?
Energy, con 3.33%. El más débil de los once ETF sectoriales de SPDR fue Consumer Discretionary con -5.2%, 8.53 puntos porcentuales por detrás.
¿Cuántas sesiones de negociación hubo en la semana del 20 de julio de 2026?
5, transcurriendo del 2026-07-20 al 2026-07-24, con 0 filas de feriado en la ventana. El próximo cierre programado es Labor Day.
¿Qué ticker negoció más dólares la semana del 20 de julio de 2026?
MU, con 158.1 mil millones de dólares de volumen en horario regular, por delante de SPY con 133.9 mil millones.
Notas sobre los datos
Todos los timestamps almacenados están en UTC; el horario regular es de 13:30-20:00 UTC por sesión, y los límites semanales van del cierre regular del 17 de julio al del 24. Cada panel de cierre contra cierre lee la última barra de un minuto del horario regular a cada lado de la comparación, por lo que una impresión fuera de horario nunca puede fijar un cierre semanal. El ranking de doce meses usa rendimientos semanales de apertura a cierre, por lo que no coincidirá con el marcador de cierre contra cierre; ambas definiciones están etiquetadas donde aparecen. La amplitud semanal y los tableros de movimiento aplican un filtro de rotación de cinco millones de dólares en horario regular, y la amplitud publica la cantidad de nombres que ese filtro dejó de lado. Los tableros de movimiento excluyen cualquier nombre cuyo split se haya ejecutado después del cierre del 17 de julio y hasta el 24 de julio, el intervalo exacto sobre el que se mide el cambio, lo que captura un split asignado al fin de semana intermedio así como uno asignado a una sesión; no excluyen ETFs apalancados e inversos, que pueden dominar un tablero en una semana direccional. La parte inferior del tablero de bajistas puede situarse cerca de una pérdida total del valor cotizado para la semana, y ese tablero publica en cuántas de las cinco sesiones apareció cada nombre. El panel de spreads del SPY cuenta las cotizaciones unilaterales y cruzadas en lugar de descartarlas en silencio, y la mediana se toma sobre las cotizaciones válidas restantes. El archivo del Tesoro va aproximadamente una sesión detrás de la cinta y el índice diario de EDGAR llega según su propio cronograma, por lo que los paneles de tasas y presentaciones reportan cuántos días contienen realmente. No aparece ningún índice de volatilidad implícita aquí: esas series no tienen licencia en este almacén, por lo que la volatilidad se lee de la cinta a través de rangos, participación de opciones del mismo día y comportamiento de las cotizaciones.
Metodología
- Fuente de datos de mercado: cinta consolidada.
delayed_stocks_minute_aggspara precios y volúmenes,cache_stocks_quotespara el panel NBBO,options_tradespara la semana de opciones. - Cierre: la última barra de un minuto de la sesión regular, nunca una impresión asumida de las 16:00 ni una impresión de horario extendido.
- Sesiones: verificadas desde la tabla de festivos más las barras observadas, nunca asumidas desde el calendario.
- Manejo de huso horario: las cláusulas WHERE usan literales UTC sin procesar, y
toTimeZoneaparece solo en listas SELECT para etiquetas de hora del Este. - Decimales: las columnas de precio, tamaño y volumen se convierten a Float64 antes de cualquier división o producto.
- Agregados deterministas: cuantiles exactos en todo momento, y cada afirmación de orden o signo en prosa está codificada como un límite de cordura.
- Fecha del almacén de datos: 26 de julio de 2026.
Enlaces cruzados: la edición anterior de esta serie semanal, qué es un diferencial de oferta y demanda, cuándo vencen las opciones, interés corto versus volumen corto y el diferencial de dos a diez años.
Cada consulta anterior se ejecuta sin cambios en el terminal de Strasmore si deseas reorientar una ventana a una semana diferente.