Strasmore Research
Resúmenes de mercado Matt ConnorPor Matt Connor · Actualizado 2026-09-05 · data as of September 5, 2026 · refreshed weekly

Mayores alzas y caídas bursátiles de 2026

Consulta las acciones con mejor y peor desempeño de 2026, ordenadas por liquidez real y con splits y fondos apalancados excluidos para comparar datos más confiables.

Las acciones con mejor desempeño en 2026 hasta ahora están lideradas por SNDK, con un avance de 536.4% desde la primera sesión del año hasta la sesión completada más reciente. Esta página clasifica las mayores alzas y caídas de 2026 entre acciones que realmente cotizan. La medición se basa en las operaciones ejecutadas en bolsa, no en un resumen de un proveedor. La lista se actualiza a medida que avanza el año. Antes de ordenar los resultados, se excluyen los splits de acciones y los fondos apalancados. Ahí es donde suelen fallar la mayoría de las listas de rendimiento acumulado del año.

Mayores ganadoras bursátiles de 2026

Todas las acciones que aparecen abajo superaron un umbral de liquidez antes de ser ordenadas: un promedio de al menos $100 millones negociados por sesión completa durante el último mes. Un porcentaje elevado en una acción que casi nadie negocia es una cotización, no un resultado.

ConsultaMayores subidas de acciones en 2026: las diez principales en lo que va del año entre las más negociadas
tickerrendimiento acumulado del año (%)promedio diario en dólares (M)
SNDK536.415431
MRNA3995598
TWST305.4202
DELL301.83566
TXG287.5142
AEHR262.8208
MXL233.4114
AXTI226.9525
MU224.820455
AMLX183.5131
El SQL exacto detrás de cada cifra
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN toDate('2026-01-01') AND today())
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
)
SELECT e.ticker AS ticker,
    round((e.latest_close / e.year_open - 1) * 100, 1) AS ytd_return_pct,
    round(u.adv / 1e6, 0) AS avg_daily_dollar_m
FROM edges AS e
INNER JOIN universe AS u ON e.ticker = u.ticker
WHERE e.year_open >= 10
ORDER BY (e.latest_close / e.year_open) DESC
LIMIT 10
Pruébalo tú mismo

SNDK lidera el año con 536.4%, seguida por MRNA con 399% y TWST en tercer lugar con 305.4%. La décima posición de la tabla, AMLX, todavía sube 183.5%, por lo que toda la tabla se ha adelantado ampliamente a cualquier índice general.

La columna en dólares junto a cada variación contiene tanta información como el porcentaje. AMLX registra un volumen negociado diario promedio de aproximadamente $131 millones. SNDK, en la parte superior de la tabla, promedia $15431 millones. Todas las acciones de esta lista superan los $100 millones diarios, y el rango por encima de ese umbral es lo bastante amplio como para que el mismo porcentaje represente dos cosas distintas en sus extremos. Una acción con poco volumen es más fácil de mover y más difícil de vender al precio que aparece en pantalla.

Mayores caídas bursátiles de 2026

La misma medida, a la inversa: las mayores caídas acumuladas en el año entre las acciones que superan el mismo umbral de liquidez.

ConsultaMayores caídas de acciones en 2026: las diez peores en lo que va del año entre las más negociadas
tickerrendimiento acumulado del año (%)promedio diario en dólares (M)
TTD-60.5192
WING-54.4103
APP-54.11257
CSGP-52.8144
FLUT-52.7140
STLA-51.5105
BSX-51763
KLAR-50.4145
RBLX-49.1303
JOBY-48.8153
El SQL exacto detrás de cada cifra
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN toDate('2026-01-01') AND today())
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
)
SELECT e.ticker AS ticker,
    round((e.latest_close / e.year_open - 1) * 100, 1) AS ytd_return_pct,
    round(u.adv / 1e6, 0) AS avg_daily_dollar_m
FROM edges AS e
INNER JOIN universe AS u ON e.ticker = u.ticker
WHERE e.year_open >= 10
ORDER BY (e.latest_close / e.year_open) ASC
LIMIT 10
Pruébalo tú mismo

