Strasmore Research
Market recaps Matt ConnorNi Matt Connor · Na-update noong 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Pinakamalaking stock gainers at losers ng 2026

Narito ang listahan ng mga top performing stocks at biggest losers ngayong 2026 base sa exchange tape. Hindi kasama ang stock splits at leveraged funds dito.

Ang mga pinakamahusay na stocks ngayong 2026 ay pinamumunuan ng SNDK, na tumaas ng 554.9% mula sa opening session ng taon hanggang sa pinakabagong session. Niraranggo ng pahinang ito ang pinakamalaking stock gainers at losers ng 2026 sa mga pangalang aktwal na nagte-trade, base sa exchange tape sa halip na vendor summary, at nagre-refresh habang tumatakbo ang taon. Tinatanggal ang stock splits at leveraged funds bago ang anumang ranking, na siyang karaniwang pagkakamali sa maraming year-to-date lists.

Pinakamalaking stock gainers ng 2026

Ang bawat pangalan sa ibaba ay umabot sa liquidity floor bago itinalaga: may average na hindi bababa sa $100 million na stock ang nagpalit ng kamay bawat session sa nakalipas na isang buwan. Ang malaking percentage sa isang stock na walang nagte-trade ay isang quote lamang, hindi resulta.

QueryPinakamalaking stock gainers ng 2026: top ten year to date sa mga heavily traded names
Ang eksaktong SQL sa likod ng bawat numero
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

Nangunguna ang SNDK sa taon sa 554.9%, kasunod ang MXL sa 386.3%, at ang AEHR sa 345%. Ang pang-sampung pwesto sa listahan, ang AAOI, ay up pa rin ng 204.3%, kaya ang buong table ay mas mabilis ang pagtakbo kumpara sa anumang broad index.

Ang dollar column sa tabi ng bawat move ay may impormasyon na kasinghalaga ng percentage. Ang AAOI ay may average na humigit-kumulang $817 million na turnover bawat araw. Ang SNDK sa tuktok ng board ay may average na $18348 million. Ang bawat pangalan dito ay lumalagpas sa $100 million bawat araw, at ang range sa itaas ng floor na iyon ay sapat na malawak kaya ang parehong headline percentage ay may magkaibang kahulugan sa magkabilang dulo nito. Ang isang thin name ay mas madaling itulak at mas mahirap exit sa presyong nakikita sa screen.

Pinakamalaking stock losers ng 2026

Ang parehong sukat, sa kabaligtaran: ang pinakamabilis na year-to-date decline sa mga pangalan na bumaba sa parehong liquidity floor.

QueryPinakamalaking stock losers ng 2026: worst ten year to date sa mga heavily traded names
Ang eksaktong SQL sa likod ng bawat numero
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

Ang pinakamabilis na year-to-date decline ay mula sa EOSE sa -65.9%, na sinusundan ng CSGP sa -58.7%. Ang ikasampung nasa listahan, ang TEAM, ay nasa -47.3%. Maraming pangalan dito ang malalaki at widely held na mga kumpanya sa halip na mga speculative micro caps, na isang bahagi ng loser list na nakakagulat sa marami. Ang liquidity at analyst coverage ay hindi nagsisilbing floor para sa share price. Ang sinumang may hawak ng isa sa mga ito bilang malaking bahagi ng portfolio ay nakaranas ng buong paggalaw, na sinusukat ng risk of holding one stock page gamit ang volatility at drawdown numbers.

Gaano karami ang umaangat sa market ngayong 2026

Ang leaderboard ay nagpapakita lamang ng dalawang dulo. Ang breadth ang nagpapakita ng kabuuan: kung paano nahahati ang lahat ng screened universe, kasama ang index funds, sa pagitan ng mga advancing at declining na pangalan, base sa laki ng galaw.

QueryYear-to-date breadth: distribution ng screened universe sa return buckets
Ang eksaktong SQL sa likod ng bawat numero
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

61.9% sa mga screened names ang mas mataas ngayong taon at 38.1% ang mas mababa. Ang distribution ang nagpapakita ng hindi nakikita sa top-ten table. 22 na mga pangalan ang nasa Down 40%+ bucket sa isang dulo at 130 sa Up 50%+ bucket sa kabilang dulo, laban sa 146 sa Down 0-10% at 159 sa Up 0-10% sa magkabilang panig ng unchanged. Karamihan sa market ay gumagawa lamang ng ordinaryong galaw sa anumang taon, at ang mga pangalan sa dalawang table sa itaas ang mga exception kung saan nagmumula ang mga average.

Ang kasalukuyang kalagayan ng merkado

Iba ang takbo ng isang indibidwal na stock kumpara sa kabuuan ng merkado. Narito ang apat na major index ETFs sa parehong window:

