Saham Gainers dan Losers Terbesar 2026
Daftar saham dengan performa terbaik dan terburuk di tahun 2026 berdasarkan data tape bursa. Peringkat ini mengecualikan stock split dan leveraged funds.
Saham dengan performa terbaik di tahun 2026 sejauh ini dipimpin oleh SNDK, naik 554.9% sejak sesi pembukaan tahun hingga sesi terakhir yang telah selesai. Halaman ini meranking saham dengan kenaikan dan penurunan terbesar di tahun 2026 di antara nama-nama yang benar-benar diperdagangkan, diukur berdasarkan tape bursa dan bukan ringkasan vendor, serta diperbarui selama tahun berjalan. Stock split dan leveraged funds dikeluarkan sebelum dilakukan perankingan, yang merupakan penyebab umum kesalahan pada sebagian besar daftar year-to-date.
Saham dengan kenaikan terbesar tahun 2026
Setiap nama di bawah ini telah melewati ambang batas likuiditas sebelum peringkatnya ditentukan: rata-rata setidaknya $100 juta nilai saham yang diperdagangkan per sesi selama satu bulan terakhir. Persentase besar pada saham yang tidak diperdagangkan hanyalah sebuah kutipan, bukan hasil nyata.
SQL tepat di balik setiap angka
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 10SNDK memimpin tahun ini pada 554.9%, diikuti oleh MXL pada 386.3%, dan AEHR di posisi ketiga pada 345%. Peringkat kesepuluh, AAOI, masih naik 204.3%, sehingga seluruh tabel telah melampaui kinerja indeks luas mana pun.
Kolom dolar di samping setiap pergerakan memberikan informasi yang sama pentingnya dengan persentase. AAOI rata-rata mencatat turnover sebesar $817 juta per hari. SNDK di posisi teratas mencatat rata-rata $18348 juta. Setiap nama di sini melampaui $100 juta per hari, dan rentang di atas ambang batas tersebut cukup lebar sehingga persentase yang sama dapat memiliki dua makna berbeda pada kedua ujungnya. Saham dengan likuiditas rendah lebih mudah digerakkan namun lebih sulit untuk keluar pada harga yang tertera di layar.
Saham dengan penurunan terbesar tahun 2026
Metode yang sama, namun dalam arah sebaliknya: penurunan tahun berjalan (year-to-date) terdalam di antara saham yang melewati ambang batas likuiditas yang sama.
SQL tepat di balik setiap angka
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 10Penurunan tahun berjalan terdalam dialami oleh EOSE sebesar -65.9%, diikuti oleh CSGP sebesar -58.7%. Peringkat kesepuluh dalam daftar ini adalah TEAM yang berada di level -47.3%. Beberapa nama dalam daftar ini merupakan perusahaan besar dengan kepemilikan luas, bukan micro cap spekulatif, yang merupakan bagian dari daftar saham pengamat yang mengejutkan banyak orang. Likuiditas dan cakupan analis tidak menjamin harga saham tetap stabil. Siapa pun yang memegang salah satu saham ini dalam porsi besar di portofolio akan merasakan dampak penuhnya, yang diukur melalui angka volatilitas dan drawdown pada halaman risiko memegang satu saham.
Berapa banyak pasar yang menguat pada 2026
Leaderboard hanya menunjukkan dua ujung ekstrem. Breadth menunjukkan inti pasar: bagaimana seluruh universe yang dipindai, termasuk index funds, terbagi antara saham yang naik dan turun, dikelompokkan berdasarkan besarnya pergerakan.
SQL tepat di balik setiap angka
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 ord61.9% dari nama yang dipindai mengalami kenaikan tahunan dan 38.1% mengalami penurunan. Distribusi menunjukkan apa yang disembunyikan oleh tabel top-ten. 22 nama berada di bucket Down 40%+ di satu sisi dan 130 di bucket Up 50%+ di sisi lain, berlawanan dengan 146 di Down 0-10% dan 159 di Up 0-10% di kedua sisi kategori tidak berubah. Sebagian besar pasar melakukan pergerakan biasa pada tahun tertentu, dan nama-nama dalam dua tabel di atas adalah pengecualian yang membentuk angka rata-rata.
Posisi pasar saat ini
Kinerja satu saham akan terlihat berbeda jika dibandingkan dengan kinerja pasar. Berikut adalah empat ETF indeks utama dalam periode yang sama persis:
SQL tepat di balik setiap angka
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 DESCBursa dan panel di atas diukur dalam satu periode: sesi penuh pertama tahun 2026 (2026-01-02) hingga sesi terakhir yang telah selesai (2026-07-22). Selama periode tersebut, Russell 2000 (IWM) memberikan imbal hasil sebesar 18.6% dan Dow (DIA) memberikan imbal hasil sebesar 8.2%. Setiap nama dalam tabel kenaikan melampaui keempatnya dengan margin yang lebar, yang merupakan hasil perhitungan sebuah indeks: ratusan aset yang dirata-ratakan menjadi satu baris, di mana pergerakan individu saling meniadakan sebagian. Spread di bawah baris tersebut jauh lebih lebar daripada baris itu sendiri, dan skor sektor untuk semester pertama mengurutkan kesebelas sektor satu sama lain.
Stock split yang memalsukan pergerakan year-to-date
Stock split mengubah jumlah saham dan harga per saham tanpa mengubah nilai kepemilikan. Dalam rentang waktu selama ini, banyak perusahaan melakukan split, dan perhitungan year-to-date yang tidak disesuaikan akan membaca perubahan harga per saham sebagai performa. Nama-nama di bawah ini masing-masing memiliki split atau dividen saham tahun 2026 yang cukup besar untuk menggerakkan harga setidaknya seperlima, dan masing-masing telah melewati ambang batas likuiditas yang sama, sehingga masing-masing memenuhi syarat untuk papan di atas sebelum filter split menghapusnya.
SQL tepat di balik setiap angka
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 ASCBKNG akan menampilkan -96.7% pada layar yang tidak disesuaikan setelah forward split menggerakkan harga per sahamnya sebesar -96%, dan CVNA akan menampilkan -85.1% setelah forward split menggerakkan harganya sebesar -80%. Tidak ada pemegang saham dari keduanya yang mengalami kerugian pada hari saat split berlaku. Harga per saham dibagi dan jumlah saham dikalikan dengan faktor yang sama. Kolom efek split mengisolasi perubahan harga yang disebabkan oleh split saja, yang merupakan bagian yang dibaca oleh layar yang tidak disesuaikan sebagai performa.
Baris terakhir dari panel berjalan ke arah sebaliknya: DD menunjukkan 245.3% setelah reverse split menaikkan harga per sahamnya sebesar 200%, yaitu menaikkan harga alih-alih memotongnya. Daftar apa pun yang melewatkan langkah ini akan menerbitkan fiksi di bagian atas dan bawah secara bersamaan, itulah sebabnya layar ini memisahkan ticker split alih-alih mencoba memperbaiki harganya. Sebuah dana dapat masuk ke panel ini semudah sebuah perusahaan: index funds juga melakukan split pada saham mereka, dan layar ini mencakup keduanya.
Bagaimana layar ini diukur
Setiap tahapan penyaringan, dengan jumlah nama yang masih tersisa setelahnya:
SQL tepat di balik setiap angka
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
)Metode lengkapnya adalah:
- Rentang waktu. Sesi perdagangan penuh pertama di tahun 2026 hingga sesi penuh terakhir pada tape. Kedua titik akhir diambil dari minute bars, dan sebuah sesi hanya dihitung jika memiliki jumlah bar jam reguler yang lengkap, sehingga hari yang masih berjalan tidak akan dianggap selesai.
- Return. Harga pembukaan sesi reguler pertama tahun ini terhadap penutupan sesi reguler terakhir, dihitung dari minute bars. Harga premarket dan after-hours diabaikan. Ini adalah price returns; dividen tidak ditambahkan kembali, sehingga saham dengan high-yield akan terlihat sedikit lebih buruk dibandingkan angka total-return.
- Ambang likuiditas. Rata-rata turnover jam reguler minimal $100 juta per sesi selama 20 hari kalender terakhir, dengan hanya menghitung sesi yang berjalan dari awal hingga akhir. Jika tidak, sesi parsial akan membagi sebagian nilai dolar harian dengan satu hari penuh dan merendahkan nilai turnover setiap nama. Filter tunggal tersebut menyaring jumlah ticker dari 4492 menjadi 1036.
- Ambang harga. Saham dibuka di atas $10 per lembar pada awal tahun. Saham di bawah $10 menghasilkan persentase besar dari perubahan harga yang kecil.
- Leveraged and inverse funds dikecualikan melalui daftar terkurasi, yang dicantumkan secara lengkap dalam SQL di bawah setiap tabel. Daftar ini mencakup dana yang terikat indeks dan dana single-stock yang melipatgandakan pergerakan harian satu perusahaan. Geared fund dapat menduduki peringkat teratas dalam daftar penggerak mentah tanpa adanya berita perusahaan. Daftar ini dikelola secara manual, yang menjadi kelemahannya: dana yang diluncurkan bulan ini baru akan dikecualikan setelah seseorang menambahkannya.
- Ordinary funds tidak difilter keluar. ETF indeks atau sektor tanpa leverage yang memenuhi ambang likuiditas dan harga akan diperingkat di sini bersama dengan perusahaan operasional, dan juga masuk dalam hitungan breadth. Sebuah dana adalah keranjang nama yang sudah dihitung dalam universe yang sama, jadi baca baris tersebut sebagai kinerja keranjang, bukan sebagai kinerja satu perusahaan dalam setahun.
- Splits. Setiap ticker dengan split atau dividen saham yang berlaku selama 2026 akan disisihkan, sekecil apa pun rasionya. Ini adalah pilihan konservatif: hal ini menyebabkan beberapa saham berkinerja asli kehilangan tempat di papan peringkat, dan ini memastikan perubahan jumlah saham tidak diterbitkan sebagai return. Panel di atas menunjukkan nama-nama yang dikecualikan yang memiliki split cukup besar untuk memalsukan pergerakan harga.
- Listing baru. Perusahaan yang listing setelah sesi pertama tahun ini tidak memiliki harga Januari dan tidak ada dalam tabel ini, yang merupakan celah nyata pada tahun dengan kalender listing baru yang padat.
- Hasilnya. 954 nama diperingkat, dan sepuluh teratas serta sepuluh terbawah adalah dua papan peringkat di halaman ini.
Pertanyaan yang sama dalam tiga jendela waktu
Year to date adalah satu anak tangga, dan pergerakan terlihat berbeda pada setiap rentang waktu. Tampilan mingguan adalah pemenang dan pecundang saham terbesar minggu ini, tampilan bulanan adalah penggerak saham terbesar bulan ini, dan halaman ini adalah tahunan. Setiap tingkatan memiliki perbedaan: halaman ini menyaring rata-rata $100 juta per hari selama satu bulan terakhir, sementara halaman mingguan dan bulanan menyaring total dolar yang diperdagangkan dalam jendela waktu masing-masing, sehingga sebuah nama bisa lolos di satu papan peringkat tetapi tidak di papan lainnya. Nama yang memuncaki papan mingguan karena satu reaksi earnings sering kali hanya berada di tengah tabel dalam cakupan tahunan. Untuk narasi yang lebih luas mengenai kondisi tahun ini, rekap pasar semester pertama menyajikan detail indeks, rates, dan sektor, dan cara kerja leveraged ETF menjelaskan mengapa dana geared dipisahkan di sini.
FAQ
Apa saham dengan performa terbaik di tahun 2026?
Di antara saham dengan rata-rata volume perdagangan harian minimal $100 juta, harga pembukaan tahun di atas $10, tidak ada split di tahun 2026, dan tidak masuk dalam daftar leveraged-fund, SNDK adalah saham dengan performa terbaik di tahun 2026 hingga saat ini, naik 554.9% dari sesi pertama tahun ini. MXL berada di posisi kedua dengan kenaikan 386.3%.
Saham apa yang mengalami penurunan terdalam di tahun 2026?
EOSE adalah saham dengan performa terburuk di tahun 2026 dalam kriteria ini sebesar -65.9%, diikuti oleh CSGP sebesar -58.7%. Daftar lengkap saham dengan penurunan terbesar di tahun 2026 tersedia pada tabel kedua di atas, yang diperbarui seiring berjalannya tahun.
Bagaimana cara menghitung return saham year-to-date?
Return year-to-date membandingkan harga terbaru dengan harga pada awal tahun kalender dan menyatakan perubahan tersebut dalam persentase. Dalam hal ini, harga pembukaan sesi reguler pertama tahun 2026 dibandingkan dengan harga penutupan sesi terakhir yang telah selesai. Saham yang melakukan split selama tahun berjalan tidak disesuaikan, sehingga tidak ada faktor penyesuaian antara pembaca dan data pasar.
Apakah leveraged ETF termasuk dalam daftar saham penguat di tahun 2026?
Tidak. Leveraged fund atau inverse fund melipatgandakan pergerakan harian sebuah indeks atau saham tunggal, sehingga sering kali menduduki peringkat teratas dalam daftar pergerakan tanpa adanya berita perusahaan di baliknya. Dana-dana tersebut dihapus berdasarkan nama sebelum dilakukan pemeringkatan, dan daftar tersebut dapat dilihat dalam SQL di bawah setiap tabel. ETF indeks dan sektor biasa adalah kasus yang berbeda: mereka melewati ambang batas yang sama dengan saham lainnya dan diperingkat di sini, sehingga sebuah fund dapat muncul di salah satu papan peringkat.
Setiap tabel di sini adalah stored query dengan SQL terlampir. Perluas panel mana pun untuk mengaudit kriteria, atau bangun kembali dengan ambang batas Anda sendiri di terminal Strasmore.