La mayor caída acumulada en el año corresponde a TTD, con -60.5%, seguida de WING, con -54.4%. En el décimo lugar de la lista, JOBY registra -48.8%. Varias de estas acciones pertenecen a empresas grandes y ampliamente distribuidas entre los inversores, no a microcaps especulativas. Esa es la parte de una lista de mayores caídas que suele sorprender. La liquidez y la cobertura de analistas no establecen un piso para el precio de una acción. Quien mantuvo una de estas posiciones como una parte desproporcionada de su cartera absorbió toda la caída. La página sobre el riesgo de mantener una sola acción mide ese riesgo mediante la volatilidad y las cifras de drawdown.

Qué proporción del mercado sube en 2026

Un ranking solo muestra los dos extremos. La amplitud muestra el conjunto: cómo se distribuye todo el universo filtrado, incluidos los fondos indexados, entre los valores que suben y los que bajan, agrupados según la magnitud del movimiento.

ConsultaAmplitud en lo que va del año: distribución del universo filtrado por rangos de rendimiento
gruponombresparticipación del lado (%)
Down 40%+1835.5
Down 20-40%6935.5
Down 10-20%7835.5
Down 0-10%16235.5
Up 0-10%15264.5
Up 10-25%19864.5
Up 25-50%14264.5
Up 50%+10364.5
El SQL exacto detrás de cada cifra
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN toDate('2026-01-01') AND today())
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
rets AS (
    SELECT e.ticker AS ticker, (e.latest_close / e.year_open - 1) * 100 AS ret
    FROM edges AS e
    INNER JOIN universe AS u ON e.ticker = u.ticker
    WHERE e.year_open >= 10
)
SELECT bucket,
       names,
       round(100 * sum(names) OVER (PARTITION BY side) / sum(names) OVER (), 1) AS side_share_pct
FROM (
    SELECT tup.1 AS bucket, tup.2 AS names, tup.3 AS ord, tup.4 AS side
    FROM (
        SELECT arrayJoin([
            ('Down 40%+',   countIf(ret < -40),               1, 'down'),
            ('Down 20-40%', countIf(ret >= -40 AND ret < -20), 2, 'down'),
            ('Down 10-20%', countIf(ret >= -20 AND ret < -10), 3, 'down'),
            ('Down 0-10%',  countIf(ret >= -10 AND ret < 0),   4, 'down'),
            ('Up 0-10%',    countIf(ret >= 0 AND ret < 10),    5, 'up'),
            ('Up 10-25%',   countIf(ret >= 10 AND ret < 25),   6, 'up'),
            ('Up 25-50%',   countIf(ret >= 25 AND ret < 50),   7, 'up'),
            ('Up 50%+',     countIf(ret >= 50),                8, 'up')
        ]) AS tup
        FROM rets
    )
)
ORDER BY ord
Pruébalo tú mismo

64.5% de los valores filtrados suben en el año y 35.5% bajan. La distribución es lo que oculta una tabla de las diez primeras posiciones. 18 valores se encuentran en el grupo de Down 40%+ en un extremo y 103 en el grupo de Up 50%+ en el otro, frente a 162 en Down 0-10% y 152 en Up 0-10% a cada lado de los valores sin cambios. En un año determinado, la mayor parte del mercado registra movimientos ordinarios. Los valores de las dos tablas anteriores son la excepción a partir de la cual se calculan los promedios.

Dónde se encuentra el mercado

El comportamiento anual de una sola acción se interpreta de otra manera frente al del propio mercado. Los cuatro principales ETFs de índices, durante exactamente el mismo periodo:

ConsultaLos cuatro principales ETF de índices, en lo que va del año, durante la misma ventana medida
etiquetarendimiento acumulado del año (%)medido desdemedido hasta
Russell 2000 (IWM)19.22026-01-022026-09-03
Nasdaq 100 (QQQ)15.72026-01-022026-09-03
S&P 500 (SPY)12.72026-01-022026-09-03
Dow (DIA)11.42026-01-022026-09-03
El SQL exacto detrás de cada cifra
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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 IN ('SPY', 'QQQ', 'DIA', 'IWM')
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
)
SELECT multiIf(ticker = 'SPY', 'S&P 500 (SPY)', ticker = 'QQQ', 'Nasdaq 100 (QQQ)',
               ticker = 'DIA', 'Dow (DIA)', ticker = 'IWM', 'Russell 2000 (IWM)', ticker) AS label,
    round((latest_close / year_open - 1) * 100, 1) AS ytd_return_pct,
    (SELECT toString(min(d)) FROM complete) AS measured_from_date,
    (SELECT toString(max(d)) FROM complete) AS measured_through_date