QueryAng apat na major index ETFs, year to date, sa parehong measured window
Ang eksaktong SQL sa likod ng bawat numero
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

Ang parehong board at ang panel sa itaas ay sinusukat sa iisang window: mula sa unang full session ng 2026 (2026-01-02) hanggang sa pinakabagong tapos na session (2026-07-22). Sa loob nito, ang Russell 2000 (IWM) ay nagkaroon ng 18.6% return at ang Dow (DIA) ay nagkaroon ng 8.2% return. Ang lahat ng nasa gainers table ay lumampas nang malaki sa apat na ito, na resulta ng arithmetic ng isang index: ang daan-daang holdings ay averaged sa isang linya, kung saan ang mga indibidwal na galaw ay bahagyang nagkakansela sa isa't isa. Ang spread sa ilalim ng linyang iyon ay mas malawak kaysa sa mismong linya, at ang sector scorecard para sa first half ay nagraranggo sa lahat ng labing-isang sektor laban sa isa't isa.

The stock split that fakes a year-to-date move

A split changes the share count and the per-share price without changing what a holding is worth. Over a window this long many companies split, and an unadjusted year-to-date calculation reads the change in the per-share price as performance. The names below each carried a 2026 split or stock dividend large enough to move that price by at least a fifth, and each cleared the same liquidity floor, so each was eligible for the boards above before the split filter removed it.

QueryExcluded sa boards: 2026 splits na sapat ang laki para mag-fake ng year-to-date move
Ang eksaktong SQL sa likod ng bawat numero
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

BKNG would print -96.7% on an unadjusted screen after a forward split moved its per-share price -96%, and CVNA would print -85.1% after a forward split moved its price -80%. No holder of either lost anything on the day the split took effect. The per-share price was divided and the share count was multiplied by the same factor. The split effect column isolates the price change the split alone accounts for, which is the part an unadjusted screen reads as performance.

The last row of the panel runs the other way: DD shows 245.3% after a reverse split lifted its per-share price 200%, raising the price instead of cutting it. Any list that skips this step publishes fiction at the top and the bottom simultaneously, which is why the screen sets split tickers aside rather than trying to patch their prices. A fund can land in this panel as easily as a company: index funds split their shares too, and this screen covers both.

Paano sinusukat ang screen na ito

Bawat yugto ng screen, kasama ang bilang ng mga pangalan na natitira pagkatapos nito:

QueryAng screen, stage by stage: kung ilang names ang sumurvive sa bawat filter
Ang eksaktong SQL sa likod ng bawat numero
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
)

Ang buong metodolohiya:

  • Ang window. Ang unang buong trading session ng 2026 hanggang sa pinakabagong buong session sa tape. Ang parehong endpoints ay binabasa mula sa mga minute bar, at ang isang session ay binibilang lamang kung may kumpletong regular-hours bar count, kaya ang araw na kasalukuyan pa lamang ay hindi itinuturing na tapos na.
  • Ang return. Ang unang regular-session open ng taon laban sa huling regular-session close, na kinukuwenta mula sa mga minute bar. Hindi isinasama ang mga premarket at after-hours prints. Ito ay mga price return; hindi idinaragdag ang mga dividend, kaya ang isang high-yield na pangalan ay magmumulang mas mababa rito kumpara sa ipinapakitang total-return figure.
  • Ang liquidity floor. Isang average na hindi bababa sa $100 million na regular-hours turnover bawat session sa nakalipas na 20 calendar days, na binibilang lamang ang mga session na tumakbo mula simula hanggang dulo. Kung hindi, ang isang partial session ay maghahati sa bahagi ng halaga ng isang araw sa isang buong araw, na magpapababa sa turnover ng bawat pangalan. Ang filter na ito ay nagbabawas sa field mula 4492 tickers patungong 1036.
  • Ang price floor. Ang stock ay nag-open sa simula ng taon nang mas mataas sa $10 bawat share. Ang mga pangalang sub-$10 ay nagbubunga ng malalaking porsyento mula sa maliliit na price steps.
  • Leveraged at inverse funds ay hindi kasama sa pamamagitan ng isang curated list, na nakatala nang buo sa SQL sa ilalim ng bawat table. Sakop nito ang mga index-geared funds at ang mga single-stock funds na nagmu-multiply ng daily move ng isang kumpanya. Ang isang geared fund ay maaaring maging nangunguna sa anumang raw movers list nang walang kahit isang balita tungkol sa kumpanya. Ang listahang ito ay manu-manong pinapanatili, na siyang kahinaan nito: ang isang fund na inilunsad ngayong buwan ay hindi lamang mawawala hangga't hindi ito idinaragdag ng isang tao.
  • Hindi tinatanggal ang mga ordinary funds. Ang isang unlevered index o sector ETF na nakapasa sa liquidity at price floors ay niraranggo rito kasama ang mga operating companies, at kasama rin ito sa breadth counts. Ang isang fund ay basket ng mga pangalan na nabibilang na sa parehong universe, kaya basahin ang mga row na iyon bilang kung ano ang ginawa ng basket sa halip na bilang taon ng isang kumpanya.
  • Splits. Anumang ticker na may split o stock dividend na magkakabisa sa loob ng 2026 ay isinasantabi, gaano man kaliit ang ratio. Ito ang konserbatibong desisyon: nawawalan ng pwesto sa board ang ilang tunay na performers, at hindi nito inilalathala ang pagbabago sa share-count bilang return. Ipinapakita ng panel sa itaas ang mga excluded na pangalan na ang split ay sapat na laki upang magpalsipika ng galaw.
  • Late listings. Ang isang kumpanya na nag-list pagkatapos ng unang session ng taon ay walang January price at wala sa mga table na ito, na isang tunay na gap sa isang taon na may maraming bagong-listing sa kalendaryo.
  • Ang resulta. 954 na mga pangalan ang niraranggo, at ang top at bottom ten sa mga ito ang dalawang board sa pahinang ito.

