Acciones con volumen inusual de esta semana
Ranking de acciones con volumen inusual basado en el turnover de la semana frente a sus cuarenta sesiones previas, incluyendo retornos y persistencia.
Un volumen inusual significa que una acción se negocia muy por encima de su propio promedio, no del mercado. Que una megacap con 40 millones de acciones lo haga es algo común; que una small-cap lo haga es un evento. Esta página clasifica las acciones con volumen inusual de la semana que acaba de terminar: el promedio de volumen de las últimas cinco sesiones de cada nombre dividido por su propio promedio de las cuarenta sesiones anteriores, con un límite mínimo en dólares para asegurar que cada fila sea una acción que una persona pueda negociar realmente. Se actualiza semanalmente y la marca de "datos al" indica el periodo. La medición en sí —volumen relativo— tiene su propia guía completa.
Líderes de volumen inusual de esta semana
Tres columnas analizan los datos. El múltiplo indica cuánto superó una acción su volumen normal. La base indica cuál era el volumen normal; un múltiplo alto sobre una base baja es un evento menor que uno modesto sobre un volumen alto. La columna de dólares indica si la actividad tuvo relevancia económica. La última columna, el cambio de apertura a cierre de la semana, es la que la mayoría de los filtros de volumen omiten.
El SQL exacto detrás de cada cifra
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars,
argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS day_open,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS day_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
argMaxIf(s.day_open, c.rn, c.rn <= 5) AS week_open,
argMinIf(s.day_close, c.rn, c.rn <= 5) AS week_close,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
)
SELECT ticker,
round(adv_recent / adv_base, 1) AS rvol_week,
round(adv_recent / 1e6, 2) AS recent_adv_m,
round(adv_base / 1e6, 2) AS baseline_adv_m,
round(dollar_recent / 1e9, 2) AS week_dollar_bn,
round(100.0 * (week_close / week_open - 1), 1) AS week_pct
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 8Cada fila, leída en orden:
- JLHL — 99.2 veces su norma, el líder de la lista: 16.95M de acciones al día frente a una base de 0.17M, $0.68B negociados y un cambio de apertura a cierre de 160.6%.
- AGEN — 41.1 veces sobre una base de 0.62M acciones, con $0.88B de rotación; el cambio semanal fue 54.3%.
- IONS — 4.7 veces, pero con una base baja de 1.43M acciones y solo $2.1B de rotación; cambio semanal, -19.6%.
- ALNY — 2.3 veces, 1.91M de acciones al día frente a 0.83M habituales; -26.2% de apertura a cierre.
- BBIO — 2.1 veces, $2.25B negociados, -0.2% en la semana.
- MULL — 2.1 veces sobre una base de 1.96M acciones, $0.52B negociados, -22.8% de apertura a cierre.
- HLI — 1.9 veces, 0.9M de acciones al día, $0.61B; el cambio semanal, 5.6%.
- QGEN — la octava y última fila, con 1.8 veces, $0.76B negociados y un cambio de 8.7%.
La dirección no forma parte del ranking, y las dos columnas de la derecha lo confirman: el líder de la lista terminó la semana 160.6% respecto a su apertura, mientras que el octavo nombre terminó 8.7% respecto a la suya; un mismo filtro, experiencias opuestas. Un volumen alto marca las sesiones en las que el float de una acción se está probando realmente; esto no indica qué lado de la prueba resultó ganador.
Cómo se calcula el múltiplo
Tome una acción que tuvo un promedio de 200,000 acciones diarias durante las cuarenta sesiones previas. Durante la última semana, se negoció en 1,000,000, luego 1,400,000, luego 900,000, luego 1,100,000 y finalmente 600,000 acciones; esto da un promedio de cinco sesiones de 1,000,000. Divida: 1,000,000 ÷ 200,000 = 5.0x. Si la misma acción tuviera una base de dos millones de acciones, esa misma semana resultaría en 0.5x. El numerador es el volumen de esta semana; el denominador es el volumen habitual de la acción. (El denominador es simplemente el promedio de volumen diario, medido durante cuarenta sesiones en lugar de las veinte habituales).
¿Por qué cuarenta sesiones? Representan aproximadamente dos meses calendario; es tiempo suficiente para que un pico previo no domine el denominador, pero lo suficientemente corto para describir la acción tal como se negocia hoy. ¿Por qué cinco para el numerador? Es una semana completa, de modo que una sola sesión suspendida o una operación en bloque no distorsione el resultado.
El cálculo incluye una advertencia clara: cuanto menor sea la base, más barato será el múltiplo. El líder de esta semana tiene una base de solo 0.17M de acciones diarias; con ese tamaño, una sola sesión con alta demanda eleva el promedio semanal, que es precisamente la razón por la cual el panel exige una base de seis cifras y una semana de $500M antes de que un ticker pueda aparecer.
¿Qué tan rara es una semana como esta?
Un múltiplo solo tiene sentido en relación con la distribución de la que proviene. Mismo universo, mismo periodo, cada nombre calificado agrupado por su múltiplo:
El SQL exacto detrás de cada cifra
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
scored AS (
SELECT ticker,
multiIf(adv_recent / adv_base >= 10, 1,
adv_recent / adv_base >= 5, 2,
adv_recent / adv_base >= 3, 3,
adv_recent / adv_base >= 2, 4,
adv_recent / adv_base >= 1.5, 5,
adv_recent / adv_base >= 1, 6, 7) AS bucket_key
FROM per_name
),
buckets AS (
SELECT arrayJoin([(1, '10x or more'), (2, '5x to 10x'), (3, '3x to 5x'), (4, '2x to 3x'),
(5, '1.5x to 2x'), (6, '1x to 1.5x'), (7, 'below 1x')]) AS bk
)
SELECT bk.2 AS rvol_bucket,
countIf(scored.bucket_key = bk.1) AS names,
round(100.0 * countIf(scored.bucket_key = bk.1) / count(), 1) AS pct_of_universe,
count() AS universe_names
FROM scored CROSS JOIN buckets
GROUP BY bk
ORDER BY bk.1 ASC647 acciones y ETFs superaron su promedio esta semana. De esos, 2 cotizaron a diez veces su norma o más — el 0.3% del universo. Otro 0 se ubicó en el grupo de 5x a 10x y 1 en el de 3x a 5x. La lista de líderes anterior se extrae de esa parte superior de la tabla. Debajo de eso, 3 nombres cotizaron entre 2x y 3x su propia norma (0.5% del universo) y 5 se ubicaron en el rango de 1.5x a 2x (0.8%). Un 19 adicional se mantuvo en un nivel apenas elevado de 1x a 1.5x, el 2.9% de los nombres calificados.
El otro extremo de la tabla es la parte que nadie captura en pantalla: 617 nombres —el 95.4% del universo— cotizaron por debajo de su propio promedio de cuarenta sesiones esta semana. Ese es el estado ordinario del mercado, y es lo que hace que la parte superior de la tabla sea un valor atípico real en lugar de un error de redondeo.
¿Persiste el volumen inusual?
La creencia común es que el volumen inusual persiste durante días, por lo que un ticker cerca de la parte superior de una lista como esta generalmente ya ha completado su movimiento. Esto es verificable. Para cada uno de los ocho líderes: cuántas de las cinco sesiones operaron con el doble de la línea base o más, qué tan grande fue la sesión más intensa y cuántas sesiones separaron esa sesión máxima de la última de la semana.
El SQL exacto detrás de cada cifra
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
leaders AS (
SELECT ticker, adv_recent / adv_base AS rvol_week, adv_base
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 8
),
daily AS (
SELECT l.ticker AS ticker,
l.rvol_week AS rvol_week,
c.rn AS rn,
s.vol / l.adv_base AS rvol_day
FROM sess s
INNER JOIN cal c ON s.d = c.d
INNER JOIN leaders l ON s.ticker = l.ticker
WHERE c.rn <= 5
)
SELECT ticker,
round(max(rvol_week), 1) AS week_rvol,
countIf(rvol_day >= 2) AS days_above_2x,
round(max(rvol_day), 1) AS peak_day_rvol,
argMax(rn, (rvol_day, -rn)) - 1 AS sessions_since_peak
FROM daily
GROUP BY ticker
ORDER BY days_above_2x ASC, peak_day_rvol ASC, ticker ASCOrdenados por persistencia, el nombre menos persistente de la lista, HLI, superó el doble de su línea base en 1 de las cinco sesiones, con un pico de 6.2x. El más persistente, JLHL, lo logró en 3 de cinco, con un pico de 404.6x. Estos son eventos de múltiples sesiones, no operaciones aisladas; esta es la razón mecánica por la cual una lista semanal y una lista diaria suelen nombrar las mismas acciones.
La última columna se refiere al tiempo: sesiones entre el día de mayor volumen y la sesión final de la semana — 4 para HLI, 4 para JLHL. Cuando ese intervalo es superior a cero, el volumen más alto ya se había registrado antes del cierre de la semana. La lista describe la semana que terminó; no pronostica la que comienza.
Las quince sesiones del líder, día a día
El promedio semanal oculta la tendencia. Aquí se presenta el volumen relativo diario del líder actual —las acciones de cada sesión frente a la misma base de cuarenta sesiones— junto con el cambio de apertura a cierre de cada sesión, durante las últimas quince sesiones:
El SQL exacto detrás de cada cifra
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars,
argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS day_open,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS day_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
leader AS (
SELECT ticker, adv_base
FROM per_name
ORDER BY adv_recent / adv_base DESC, ticker ASC
LIMIT 1
),
path AS (
SELECT formatDateTime(s.d, '%Y-%m-%d') AS session_date,
formatDateTime(s.d, '%b %e') AS session_label,
s.vol / l.adv_base AS rvol_day,
100.0 * (s.day_close / s.day_open - 1) AS day_pct
FROM sess s
INNER JOIN cal c ON s.d = c.d
INNER JOIN leader l ON s.ticker = l.ticker
WHERE c.rn <= 15
)
SELECT session_date,
session_label,
round(rvol_day, 1) AS rvol_day,
round(day_pct, 1) AS day_pct,
round(max(rvol_day) OVER (), 1) AS peak_rvol_day
FROM path
ORDER BY session_date ASCHace quince sesiones, la acción cotizaba a 0.5x su base; un nombre ordinario y tranquilo. La sesión con mayor volumen en este periodo alcanzó 404.6x. En la sesión más reciente, Jul 15, el ticker todavía operó a 0.7x con un cambio de apertura a cierre de -3.5%.
Observe lo que el gráfico no hace: decaer en una línea ordenada. El volumen elevado aparece en grupos, y las sesiones posteriores a un pico pueden volver a acelerarse en lugar de disminuir; una razón por la cual la afirmación de que "el volumen se está agotando" debe verificarse contra la serie diaria en lugar de asumirse. La misma serie diaria es donde comenzaría una medida de ritmo intradía, la que se construye desde cero en la guía de volumen relativo y es utilizada por VWAP.
Lo que el filtro de pantalla excluye
Cuatro reglas mantienen la integridad de la lista, y cada una descarta datos que un lector podría desear ver:
- Un piso de volumen de transacciones de $500M para la semana. El recuento de acciones por sí solo llenaría la lista con nombres donde un millón de acciones es una cifra insignificante.
- Un promedio superior a 100,000 acciones al día, para que el denominador sea un número real y no un artefacto de redondeo.
- Al menos 35 de las 40 sesiones previas negociadas, lo que excluye nuevas cotizaciones; una IPO reciente no tiene un "normal" significativo para dividir y, de lo contrario, dominaría esta lista durante semanas.
- Exclusión de un símbolo reutilizado: un ticker que las bolsas reasignaron recientemente a una nueva cotización, cuyo historial del proveedor combina dos empresas distintas. Su promedio sería ficticio.
La Regla 1 es la que elimina los múltiplos más extremos de la cinta. Estos son los seis más grandes excluidos por ella:
El SQL exacto detrás de cada cifra
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND recent_sessions = 5 AND base_sessions >= 35
AND dollar_recent > 0 AND dollar_recent < 500000000
)
SELECT ticker,
round(adv_recent / adv_base, 1) AS rvol_week,
round(dollar_recent / 1e6, 1) AS week_dollar_m,
round(dollar_recent / (adv_recent * 5), 2) AS avg_share_price,
round(adv_base / 1e6, 2) AS baseline_adv_m
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 6SOBR operó a 109.8x de su norma, pero solo tuvo un volumen de $262.4M en toda la semana con un precio promedio de acción de $1.04. Detrás de este: ZBAO a 109.3x con $72M (precio promedio $0.44), WRAP a 51.8x con $162.5M, CPHI a 38.1x con $31.8M, KAPA a 36.7x con $9.5M, y LGPS a 20.2x con $57.5M. Actividad real, genuinamente inusual para esos nombres, y una categoría donde el múltiplo infla una cantidad de dinero muy pequeña.
De dónde proviene el volumen inusual
Los productores recurrentes, que hacen que el tablero se mueva más rápido: las semanas de reportes de ganancias, la fuente programada; eventos corporativos —fusiones, ofertas, adiciones y eliminaciones de índices— que generan un volumen mecánico sin relación con la opinión del mercado; la dinámica de squeeze, donde el volumen se acumula junto a la velocidad del precio, el patrón que documenta el explicador de short squeeze; y las nuevas cotizaciones, que dominan su propio tape hasta que el float se estabiliza. El tablero de cualquier semana suele ser una mezcla, sumado a uno o dos misterios genuinos; y esos misterios son las filas que valen la pena analizar.
Preguntas frecuentes sobre volumen inusual
¿Qué se considera volumen inusual para una acción?
No existe un umbral oficial, por lo que se utiliza la distribución: de los 647 nombres que superaron el límite de esta página esta semana, solo el 2 operó a 10 veces su norma o más, y el 95.4% operó por debajo de su propio promedio. Cualquier valor superior a aproximadamente dos veces ya se encuentra en los percentiles más altos del mercado en una semana determinada.
¿El volumen inusual es alcista o bajista?
Ninguna de las dos — es atención, y la atención llega tanto en rallies como en colapsos. Esta semana, el líder del tablero terminó las cinco sesiones 160.6% desde su precio de apertura y el octavo nombre terminó 8.7%; ambos calificaron bajo exactamente la misma métrica.
¿Cuánto dura el volumen inusual?
Usualmente más de un día. El panel de persistencia contabiliza las sesiones de cada nombre del tablero que superan dos veces la línea base: esta semana el rango va desde 1 de cinco (HLI) hasta 3 de cinco (JLHL), y la sesión con mayor volumen suele ocurrir antes de que termine la semana en lugar de en su último día.
¿Por qué la lista utiliza un límite de volumen en dólares?
Un filtro por cantidad de acciones sin este límite se llena de tickers económicos donde el múltiplo es enorme pero el capital no lo es: el nombre más grande excluido de esta semana operó a 109.8x su norma con un total de $262.4M, a un precio promedio de $1.04 por acción. El límite semanal de $500M mantiene cada fila del tablero con relevancia económica.
¿El volumen inusual de acciones también aparece en el mercado de opciones?
A menudo, sí — un volumen alto en acciones y en opciones suele ocurrir simultáneamente en los mismos nombres, razón por la cual los traders monitorean ambos. Sin embargo, la actividad de opciones se mide de forma distinta: el número de contratos operados es un flujo, mientras que el open interest cuenta las posiciones abiertas, y ambos responden preguntas diferentes — consulte volumen de opciones vs. open interest antes de interpretar cualquier alerta de "actividad inusual de opciones".
Cada número anterior proviene de una consulta almacenada y versionada — expanda el SQL bajo cualquier panel para ver la medición exacta, o ejecute el mismo filtro en cualquier ventana que desee en la terminal Strasmore.