FROM edges
ORDER BY ytd_return_pct DESC
Pruébalo tú mismo

Tanto las dos tablas como el panel anterior se miden en un mismo periodo: desde la primera sesión completa de 2026 (2026-01-02) hasta la sesión completada más reciente (2026-09-03). En ese periodo, Russell 2000 (IWM) registró 19.2% y Dow (DIA) registró 11.4%. Todas las acciones de la tabla de mayores avances superaron ampliamente a los cuatro índices. Es el efecto aritmético de un índice: cientos de posiciones se promedian en una sola línea y sus movimientos individuales se compensan parcialmente. El spread por debajo de esa línea fue mucho más amplio que la propia línea, y la tabla comparativa sectorial del primer semestre clasifica los once sectores entre sí.

El split que falsea la variación acumulada en el año

Un split cambia el número de acciones y el precio por acción sin modificar el valor de una posición. En un periodo tan largo, muchas empresas realizan splits, y un cálculo de la variación acumulada en el año sin ajustar interpreta el cambio del precio por acción como rentabilidad. Cada uno de los nombres que aparecen abajo realizó en 2026 un split o pagó un dividendo en acciones suficientemente grande como para mover ese precio al menos una quinta parte. Además, todos superaron el mismo umbral de liquidez, por lo que podían aparecer en las tablas anteriores antes de que el filtro de splits los excluyera.

ConsultaExcluidas de los tableros: splits de 2026 lo bastante grandes para distorsionar el movimiento en lo que va del año
tickeracumulado del año sin ajustar (%)efecto del split en el precio (%)tipo de splitfecha del split
BKNG-96.4-96forward split2026-04-06
KLAC-86.3-90forward split2026-06-12
VGT-84.1-87.5forward split2026-04-21
CVNA-82.6-80forward split2026-05-08
VUG-81.9-83.3forward split2026-04-21
HDV-75.6-80forward split2026-04-29
IWF-74.1-75forward split2026-04-29
VO-71.7-75forward split2026-04-21
CRWD-54.6-75stock dividend2026-07-02
MNST-42.5-50stock dividend2026-08-11
APH-40.1-50stock dividend2026-09-03
MVLL4.3-66.7forward split2026-06-26
HON6.1100reverse split2026-06-29
DD224.3200reverse split2026-06-24
El SQL exacto detrás de cada cifra
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
split_terms AS (
    SELECT ticker,
        argMax(split_to, execution_date) AS new_shares,
        argMax(split_from, execution_date) AS old_shares,
        round((old_shares / new_shares - 1) * 100, 1) AS split_price_effect_pct,
        replaceAll(argMax(adjustment_type, execution_date), '_', ' ') AS split_type,
        toString(max(execution_date)) AS split_date
    FROM global_markets.stocks_splits
    WHERE execution_date BETWEEN toDate('2026-01-01') AND today()
    GROUP BY ticker
    HAVING new_shares > 0 AND old_shares > 0
       AND greatest(new_shares / old_shares, old_shares / new_shares) >= 1.25
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker IN (SELECT ticker FROM split_terms)
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
ranked AS (
    SELECT e.ticker AS ticker,
        round((e.latest_close / e.year_open - 1) * 100, 1) AS unadjusted_ytd_pct,
        s.split_price_effect_pct AS split_price_effect_pct,
        s.split_type AS split_type,
        s.split_date AS split_date
    FROM edges AS e
    INNER JOIN split_terms AS s ON e.ticker = s.ticker
    WHERE e.year_open >= 10 AND e.ticker IN (SELECT ticker FROM universe)
)
SELECT ticker, unadjusted_ytd_pct, split_price_effect_pct, split_type, split_date
FROM (
    SELECT ticker, unadjusted_ytd_pct, split_price_effect_pct, split_type, split_date,
           row_number() OVER (ORDER BY unadjusted_ytd_pct ASC) AS rn_low,
           row_number() OVER (ORDER BY unadjusted_ytd_pct DESC) AS rn_high
    FROM ranked
)
WHERE rn_low <= 14 OR rn_high = 1
ORDER BY unadjusted_ytd_pct ASC
Pruébalo tú mismo

BKNG mostraría -96.4% en una pantalla sin ajustar después de que un forward split moviera su precio por acción -96%, mientras que KLAC mostraría -86.3% después de que un forward split moviera su precio -90%. Ningún tenedor de esos valores perdió nada el día en que entró en vigor el split. El precio por acción se dividió y el número de acciones se multiplicó por el mismo factor. La columna de efecto del split aísla el cambio de precio atribuible únicamente al split. Esa es la parte que una pantalla sin ajustar interpreta como rentabilidad.

La última fila del panel funciona en sentido contrario: DD muestra 224.3% después de que un reverse split elevara su precio por acción 200%, aumentando el precio en lugar de reducirlo. Cualquier lista que omita este paso publica datos ficticios tanto en la parte superior como en la inferior. Por eso, la pantalla separa los tickers afectados por splits en lugar de intentar corregir sus precios. Un fondo puede aparecer en este panel con la misma facilidad que una empresa: los fondos indexados también realizan splits de sus participaciones, y esta pantalla cubre ambos casos.

Cómo se mide este filtro

Cada etapa del filtro, con el número de nombres que siguen incluidos después de aplicarla:

ConsultaEl filtro, etapa por etapa: cuántos nombres superan cada criterio
paso del filtronombres
Traded the first and the last full session4471
Averaging $100m+ a day over the past month1000
Opened 2026 above $10 a share970
Not on the excluded-fund list938
No split or stock dividend in 2026922
El SQL exacto detrás de cada cifra
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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

    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
flagged AS (
    SELECT ticker,
        year_open,
        ticker IN (SELECT ticker FROM universe) AS liquid,
        ticker NOT IN ('SPCX','KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL') AS not_geared,
        ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                       WHERE execution_date BETWEEN toDate('2026-01-01') AND today()) AS no_split
    FROM edges
)
SELECT tup.1 AS screen_step, tup.2 AS names
FROM (
    SELECT arrayJoin([
        ('Traded the first and the last full session', count()),
        ('Averaging $100m+ a day over the past month', countIf(liquid)),
        ('Opened 2026 above $10 a share', countIf(liquid AND year_open >= 10)),
        ('Not on the excluded-fund list', countIf(liquid AND year_open >= 10 AND not_geared)),
        ('No split or stock dividend in 2026', countIf(liquid AND year_open >= 10 AND not_geared AND no_split))
    ]) AS tup
    FROM flagged
)
Pruébalo tú mismo

