2026年涨幅最大和跌幅最大的股票
查看2026年涨幅最大和跌幅最大的股票,按真实交易流动性排名,剔除股票拆分和杠杆基金,并持续更新,快速找到更可信的年初至今表现。
截至目前,2026年表现最佳的股票由SNDK领涨,较年初首个交易日开盘价相比,涨幅为536.4%,统计截至最近一个已完成交易日。本页面根据交易所成交记录,而非供应商汇总数据,对确实有交易的股票进行排名,列出2026年涨幅最大和跌幅最大的股票,并在年内持续更新。排名前会剔除股票拆分和杠杆基金,这正是大多数年初至今榜单容易悄悄出错的地方。
2026年涨幅最大的股票
下面列出的每只股票在排名前都满足流动性门槛:过去一个月内,每个完整交易日的平均成交额至少为1亿美元。对于无人交易的股票,较大的涨幅百分比只是报价,不代表实际结果。
| 代码 | 年初至今回报率 (%) | 日均成交额(百万美元) |
|---|---|---|
| SNDK | 536.4 | 15431 |
| MRNA | 399 | 5598 |
| TWST | 305.4 | 202 |
| DELL | 301.8 | 3566 |
| TXG | 287.5 | 142 |
| AEHR | 262.8 | 208 |
| MXL | 233.4 | 114 |
| AXTI | 226.9 | 525 |
| MU | 224.8 | 20455 |
| AMLX | 183.5 | 131 |
每个数字背后的完整 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以536.4%的涨幅领跑年内表现,MRNA以399%紧随其后,TWST以305.4%位居第三。榜单第十名AMLX的涨幅仍达183.5%,因此整个榜单的表现都远远领先于任何主要指数。
每个涨幅旁边的美元成交额同样重要。AMLX的日均成交额约为131亿美元。榜首股票SNDK的日均成交额为15431亿美元。榜单中的每只股票日均成交额都超过1亿美元,而高于这一门槛的区间足够宽,因此同样的标题涨幅在区间两端代表的含义并不相同。成交清淡的股票更容易被推高,也更难以屏幕显示的价格卖出。
2026年跌幅最大的股票
同一指标的反向版本:在达到相同流动性门槛的股票中,年初至今跌幅最大者。
| 代码 | 年初至今回报率 (%) | 日均成交额(百万美元) |
|---|---|---|
| TTD | -60.5 | 192 |
| WING | -54.4 | 103 |
| APP | -54.1 | 1257 |
| CSGP | -52.8 | 144 |
| FLUT | -52.7 | 140 |
| STLA | -51.5 | 105 |
| BSX | -51 | 763 |
| KLAR | -50.4 | 145 |
| RBLX | -49.1 | 303 |
| JOBY | -48.8 | 153 |
每个数字背后的完整 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年初至今跌幅最大的是 TTD,跌幅为 -60.5%;其次是 WING,跌幅为 -54.4%。榜单第十位是 JOBY,跌幅为 -48.8%。这里有几家公司规模庞大、股权分布广泛,并非投机性微型股。这正是亏损榜令人意外之处。流动性和分析师覆盖并不能为股价托底。如果投资者将其中任何一只股票作为投资组合中的过大仓位,就会承受全部跌幅。持有单只股票的风险页面通过波动率和回撤数据对此进行衡量。
2026年市场有多大比例上涨
排行榜只展示两个尾部。市场广度则展示主体:整个筛选范围(包括指数基金)如何按涨跌幅区间分为上涨和下跌标的。
| 分组 | 名称 | 方向占比 (%) |
|---|---|---|
| Down 40%+ | 18 | 35.5 |
| Down 20-40% | 69 | 35.5 |
| Down 10-20% | 78 | 35.5 |
| Down 0-10% | 162 | 35.5 |
| Up 0-10% | 152 | 64.5 |
| Up 10-25% | 198 | 64.5 |
| Up 25-50% | 142 | 64.5 |
| Up 50%+ | 103 | 64.5 |
每个数字背后的完整 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 ord截至今年,筛选标的中有64.5%上涨,35.5%下跌。分布情况揭示了前十名榜单隐藏的信息。一端有18个标的处于Down 40%+区间,另一端有103个标的处于Up 50%+区间;在未变动附近的两侧,分别有162个标的处于Down 0-10%区间,以及152个标的处于Up 0-10%区间。任何一年,大多数市场标的的表现都较为普通;上面两张表中的标的只是构成平均值的例外。
市场整体所处位置
单只股票的年度表现,需要放在市场整体表现中比较。四只主要指数ETF在完全相同的区间内的表现如下:
| 标签 | 年初至今回报率 (%) | 测量起始日期 | 测量截止日期 |
|---|---|---|---|
| Russell 2000 (IWM) | 19.2 | 2026-01-02 | 2026-09-03 |
| Nasdaq 100 (QQQ) | 15.7 | 2026-01-02 | 2026-09-03 |
| S&P 500 (SPY) | 12.7 | 2026-01-02 | 2026-09-03 |
| Dow (DIA) | 11.4 | 2026-01-02 | 2026-09-03 |
每个数字背后的完整 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-09-03)。在此期间,Russell 2000 (IWM)上涨了19.2%,Dow (DIA)上涨了11.4%。涨幅榜上的每只股票都大幅跑赢这四只ETF。这体现了指数的计算方式:数百只成分股的表现被平均汇总为一条数据线,个股涨跌会相互抵消。个股表现的分化幅度远大于指数本身的波动,上半年行业评分表则对十一个行业进行了相互比较和排名。
虚假的年初至今涨跌幅:股票拆分造成的错觉
股票拆分会改变股份数量和每股价格,但不会改变持仓的价值。在这么长的观察区间内,许多公司都会进行拆分;如果年初至今的计算未作调整,就会把每股价格的变化当作投资表现。下方各标的在2026年进行了足以使每股价格变动至少五分之一的股票拆分或股票股利,并且均达到相同的流动性门槛。因此,在拆分筛选条件移除这些标的之前,它们都符合进入上方榜单的条件。
| 代码 | 未调整年初至今 (%) | 拆股价格影响 (%) | 拆股类型 | 拆股日期 |
|---|---|---|---|---|
| BKNG | -96.4 | -96 | forward split | 2026-04-06 |
| KLAC | -86.3 | -90 | forward split | 2026-06-12 |
| VGT | -84.1 | -87.5 | forward split | 2026-04-21 |
| CVNA | -82.6 | -80 | forward split | 2026-05-08 |
| VUG | -81.9 | -83.3 | forward split | 2026-04-21 |
| HDV | -75.6 | -80 | forward split | 2026-04-29 |
| IWF | -74.1 | -75 | forward split | 2026-04-29 |
| VO | -71.7 | -75 | forward split | 2026-04-21 |
| CRWD | -54.6 | -75 | stock dividend | 2026-07-02 |
| MNST | -42.5 | -50 | stock dividend | 2026-08-11 |
| APH | -40.1 | -50 | stock dividend | 2026-09-03 |
| MVLL | 4.3 | -66.7 | forward split | 2026-06-26 |
| HON | 6.1 | 100 | reverse split | 2026-06-29 |
| DD | 224.3 | 200 | reverse split | 2026-06-24 |
每个数字背后的完整 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在未调整的筛选结果中,BKNG会显示为-96.4%;这是因为一次forward split使其每股价格变动了-96%。KLAC则会显示为-86.3%;这是因为一次forward split使其股价变动了-90%。两者的持有人在拆分生效当天都没有遭受任何损失。每股价格按照相同比例被拆分,股份数量则按该比例增加。拆分影响一栏单独列出仅由拆分造成的价格变化,也就是未调整筛选结果会误认为投资表现的部分。
面板的最后一行情况相反:DD显示为224.3%,因为一次reverse split推高了其每股价格200%,使价格上升而不是下降。任何跳过这一步的榜单,都会同时在顶部和底部发布失真的结果。因此,筛选结果会将发生拆分的 ticker 单独列出,而不是试图修正其价格。基金同样可能出现在这一面板中,因为指数基金也会拆分份额;本筛选同时覆盖公司和基金。
筛选方法
筛选的每个阶段,以及通过该阶段后剩余的股票数量:
| 筛选步骤 | 名称 |
|---|---|
| Traded the first and the last full session | 4471 |
| Averaging $100m+ a day over the past month | 1000 |
| Opened 2026 above $10 a share | 970 |
| Not on the excluded-fund list | 938 |
| No split or stock dividend in 2026 | 922 |
每个数字背后的完整 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年的第一个完整交易时段起,至行情数据中的最近一个完整交易时段止。两个端点均读取分钟线数据。只有包含完整正常交易时段分钟线数量的交易日才计入,因此尚未结束的交易日不会被视为已完成。
- 回报率。 以年内第一个正常交易时段的开盘价对比年内最后一个正常交易时段的收盘价,数据来自分钟线。忽略盘前和盘后成交记录。这是价格回报,不计入股息,因此高股息股票在这里的表现会略低于总回报口径。
- 流动性门槛。 过去20个日历日内,正常交易时段的日均成交额至少为1亿美元,且只计算完整运行的交易时段。否则,部分交易日的成交额会被按完整交易日计算,导致所有股票的成交额被低估。该筛选条件将股票池从4471个ticker缩减至1000个。
- 价格门槛。 股票年初开盘价必须高于每股10美元。股价低于10美元的股票,较小的价格变动也可能产生很高的百分比涨幅。
- 杠杆基金和反向基金通过人工维护的名单排除。该名单完整列在每张表下方的SQL中,涵盖指数杠杆基金,以及放大单家公司日涨跌幅的单一股票基金。没有任何公司新闻,杠杆基金也可能登上原始涨幅榜。该名单由人工维护,这也是它的局限:本月新设立的基金,只有在有人将其加入名单后才会被排除。
- 普通基金不会被排除。 未使用杠杆的指数或行业ETF只要满足流动性和价格门槛,就会与运营公司股票一起排名,也会计入市场广度统计。基金本身是由同一股票池中已计入的多只股票组成的篮子,因此这些行反映的是该篮子的表现,而不是某一家公司的全年表现。
- 拆分。 任何在2026年生效、涉及拆股或股票股利的ticker都会被剔除,无论比例多小。这是更保守的做法:它会让少数真正表现出色的股票失去上榜机会,但不会将股数变化发布成回报率。上方面板显示了那些拆分幅度足以制造虚假涨幅的被排除股票。
- 延迟上市。 在年初第一个交易时段之后上市的公司没有1月份的价格,因此不会出现在这些表格中。在新股上市数量较多的年份,这构成了一个实际的数据缺口。
- 结果。 922只股票将参与排名。本页的两个榜单分别列出其中涨幅最高和跌幅最大的十只股票。
三个时间窗口的同一问题
年初至今只是这架梯子上的一个台阶,观察周期不同,走势也会不同。周度页面关注本周涨幅最大和跌幅最大的股票,月度页面关注本月波动最大的股票,而本页关注年初至今的表现。每个台阶的筛选门槛不同:本页要求过去一个月的日均成交额达到1亿美元,而周度和月度页面筛选的是各自时间窗口内的累计成交额。因此,一只股票可能通过一个榜单的筛选,却无法进入另一个榜单。在某次财报公布后的行情中登上周度榜首的股票,年初至今的排名往往只处于中游。若要了解今年以来更广泛的市场脉络,请参阅上半年市场回顾,其中涵盖指数、利率和行业细节;杠杆ETF如何运作则解释了为何本页将杠杆基金单独列出。
常见问题
2026年表现最好的股票是哪只?
在日均成交额至少为1亿美元、年初开盘价高于10美元、2026年未进行拆股且不在杠杆基金名单中的股票中,SNDK是截至目前2026年表现最好的股票,较年初首个交易日上涨536.4%。MRNA排名第二,涨幅为399%。
2026年跌幅最大的股票有哪些?
在本筛选范围内,TTD是2026年表现最差的股票,跌幅为-60.5%,其次是WING,跌幅为-54.4%。2026年跌幅最大的股票完整名单见上方第二张表,名单会随着年内数据更新而刷新。
年初至今的股票回报率如何计算?
年初至今回报率将最新价格与日历年初的价格进行比较,并以百分比表示价格变动。本文采用2026年第一个正常交易时段的开盘价,与最近一个已完成交易时段的收盘价进行比较。年内发生拆股的股票会被剔除,而不是进行调整,因此读者看到的行情数据之间不存在调整因子。
2026年上涨股票名单包含杠杆ETF吗?
不包含。杠杆基金或反向基金会放大指数或单只股票的日度变动,因此即使没有任何公司层面的新闻,也可能在原始涨跌幅排名中占据前列。我们会在排名前按名称剔除这些基金,每张表下方的SQL中都能看到相应筛选条件。普通指数ETF和行业ETF则不同:它们与股票一样接受相同的筛选门槛,并参与排名,因此基金可能出现在任一榜单中。
本文的每张表都对应一个附有SQL的存储查询。展开任意面板即可审查筛选条件,也可以在Strasmore终端上使用您自己的门槛重新生成结果。