Strasmore Research
Ringkasan pasaran Matt ConnorOleh Matt Connor · Dikemas kini 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Saham Paling Untung dan Rugi 2026

Senarai prestasi saham terbaik dan terburuk bagi tahun 2026 berdasarkan data bursa sebenar dengan mengecualikan pecahan saham serta dana berleveraj.

Saham dengan prestasi terbaik bagi tahun 2026 setakat ini diterajui oleh SNDK, meningkat sebanyak 554.9% dari sesi pembukaan tahun ini sehingga sesi terakhir yang lengkap. Halaman ini menyenaraikan saham dengan kenaikan dan penurunan terbesar bagi tahun 2026 dalam kalangan nama yang benar-benar didagangkan, diukur daripada pita bursa dan bukannya ringkasan vendor, serta dikemas kini sepanjang tahun berjalan. Pecahan saham dan dana berleveraj dikeluarkan sebelum sebarang kedudukan ditentukan, yang merupakan punca utama kebanyakan senarai setakat tahun ini menjadi tidak tepat.

Pemenang saham terbesar bagi 2026

Setiap nama di bawah telah melepasi lantai kecairan sebelum kedudukannya ditentukan: purata sekurang-kurangnya $100 juta nilai saham yang didagangkan bagi setiap sesi yang lengkap sepanjang bulan lalu. Peratusan yang besar pada saham yang tidak didagangkan hanyalah sebut harga, bukannya hasil sebenar.

PertanyaanSaham dengan kenaikan tertinggi 2026: sepuluh teratas setakat tahun ini dalam nama yang banyak didagangkan
SQL tepat di sebalik setiap nombor
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

SNDK menerajui tahun ini pada 554.9%, diikuti oleh MXL pada 386.3% dan AEHR di tempat ketiga pada 345%. Di tempat kesepuluh, AAOI masih meningkat sebanyak 204.3%, maka keseluruhan jadual ini telah jauh mengatasi mana-mana indeks luas.

Lajur dolar di sebelah setiap pergerakan memberikan maklumat yang sama penting dengan peratusan. AAOI mencatatkan purata pusingan modal sebanyak $817 juta sehari. SNDK di kedudukan teratas mencatatkan purata $18348 juta. Setiap nama di sini melepasi $100 juta sehari, dan julat di atas lantai tersebut adalah cukup luas sehingga peratusan tajuk berita yang sama membawa maksud berbeza pada kedua-dua hujungnya. Saham dengan volum rendah lebih mudah melonjak tetapi lebih sukar untuk dijual pada harga yang dipaparkan di skrin.

Saham dengan kerugian terbesar pada 2026

Ukuran yang sama, tetapi secara terbalik: penurunan tahun semasa yang paling mendalam bagi nama-nama yang melepasi tahap kecairan yang sama.

PertanyaanSaham dengan penurunan terbesar 2026: sepuluh terburuk setakat tahun ini dalam nama yang banyak didagangkan
SQL tepat di sebalik setiap nombor
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

Penurunan tahun semasa yang paling mendalam adalah milik EOSE pada -65.9%, diikuti oleh CSGP pada -58.7%. Di tempat kesepuluh dalam senarai ini, TEAM berada pada -47.3%. Beberapa nama di sini merupakan syarikat besar yang dipegang secara meluas dan bukannya syarikat mikro spekulatif, yang merupakan bahagian dalam senarai kerugian yang mengejutkan orang ramai. Kecairan dan liputan penganalisis tidak menjamin harga saham tidak akan jatuh. Sesiapa yang memegang salah satu saham ini sebagai bahagian yang besar dalam portfolio akan mengalami kesan penurunan sepenuhnya, yang diukur melalui angka volatiliti dan drawdown dalam risiko memegang satu saham.

Berapa banyak pasaran yang meningkat pada 2026

Carta kedudukan hanya menunjukkan dua bahagian hujung. Breadth menunjukkan keseluruhan trend: bagaimana keseluruhan alam semesta yang ditapis, termasuk dana indeks, terbahagi antara nama yang meningkat dan menurun, mengikut saiz pergerakan.

PertanyaanBreadth setakat tahun ini: taburan alam semesta saringan mengikut bakul pulangan
SQL tepat di sebalik setiap nombor
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% daripada nama yang ditapis lebih tinggi pada tahun ini dan 38.1% adalah lebih rendah. Taburan ini menunjukkan apa yang disembunyikan oleh jadual sepuluh teratas. 22 nama berada dalam bakul Down 40%+ di satu hujung dan 130 dalam bakul Up 50%+ di hujung yang lain, berbanding 146 dalam Down 0-10% dan 159 dalam Up 0-10% di kedua-dua belah bahagian tidak berubah. Kebanyakan pasaran menunjukkan pergerakan biasa pada mana-mana tahun, dan nama-nama dalam dua jadual di atas adalah pengecualian yang membentuk purata tersebut.