El método, en detalle:

  • La ventana. Abarca desde la primera sesión completa de negociación de 2026 hasta la sesión completa más reciente registrada. Ambos extremos se obtienen de las barras de minutos. Una sesión cuenta solo cuando tiene el número completo de barras del horario regular. Así, un día que aún está en curso nunca se trata como terminado.
  • El rendimiento. Es la variación entre la primera apertura de la sesión regular del año y el último cierre de la sesión regular, calculada con barras de minutos. Se ignoran las operaciones del premarket y del after-hours. Son rendimientos de precio; los dividendos no se reinvierten. Por eso, un nombre de alto rendimiento por dividendo muestra aquí un resultado ligeramente inferior al de una cifra de rentabilidad total.
  • El mínimo de liquidez. Se exige un turnover promedio de al menos $100 millones por sesión durante los últimos 20 días calendario, contando solo las sesiones que transcurrieron completas. De lo contrario, una sesión parcial dividiría los dólares negociados de una parte del día entre un día completo y subestimaría el turnover de todos los nombres. Este único filtro reduce el universo de 4471 tickers a 1000.
  • El mínimo de precio. La acción debió abrir el año por encima de $10 por acción. Los nombres con precios inferiores a $10 generan porcentajes elevados a partir de pequeños movimientos de precio.
  • Los fondos apalancados e inversos se excluyen mediante una lista curada, que se muestra completa en el SQL debajo de cada tabla. Incluye los fondos ligados a índices con apalancamiento y los fondos de una sola acción que multiplican el movimiento diario de una empresa. Un fondo apalancado puede encabezar cualquier lista de mayores subidas sin que exista una sola noticia corporativa. La lista se mantiene manualmente, y esa es su debilidad: un fondo lanzado este mes solo se excluye después de que alguien lo agregue.
  • Los fondos ordinarios no se excluyen. Un ETF de índice o sectorial sin apalancamiento que cumpla los mínimos de liquidez y precio se clasifica aquí junto con las empresas operativas, y también se incluye en los recuentos de amplitud. Un fondo es una cesta de nombres que ya están contabilizados en el mismo universo. Por eso, esas filas deben leerse como el desempeño de la cesta, no como el desempeño de una sola empresa durante el año.
  • Splits. Cualquier ticker con un split o un dividendo en acciones efectivo durante 2026 se aparta, aunque el ratio sea pequeño. Es la opción conservadora: deja fuera a algunos valores con un desempeño genuino y evita publicar un cambio en el número de acciones como si fuera un rendimiento. El panel superior muestra los nombres excluidos cuyo split fue lo bastante grande como para falsear un movimiento.
  • Cotizaciones posteriores. Una empresa que comenzó a cotizar después de la primera sesión del año no tiene un precio de enero y queda fuera de estas tablas. Es una brecha real en un año con un calendario intenso de nuevas cotizaciones.
  • El resultado. Se clasifican 922 nombres. Los diez primeros y los diez últimos forman las dos tablas de esta página.

