بزرگترین سهامهای صعودی و نزولی در سال 2026
رتبهبندی دقیقترین سهامهای پربازده و پرریسک سال 2026 بر اساس حجم معاملات واقعی. با حذف صندوقهای اهرمی و سهامهای تقسیمی برای تحلیل دقیقتر بازار.
برترین سهام از نظر عملکرد در سال 2026 تاکنون، با رشد 554.9% از اولین جلسه معاملاتی سال تا آخرین جلسه تکمیلشده، توسط SNDK رهبری میشوند. این صفحه، بزرگترین سهامهای صعودی و نزولی سال 2026 را در میان نامهای دارای حجم معاملات واقعی، بر اساس دادههای مستقیم بورس (و نه خلاصهسازی شرکتهای تامینکننده) رتبهبندی میکند و در طول سال بهروزرسانی میشود. پیش از هرگونه رتبهبندی، سهامهای تقسیمی و صندوقهای اهرمی حذف میشوند؛ رویکردی که در اکثر لیستهای سالانه باعث بروز خطا میشود.
Biggest stock gainers of 2026
Every name below cleared a liquidity floor before it was ranked: an average of at least $100 million of stock changing hands per completed session over the past month. A large percentage on a stock nobody trades is a quote, not a result.
کد دقیق SQL پشت هر عدد
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 leads the year at 554.9%, with MXL next at 386.3% and AEHR third at 345%. Tenth place on the board, AAOI, is still up 204.3%, so the whole table has run far ahead of any broad index.
The dollar column beside each move carries as much information as the percentage. AAOI averages about $817 million of turnover a day. SNDK at the top of the board averages $18348 million. Every name here clears $100 million a day, and the range above that floor is wide enough that the same headline percentage means two different things at its two ends. A thin name is easier to push and harder to exit at the price on the screen.
بزرگترین بازندگان بازار سهام در سال 2026
همین معیار، اما در حالت معکوس: شدیدترین کاهش قیمت از ابتدای سال تا کنون در میان نمادهایی که از سطح مشخصی از نقدینگی عبور کردهاند.
کد دقیق SQL پشت هر عدد
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بیشترین کاهش قیمت از ابتدای سال متعلق به EOSE با میزان -65.9% است و پس از آن CSGP با -58.7% قرار دارد. در رتبه دهم این فهرست، TEAM با کاهش -47.3% قرار گرفته است. نکته غافلگیرکننده در این لیست این است که چندین شرکت از شرکتهای بزرگ و پرمحبوب هستند، نه شرکتهای کوچک و پرریسک. نقدینگی و پوشش تحلیلی، هیچ محدودیتی برای قیمت سهام تعیین نمیکنند. هر کسی که سهم بزرگی از پرتفوی خود را به یکی از این سهام اختصاص داده باشد، با تمام نوسانات روبرو شده است؛ موضوعی که صفحه ریسک نگهداری یک تکسهم با استفاده از شاخصهای نوسان و بازگشت قیمت (drawdown) آن را اندازهگیری میکند.
میزان رشد بازار در سال 2026 چقدر است؟
جدول ردهبندی تنها دو سر طیف را نشان میدهد. پهنای بازار (Breadth) بدنه اصلی را نشان میدهد: اینکه کل مجموعه بررسیشده، از جمله صندوقهای شاخص (index funds)، بر اساس میزان تغییرات، چگونه بین نمادهای صعودی و نزولی تقسیم شدهاند.
کد دقیق SQL پشت هر عدد
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% از نمادهای بررسیشده در سال جاری رشد داشتهاند و 38.1% کاهش قیمت داشتهاند. توزیع بازار چیزی است که یک جدول «ده نماد برتر» پنهان میکند. 22 نماد در دسته Down 40%+ در یک سو قرار دارند و 130 نماد در دسته Up 50%+ در سوی دیگر؛ در حالی که 146 نماد در دسته Down 0-10% و 159 نماد در دسته Up 0-10% در دو طرفِ نمادهای بدون تغییر قرار گرفتهاند. در هر سال، بیشتر بازار تغییرات معمولی را تجربه میکند و نمادهای موجود در دو جدول بالا، استثناهایی هستند که میانگینها بر اساس آنها محاسبه میشوند.
وضعیت فعلی بازار
عملکرد یک سهم واحد در مقایسه با عملکرد کل بازار، تفاوتهای چشمگیری دارد. چهار ETF اصلی شاخصها، در بازهای زمانی دقیقاً یکسان، وضعیت خود را نشان میدهند:
کد دقیق SQL پشت هر عدد
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هر دو نمودار و پنل بالا، در یک بازه زمانی اندازهگیری شدهاند: از اولین جلسه کامل معاملاتی سال 2026 (2026-01-02) تا آخرین جلسه تکمیلشده (2026-07-22). در این بازه، Russell 2000 (IWM) بازدهی 18.6% و Dow (DIA) بازدهی 8.2% داشتند. تمامی نمادهای موجود در جدول سهامهای پربازده، با اختلاف زیادی از هر چهار شاخص پیشی گرفتند؛ این نتیجه مستقیم عملکرد یک شاخص است: صدها دارایی در یک خط میانگینگیری شدهاند که در آن، نوسانات انفرادی تا حدی یکدیگر را خنثی میکنند. فاصله زیر آن خط بسیار بیشتر از خودِ خط بود و گزارش عملکرد بخشها در نیمه اول سال، هر یازده بخش را در برابر یکدیگر رتبهبندی میکند.
تقسیم سهام که بازده سالانه را جعل میکند
تقسیم سهام، تعداد سهام و قیمت هر سهم را تغییر میدهد، اما ارزش کل دارایی را تغییر نمیدهد. در بازههای زمانی طولانی، بسیاری از شرکتها اقدام به تقسیم سهام میکنند و در محاسبات اصلاحنشده از ابتدای سال (year-to-date)، تغییر قیمت هر سهم به عنوان عملکرد بازار تلقی میشود. شرکتهای زیر دارای یک تقسیم سهام یا سود تقسیمی در سال 2026 بودهاند که آنقدر بزرگ بوده که قیمت را حداقل به میزان یکپنجم تغییر دهد. تمامی این شرکتها از حد نصاب نقدینگی عبور کرده بودند و پیش از حذف توسط فیلتر تقسیم سهام، واجد شرایط حضور در جداول بالا بودند.
کد دقیق SQL پشت هر عدد
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در یک نمایشگر اصلاحنشده، پس از یک forward split که قیمت هر سهم را -96% تغییر داد، BKNG مقدار -96.7% را نشان میدهد، و پس از یک forward split که قیمت را -80% تغییر داد، CVNA مقدار -85.1% را نمایش میدهد. هیچکدام از دارندگان سهام در روز اجرایی شدن تقسیم سهام، چیزی از دست ندادند. قیمت هر سهم تقسیم و تعداد سهام با همان ضریب ضرب شد. ستون اثر تقسیم سهام، تغییر قیمتی را که صرفاً ناشی از تقسیم سهام است، جدا میکند؛ یعنی همان بخشی که یک نمایشگر اصلاحنشده به عنوان عملکرد ثبت میکند.
ردیف آخر جدول روند معکوس را نشان میدهد: DD مقدار 245.3% را پس از یک reverse split نشان میدهد که قیمت هر سهم را به میزان 200% افزایش داد و به جای کاهش، قیمت را بالا برد. هر فهرستی که این مرحله را نادیده بگیرد، هم در بالا و هم در پایین لیست، اطلاعات نادرست منتشر میکند؛ به همین دلیل است که این نمایشگر، نمادهای دارای تقسیم سهام را کنار میگذارد، به جای اینکه سعی در اصلاح قیمت آنها داشته باشد. یک صندوق نیز میتواند به همان راحتی یک شرکت در این جدول قرار گیرد: صندوقهای شاخص نیز سهام خود را تقسیم میکنند و این نمایشگر هر دو را پوشش میدهد.
نحوه اندازهگیری این فیلتر
هر مرحله از فیلتر، به همراه تعداد نامهایی که پس از آن باقی میمانند:
کد دقیق SQL پشت هر عدد
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
)روش کامل محاسبه:
- بازه زمانی. اولین جلسه کامل معاملاتی سال 2026 تا آخرین جلسه کامل ثبتشده در بازار. هر دو نقطه زمانی از نمودارهای یک دقیقهای استخراج میشوند. یک جلسه معاملاتی تنها زمانی محاسبه میشود که دارای تعداد کامل کندلهای ساعات عادی باشد؛ بنابراین روزهایی که هنوز در جریان هستند، هرگز به عنوان روز تمامشده در نظر گرفته نمیشوند.
- بازده. قیمت بازگشایی اولین جلسه عادی سال در برابر قیمت بستهشدن آخرین جلسه عادی، که از نمودارهای یک دقیقهای محاسبه میشود. معاملات پیشبازگشایی (Premarket) و پسبازگشایی (After-hours) نادیده گرفته میشوند. اینها بازده قیمت هستند؛ سود نقدی (Dividends) به آنها اضافه نمیشود، بنابراین نامهای با بازده سود نقدی بالا، در اینجا نسبت به شاخص بازده کل، کمی ضعیفتر نشان داده میشوند.
- حداقل نقدینگی. میانگین گردش مالی حداقل 100 میلیون دلاری در هر جلسه معاملاتی طی 20 روز تقویمی گذشته، که در آن فقط جلسات کامل (از ابتدا تا انتها) محاسبه میشوند. در غیر این صورت، یک جلسه ناقص باعث تقسیم بخشی از حجم معاملات یک روز بر کل یک روز میشود و گردش مالی تمام نامها را کمتر از حد واقعی نشان میدهد. این فیلتر به تنهایی تعداد نمادها را از 4492 به 1036 کاهش میدهد.
- حداقل قیمت. قیمت بازگشایی سهام در ابتدای سال باید بالای 10 دلار باشد. سهامهای زیر 10 دلار، درصدهای بسیار بالا را در اثر تغییرات کوچک قیمت ایجاد میکنند.
- صندوقهای اهرمی و معکوس. این صندوقها از طریق یک لیست مشخص که در SQL زیر هر جدول آمده، حذف میشوند. این لیست شامل صندوقهای مبتنی بر شاخص و صندوقهای تکسهمی است که نوسان روزانه یک شرکت را چند برابر میکنند. یک صندوق اهرمی میتواند بدون هیچ خبر شرکتی، در صدر لیست نوسانگران قرار گیرد. این لیست به صورت دستی بهروزرسانی میشود که نقطه ضعف آن است: صندوقی که همین ماه راهاندازی شده، تنها زمانی حذف میشود که شخصی آن را به لیست اضافه کند.
- صندوقهای معمولی. این صندوقها فیلتر نمیشوند. یک ETF شاخص یا بخشی که اهرمی نیست و شرایط حداقل نقدینگی و قیمت را دارد، در اینجا در کنار شرکتهای عملیاتی رتبهبندی میشود و در شمارش وسعت بازار (Breadth) نیز لحاظ میگردد. یک صندوق، سبدی از نامهایی است که قبلاً در همان مجموعه محاسبه شدهاند؛ بنابراین این سطرها را به عنوان عملکرد سبد، نه عملکرد یک شرکت واحد، در نظر بگیرید.
- تقسیم سهام (Splits). هر نمادی که در طول سال 2026 با تقسیم سهام یا سود نقدی سهام مواجه شود، صرفنظر از نسبت آن، کنار گذاشته میشود. این یک رویکرد محافظهکارانه است: این کار باعث میشود تعدادی از عملکردهای واقعی از لیست حذف شوند، اما از نمایش تغییر در تعداد سهام به عنوان بازده جلوگیری میکند. پنل بالا نامهای حذفشدهای را نشان میدهد که تقسیم سهام آنها به قدری بزرگ بوده که میتواند نوسان کاذب ایجاد کند.
- دریافتهای جدید (Late listings). شرکتی که پس از اولین جلسه معاملاتی سال وارد بازار شده است، قیمت ژانویه ندارد و در این جداول حضور ندارد؛ این یک شکاف واقعی در سالهایی است که تقویم پذیرش شرکتهای جدید بسیار فشرده است.
- نتیجه. 954 نام رتبهبندی شدهاند و ده نام برتر و ده نام پایینتر، دو جدول موجود در این صفحه هستند.
یک پرسش در سه بازه زمانی مختلف
بازه «از ابتدای سال تا کنون» تنها یک پله از یک نردبان است و هر بازه زمانی، تحلیل متفاوتی ارائه میدهد. نمای هفتگی شامل بیشترین سودآوری و زیاندهی سهام در این هفته است، نمای ماهانه شامل بیشترین نوسانات سهام در این ماه است و این صفحه مربوط به بازه سالانه است. معیارهای سنجش در هر پله متفاوت است: این صفحه بر اساس میانگین معاملات 100 میلیون دلاری در روز طی ماه گذشته فیلتر میشود، در حالی که صفحات هفتگی و ماهانه بر اساس مجموع ارزش معاملات در بازه زمانی خود فیلتر میشوند؛ بنابراین ممکن است یک نماد در یک لیست حضور داشته باشد اما در لیست دیگر نباشد. نمادی که به دلیل واکنش به گزارش سود (earnings) در صدر لیست هفتگی قرار میگیرد، اغلب در میان جدول لیست سالانه قرار دارد. برای درک بهتر روند کلی بازار در سال جاری، مرور بازار در نیمه اول سال جزئیات مربوط به شاخصها، نرخ بهره و بخشهای مختلف را ارائه میدهد و نحوه عملکرد ETFهای اهرمدار توضیح میدهد که چرا این صندوقهای اهرمدار در اینجا جدا شدهاند.
سوالات متداول
بهترین سهام از نظر عملکرد در سال 2026 کدام است؟
در میان نامهایی که میانگین معاملات روزانه آنها حداقل 100 میلیون دلار است، قیمت بازگشایی بالای 10 دلار دارند، در سال 2026 تقسیمی (split) نداشتهاند و در لیست صندوقهای اهرمی نیستند، SNDK با رشد 554.9% نسبت به اولین جلسه معاملاتی سال، بهترین عملکرد را در سال 2026 تا به امروز داشته است. MXL با رشد 386.3% در رتبه دوم قرار دارد.
کدام سهام بیشترین کاهش را در سال 2026 داشتهاند؟
EOSE با کاهش -65.9%، بدترین عملکرد را در این فیلتر در سال 2026 دارد و از CSGP با کاهش -58.7% پیشی گرفته است. لیست کامل بزرگترین سهامهای بازنده در سال 2026 در جدول دوم در بالا، با بهروزرسانی در طول سال، موجود است.
بازدهی سالانه (year-to-date) سهام چگونه محاسبه میشود؟
بازدهی سالانه، آخرین قیمت را با قیمت در شروع سال تقویمی مقایسه کرده و تغییرات را به صورت درصد بیان میکند. در اینجا، قیمت بازگشایی اولین جلسه عادی سال 2026 در مقایسه با قیمت بستهشده در آخرین جلسه تکمیلشده اندازهگیری میشود. سهامی که در طول سال دچار تقسیم سهام (split) شدهاند، به جای تعدیل، کنار گذاشته میشوند تا هیچ ضریب تعدیلی میان خواننده و دادههای بازار قرار نگیرد.
آیا ETFهای اهرمی در لیست سهامهای پربازده 2026 گنجانده شدهاند؟
خیر. یک صندوق اهرمی یا معکوس، حرکت روزانه یک شاخص یا یک تکسهم را چندین برابر میکند؛ بنابراین این صندوقها معمولاً بدون داشتن اخبار شرکتی، در صدر لیست تغییرات قرار میگیرند. این صندوقها پیش از رتبهبندی، از لیست حذف میشوند و لیست آنها در SQL زیر هر جدول قابل مشاهده است. ETFهای معمولی شاخصی و بخشی حالت متفاوتی دارند: آنها مانند هر سهم دیگری از همان سطوح عبور میکنند و در اینجا رتبهبندی میشوند، بنابراین یک صندوق میتواند در هر دو لیست ظاهر شود.
هر جدول در اینجا یک پرسوجوی ذخیرهشده (stored query) با SQL متصل به آن است. هر پنل را برای بررسی فیلترها باز کنید، یا آن را با سطوح اختصاصی خود در ترمینال Strasmore بازسازی کنید.