Ang parehong tanong sa tatlong window

Ang year to date ay isang baitang ng hagdan, at nag-iiba ang hitsura ng paggalaw sa bawat haba ng panahon. Ang week view ay ang pinakamalaking stock gainers at losers ngayong linggo, ang month view ay ang pinakamalaking stock movers ngayong buwan, at ang page na ito ay para sa taon. Magkakaiba ang basehan ng bawat baitang: ang page na ito ay nag-i-screen sa average na $100 million kada araw sa nakalipas na buwan, habang ang week at month pages ay nag-i-screen sa total dollars traded sa loob ng kanilang sariling window, kaya maaaring makalusot ang isang pangalan sa isang board ngunit hindi sa iba. Ang isang pangalan na nangunguna sa weekly board dahil sa isang earnings reaction ay madalas na nasa gitna lamang ng listahan para sa buong taon. Para sa mas malawak na naratibo sa likod ng taon hanggang ngayon, ang first-half market recap ay naglalaman ng detalye sa index, rates, at sector, at ang how leveraged ETFs work ay nagpapaliwanag kung bakit hiwalay ang mga geared funds dito.

FAQ

Ano ang best performing stock ng 2026?

Sa mga pangalan na may average na hindi bababa sa $100 million ang trading kada araw, nagbukas ang taon sa itaas ng $10, walang 2026 split, at wala sa leveraged-fund list, ang SNDK ang best performing stock ng 2026 hanggang ngayon, na tumaas ng 554.9% mula sa unang session ng taon. Ang MXL ang nasa ikalawang pwesto sa 386.3%.

Anong mga stocks ang may pinakamalaking pagbaba sa 2026?

Ang EOSE ang worst performing stock ng 2026 sa screen na ito sa -65.9%, na mas mababa kaysa sa CSGP sa -58.7%. Ang kumpletong listahan ng pinakamalaking stock losers ng 2026 ay nasa ikalawang table sa itaas, na ina-update habang tumatagal ang taon.

Paano kinakalkula ang year-to-date stock return?

Ang year-to-date return ay ikinukumpara ang pinakabagong presyo sa presyo sa simula ng calendar year at ipinapakita ang pagbabago bilang percentage. Dito, ang unang regular-session open ng 2026 ang ikinukumpara sa pinakabagong completed session's close. Ang mga stocks na nag-split sa loob ng taon ay hindi isinasama sa adjustment, kaya walang adjustment factor sa pagitan ng mambabasa at ng tape.

Kasama ba ang mga leveraged ETF sa 2026 gainers list?

Hindi. Ang isang leveraged o inverse fund ay pinararami ang daily move ng isang index o isang single stock, kaya madalas itong nangunguna sa raw movers list kahit walang balita tungkol sa kumpanya. Ang mga fund na iyon ay tinatanggal bago ang ranking, at ang listahan ay makikita sa SQL sa ilalim ng bawat table. Ang mga ordinaryong index at sector ETF ay ibang usapan: pumapasa sila sa parehong floors gaya ng anumang stock at naka-rank dito, kaya maaaring lumabas ang isang fund sa alinman sa dalawang board.


Ang bawat table dito ay isang stored query na may kalakip na SQL. I-expand ang anumang panel para i-audit ang screen, o i-rebuild ito gamit ang sarili mong floors sa Strasmore terminal.