La misma pregunta en tres ventanas

El rendimiento en lo que va del año es un peldaño de una escala, y el movimiento cambia según el horizonte. La vista semanal muestra las mayores ganancias y pérdidas de acciones de esta semana, la mensual muestra las mayores variaciones de acciones de este mes y esta página cubre el año. Los filtros cambian en cada peldaño: esta página exige un promedio de $100 millones negociados al día durante el último mes, mientras que las páginas semanal y mensual filtran por el total de dólares negociados dentro de sus propios periodos. Por eso, una acción puede superar el filtro de una página y quedar fuera de otra. Una acción que encabeza la tabla semanal tras una reacción a resultados suele quedar a mitad de la tabla en el acumulado del año. Para conocer el contexto más amplio de lo que va del año, el balance del mercado en el primer semestre incluye detalles sobre índices, tasas y sectores, mientras que cómo funcionan los ETFs apalancados explica por qué los fondos con apalancamiento se excluyen aquí.

Preguntas frecuentes

¿Cuál es la acción con mejor desempeño en 2026?

Entre las acciones que promedian al menos $100 millones de negociación diaria, comenzaron el año por encima de $10, no realizaron splits en 2026 y no figuran en la lista de fondos apalancados, SNDK es la acción con mejor desempeño de 2026 hasta la fecha, con una subida de 536.4% desde la primera sesión del año. MRNA ocupa el segundo lugar, con 399%.

¿Qué acciones han caído más en 2026?

TTD es la acción con peor desempeño de 2026 en esta selección, con una caída de -60.5%, seguida de WING, con -54.4%. La lista completa de las acciones con mayores pérdidas en 2026 aparece en la segunda tabla anterior y se actualiza a medida que avanza el año.

¿Cómo se calcula el rendimiento de una acción en lo que va del año?

El rendimiento en lo que va del año compara el precio más reciente con el precio al inicio del año calendario y expresa el cambio como porcentaje. En este caso, se compara la apertura de la primera sesión regular de 2026 con el cierre de la sesión completada más reciente. Las acciones que realizaron un split durante el año se excluyen en lugar de ajustarse, por lo que no se aplica ningún factor de ajuste entre el lector y la cinta de operaciones.

¿Los ETFs apalancados están incluidos en la lista de acciones con mayores subidas de 2026?

No. Un fondo apalancado o inverso multiplica el movimiento diario de un índice o de una sola acción, por lo que suele encabezar una lista de valores con mayores movimientos sin que exista una noticia corporativa detrás. Esos fondos se eliminan por nombre antes de la clasificación, y la lista puede consultarse en el SQL debajo de cada tabla. Los ETFs ordinarios de índices y sectores son un caso distinto: deben superar los mismos umbrales que cualquier acción y se clasifican aquí, por lo que un fondo puede aparecer en cualquiera de las dos listas.


Cada tabla utiliza una consulta almacenada con su SQL adjunto. Expande cualquier panel para auditar la selección o vuelve a generarla con tus propios umbrales en la terminal de Strasmore.

#market movers#gainers and losers#year to date#stock splits#market breadth