Kedudukan pasaran semasa

Prestasi tahunan sesuatu saham adalah berbeza berbanding prestasi pasaran secara keseluruhan. Empat ETF indeks utama bagi tempoh yang sama tepat:

PertanyaanEmpat ETF index utama, setakat tahun ini, dalam tempoh pengukuran yang sama
SQL tepat di sebalik setiap nombor
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

Kedua-dua papan dan panel di atas diukur dalam satu tempoh: sesi penuh pertama tahun 2026 (2026-01-02) sehingga sesi terakhir yang lengkap (2026-07-22). Sepanjang tempoh tersebut, Russell 2000 (IWM) memberikan pulangan sebanyak 18.6% dan Dow (DIA) memberikan pulangan sebanyak 8.2%. Setiap nama dalam jadual pengaut (gainers) mengatasi keempat-empat indeks tersebut dengan margin yang besar, yang merupakan kesan pengiraan indeks: ratusan pegangan yang dirangkumkan ke dalam satu baris, di mana pergerakan individu saling membatalkan antara satu sama lain. Jurang di bawah baris tersebut adalah jauh lebih luas daripada baris itu sendiri, dan skor sektor untuk separuh pertama menyusun kesemua sebelas sektor antara satu sama lain.

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.

PertanyaanDikecualikan daripada papan: split 2026 yang cukup besar untuk memalsukan pergerakan setakat tahun ini
SQL tepat di sebalik setiap nombor
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.

Bagaimana skrin ini diukur

Setiap peringkat skrin, bersama jumlah nama yang masih tersenarai selepasnya:

PertanyaanSaringan, langkah demi langkah: berapa banyak nama yang melepasi setiap penapis
SQL tepat di sebalik setiap nombor
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
)

Kaedah lengkap yang digunakan:

  • Tempoh masa. Sesi dagangan penuh pertama tahun 2026 sehingga sesi penuh terbaharu pada carta. Kedua-dua titik akhir dibaca daripada bar minit, dan satu sesi hanya dikira apabila ia mempunyai jumlah bar waktu biasa yang lengkap, jadi hari yang masih berjalan tidak akan dianggap selesai.
  • Pulangan. Harga pembukaan sesi biasa pertama tahun ini berbanding penutupan sesi biasa terakhir, dikira daripada bar minit. Harga pra-pasaran dan selepas waktu pasaran diabaikan. Ini adalah pulangan harga; dividen tidak ditambah semula, jadi saham berpulangan tinggi akan kelihatan sedikit lebih rendah berbanding angka pulangan jumlah.
  • Had kecairan. Purata sekurang-kurangnya $100 juta pusingan modal waktu biasa bagi setiap sesi dalam tempoh 20 hari kalendar, dengan hanya mengira sesi yang berjalan dari mula hingga tamat. Sesi separa akan membahagikan sebahagian nilai harian dengan jumlah hari penuh dan akan merendahkan nilai pusingan modal setiap nama. Penapis tunggal ini mengurangkan jumlah daripada 4492 ticker kepada 1036.
  • Had harga. Saham dibuka pada tahun ini melebihi $10 sesaham. Saham di bawah $10 menghasilkan peratusan yang besar daripada perubahan harga yang kecil.
  • Dana leveraj dan songsang dikecualikan melalui senarai terpilih, yang disenaraikan sepenuhnya dalam SQL di bawah setiap jadual. Ia merangkumi dana bergear indeks dan dana saham tunggal yang menggandakan pergerakan harian sesebuah syarikat. Dana bergear boleh menduduki tempat teratas dalam mana-mana senarai pergerakan besar tanpa sebarang berita syarikat. Senarai ini dikemas kini secara manual, yang merupakan kelemahannya: dana yang dilancarkan bulan ini hanya akan dikecualikan setelah seseorang menambahnya ke dalam senarai.
  • Dana biasa tidak ditapis keluar. ETF indeks atau sektor tanpa leveraj yang melepasi had kecairan dan harga akan disusun di sini bersama syarikat operasi, dan ia juga dikira dalam jumlah keluasan pasaran. Dana adalah bakul nama yang sudah dikira dalam alam semesta yang sama, jadi baca baris tersebut sebagai prestasi bakul tersebut dan bukannya sebagai prestasi satu syarikat bagi setahun.
  • Pecahan saham. Mana-mana ticker dengan pecahan saham atau dividen saham yang berkuat kuasa semasa 2026 akan diketepikan, tidak kira betapa kecil nisbahnya. Itu adalah pilihan yang konservatif: ia menyebabkan beberapa syarikat berprestasi tinggi kehilangan tempat dalam senarai, dan ia tidak pernah menerbitkan perubahan jumlah saham sebagai pulangan. Panel di atas menunjukkan nama-nama yang dikecualikan yang mempunyai pecahan saham yang cukup besar untuk memalsukan pergerakan harga.
  • Senarai baharu lewat. Syarikat yang disenaraikan selepas sesi pertama tahun ini tidak mempunyai harga Januari dan tiada dalam jadual ini, yang merupakan jurang sebenar dalam tahun dengan kalendar penyenaraian baharu yang padat.
  • Keputusan. 954 nama disusun, dan sepuluh teratas serta sepuluh terbawah daripadanya adalah dua papan maklumat di halaman ini.

Persoalan yang sama merentasi tiga tempoh masa

Prestasi setakat tahun ini hanyalah satu anak tangga, dan pergerakan kelihatan berbeza pada setiap tempoh. Pandangan mingguan menunjukkan saham dengan keuntungan dan kerugian terbesar minggu ini, pandangan bulanan menunjukkan saham dengan pergerakan terbesar bulan ini, manakala halaman ini menunjukkan prestasi tahunan. Kriteria penilaian berbeza mengikut tempoh: halaman ini menapis berdasarkan purata $100 juta sehari sepanjang bulan lalu, manakala halaman mingguan dan bulanan menapis berdasarkan jumlah nilai dagangan dalam tempoh masing-masing, jadi sesuatu saham boleh mendahului satu senarai tetapi tidak dalam senarai yang lain. Saham yang berada di kedudukan teratas senarai mingguan akibat reaksi pendapatan selalunya hanya berada di kedudukan tengah bagi prestasi tahunan. Untuk naratif yang lebih luas mengenai pasaran setakat ini, ringkasan pasaran separuh pertama tahun ini menyediakan butiran indeks, kadar faedah dan sektor, manakala cara kerja ETF leveraj menjelaskan mengapa dana berleveraj tidak disertakan di sini.

FAQ

Apakah saham dengan prestasi terbaik pada tahun 2026?

Antara nama yang mempunyai purata dagangan sekurang-kurangnya $100 juta sehari, dibuka tahun ini melebihi $10, tidak mempunyai pecahan saham (split) pada tahun 2026 dan tidak tersenarai dalam senarai dana leveraj, SNDK merupakan saham dengan prestasi terbaik bagi tahun 2026 setakat ini, meningkat sebanyak 554.9% dari sesi pertama tahun ini. MXL berada di kedudukan kedua dengan peningkatan 386.3%.

Apakah saham yang mengalami kejatuhan paling besar pada tahun 2026?

EOSE merupakan saham dengan prestasi terburuk bagi tahun 2026 dalam skrin ini pada -65.9%, mendahului CSGP pada -58.7%. Senarai penuh saham dengan kerugian terbesar bagi tahun 2026 terdapat dalam jadual kedua di atas, yang dikemas kini sepanjang tahun berjalan.

Bagaimanakah pulangan saham year-to-date dikira?

Pulangan year-to-date membandingkan harga terkini dengan harga pada permulaan tahun kalendar dan menyatakan perubahan tersebut dalam bentuk peratusan. Di sini, ia mengukur pembukaan sesi biasa pertama tahun 2026 berbanding penutupan sesi lengkap yang paling terkini. Saham yang melakukan split semasa tahun berjalan diketepikan dan bukannya dilaraskan, supaya tiada faktor pelarasan antara pembaca dan data pasaran.

Adakah ETF leveraj termasuk dalam senarai pemenang tahun 2026?

Tidak. Dana leveraj atau songsang (inverse) menggandakan pergerakan harian sesuatu indeks atau saham tunggal, jadi ia sering menduduki senarai pemenang tanpa sebarang berita syarikat di sebaliknya. Dana-dana tersebut dikeluarkan mengikut nama sebelum kedudukan disusun, dan senarai tersebut boleh dilihat dalam SQL di bawah setiap jadual. ETF indeks dan sektor biasa adalah kes yang berbeza: ia melepasi kriteria yang sama seperti mana-mana saham dan disusun di sini, jadi sesuatu dana boleh muncul dalam mana-mana papan senarai.


Setiap jadual di sini adalah pertanyaan tersimpan (stored query) dengan SQL yang disertakan. Kembangkan mana-mana panel untuk menyemak skrin tersebut, atau bina semula menggunakan kriteria anda sendiri pada terminal Strasmore.