2026年涨幅最大和跌幅最大股票
查看2026年涨幅最大和跌幅最大的股票,按真实成交流动性排名,剔除股票拆分与杠杆基金,持续更新,帮助您识别更可信的市场表现。
2026年以来表现最好的股票由MRNA领涨,从年内首个交易日开盘至最近一个已完成交易日收盘,累计上涨692.8%。本页面根据交易所成交记录,而非数据供应商汇总数据,筛选真实交易的股票,排名2026年涨幅最大和跌幅最大的个股,并在年内持续更新。排名前会剔除股票拆分和杠杆基金,这正是大多数年初至今榜单容易出错的地方。
2026年涨幅最大的股票
以下每只股票在排名前,都满足流动性门槛:过去一个月内,每个完整交易日的平均成交额至少为1亿美元。没人交易的股票即使涨幅很高,也只是报价,不代表实际交易结果。
| 代码 | 年初至今回报率 (%) | 日均成交额(百万美元) |
|---|---|---|
| MRNA | 692.8 | 3002 |
| SNDK | 471 | 11073 |
| TWST | 355.2 | 476 |
| TXG | 343.5 | 334 |
| MXL | 338.4 | 246 |
| DELL | 268 | 3100 |
| AXTI | 236.9 | 499 |
| AEHR | 229.3 | 203 |
| PBF | 218.3 | 195 |
| KOD | 215.7 | 389 |
每个数字背后的完整 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 10MRNA以692.8%的涨幅领跑全年,TWST以355.2%的涨幅排名第三,SNDK则以471%紧随其后。榜单第十名KOD仍上涨215.7%,因此整张榜单的表现都远超任何主要宽基指数。
每个涨幅旁的美元成交额同样重要。KOD日均成交额约为389亿美元。榜首MRNA的日均成交额为3002亿美元。榜单中的每只股票日均成交额都超过1亿美元,而且高于这一门槛的区间足够宽,意味着同样的涨幅百分比,在区间两端代表的实际情况并不相同。成交清淡的股票更容易被推高,也更难以屏幕显示的价格卖出。
2026年跌幅最大的股票
指标相同,但方向相反:在达到同一流动性门槛的股票中,年初至今跌幅最大者。
| 代码 | 年初至今回报率 (%) | 日均成交额(百万美元) |
|---|---|---|
| CTVA | -80.8 | 410 |
| TTD | -65.7 | 176 |
| FLUT | -64.8 | 159 |
| JOBY | -64.3 | 114 |
| STLA | -61.5 | 126 |
| OKLO | -59.4 | 288 |
| APP | -59.1 | 1168 |
| SMR | -57.8 | 217 |
| FICO | -54.5 | 998 |
| Z | -54.1 | 114 |
每个数字背后的完整 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年初至今跌幅最大的是 CTVA,跌幅为 -80.8%;其次是 TTD,跌幅为 -65.7%。排名第十的 Z,跌幅为 -54.1%。其中一些是规模较大、持股广泛的公司,而非投机性极强的小盘股。这正是跌幅榜令人意外之处。流动性和分析师覆盖并不能为股价托底。若投资者将其中任何一只股票作为投资组合中的超大权重,就会完整承受这轮跌幅。持有单只股票的风险页面通过波动率和回撤数据衡量这一风险。
2026年市场有多大比例上涨
排行榜只展示两个尾部。市场广度则反映整体分布:在经过筛选的全部标的中(包括指数基金),上涨和下跌的标的分别占比多少,并按涨跌幅大小分组。
| 分组 | 名称 | 方向占比 (%) |
|---|---|---|
| Down 40%+ | 37 | 41.2 |
| Down 20-40% | 84 | 41.2 |
| Down 10-20% | 104 | 41.2 |
| Down 0-10% | 187 | 41.2 |
| Up 0-10% | 162 | 58.8 |
| Up 10-25% | 194 | 58.8 |
| Up 25-50% | 116 | 58.8 |
| Up 50%+ | 116 | 58.8 |
每个数字背后的完整 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 ord58.8%的筛选标的年初至今上涨,41.2%下跌。分布情况揭示了前十名榜单所掩盖的信息。一端有37个标的处于Down 40%+区间,另一端有116个标的处于Up 50%+区间;在未发生变化的两侧,分别有187个标的处于Down 0-10%区间,162个标的处于Up 0-10%区间。某一年中,大多数市场标的的表现都较为普通,而上面两张表中的标的只是构成平均值的例外。
市场整体所处位置
将单只股票的表现放在大盘表现中比较,结果会有所不同。以下是四只主要指数ETF在完全相同时间段内的表现:
| 标签 | 年初至今回报率 (%) | 起始日期 | 截止日期 |
|---|---|---|---|
| Nasdaq 100 (QQQ) | 17.4 | 2026-01-02 | 2026-10-15 |
| S&P 500 (SPY) | 12.5 | 2026-01-02 | 2026-10-15 |
| Russell 2000 (IWM) | 11.1 | 2026-01-02 | 2026-10-15 |
| Dow (DIA) | 8.2 | 2026-01-02 | 2026-10-15 |
每个数字背后的完整 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-10-15)。在此期间,Nasdaq 100 (QQQ)上涨了17.4%,Dow (DIA)上涨了8.2%。涨幅榜上的每只股票都大幅跑赢这四只ETF。这体现了指数的计算方式:数百只成分股被汇总为一条表现数据,个股涨跌会相互抵消。个股之间的表现差异远大于指数本身的波动区间;上半年行业表现评分表则对十一个行业进行了横向排名。
误导年初至今涨跌幅的股票拆分
股票拆分会改变股份数量和每股价格,但不会改变持仓价值。在如此长的区间内,许多公司会进行拆分;未经调整的年初至今计算会把每股价格的变化当作业绩。下列股票均在2026年进行了足以使每股价格变动至少五分之一的股票拆分或股票股息派发,并且均达到相同的流动性门槛。因此,在拆分筛选剔除它们之前,它们都符合上方榜单的入选条件。
| 代码 | 未调整年初至今 (%) | 拆股价格影响 (%) | 拆股类型 | 拆股日期 |
|---|---|---|---|---|
| BKNG | -96.9 | -96 | forward split | 2026-04-06 |
| KLAC | -86.2 | -90 | forward split | 2026-06-12 |
| CVNA | -85.6 | -80 | forward split | 2026-05-08 |
| VGT | -83.9 | -87.5 | forward split | 2026-04-21 |
| VUG | -81.7 | -83.3 | forward split | 2026-04-21 |
| VOOG | -81 | -83.3 | forward split | 2026-04-21 |
| MGK | -77.9 | -80 | forward split | 2026-04-21 |
| IWF | -73.9 | -75 | forward split | 2026-04-29 |
| VO | -72.2 | -75 | forward split | 2026-04-21 |
| INTW | -57.3 | -87.5 | forward split | 2026-06-26 |
| CRWD | -48.4 | -75 | stock dividend | 2026-07-02 |
| MNST | -40.9 | -50 | stock dividend | 2026-08-11 |
| APH | -40.6 | -50 | stock dividend | 2026-09-03 |
| HON | 7.6 | 100 | reverse split | 2026-06-29 |
| ETHA | 141.8 | 200 | reverse split | 2026-10-06 |
每个数字背后的完整 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.9%;此前一次forward split使其每股价格-96%。KLAC则会在一次forward split后显示为-86.2%,该操作使其股价-90%。两只股票的持有人在拆分生效当天都没有遭受损失。每股价格按相同比例缩小,股份数量则按相同比例增加。“拆分影响”一栏单独列出仅由拆分造成的价格变化;未经调整的筛选结果正是把这部分变化当作业绩。
面板最后一行的情况相反:ETHA在一次reverse split使其每股价格200%后,显示为141.8%。这次操作推高了价格,而不是压低价格。任何跳过这一步的榜单,都会同时在顶部和底部发布失真的结果。因此,该筛选会将发生拆分的股票代码单独列出,而不是试图修正其价格。基金同样可能出现在这一面板中:指数基金也会拆分份额,本筛选同时涵盖公司和基金。
筛选方法
筛选的每个阶段,以及通过该阶段后仍保留的股票数量:
| 筛选步骤 | 名称 |
|---|---|
| Traded the first and the last full session | 4543 |
| Averaging $100m+ a day over the past month | 1082 |
| Opened 2026 above $10 a share | 1049 |
| Not on the excluded-fund list | 1017 |
| No split or stock dividend in 2026 | 1000 |
每个数字背后的完整 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年的第一个完整交易时段开始,至行情数据中最近一个完整交易时段结束。两个端点均取自分钟K线。只有包含完整正常交易时段K线数量的交易日才计入,因此,尚未结束的交易日不会被视为已完成。
- 收益率。 以年内第一个正常交易时段的开盘价,对比年内最后一个正常交易时段的收盘价,并根据分钟K线计算。忽略盘前和盘后成交。这里计算的是价格收益,不计入股息,因此高股息股票的表现会略低于总回报口径。
- 流动性门槛。 过去20个日历日内,正常交易时段的日均成交额至少为1亿美元,且只计算从开盘到收盘完整运行的交易日。否则,部分交易日的成交额会被除以完整交易日数量,从而低估所有股票的成交额。单凭这一项筛选,股票池就从4543个ticker缩减至1082个。
- 价格门槛。 股票年初开盘价必须高于每股10美元。股价低于10美元的股票,较小的价格变动也可能产生很高的百分比涨幅。
- 杠杆型和反向基金通过人工维护的名单排除。该名单完整列在每张表下方的SQL中,涵盖指数杠杆基金,以及放大单家公司日涨跌幅的单股基金。没有任何公司新闻,杠杆基金也可能登上原始涨幅榜。该名单由人工维护,这是它的缺点:本月新推出的基金,只有在有人将其加入名单后才会被排除。
- 普通基金不会被排除。 通过流动性和价格门槛的非杠杆指数ETF或行业ETF,会与运营公司一同排名,也计入市场广度统计。基金本身是一个由股票组成的篮子,而这些股票已经计入同一股票池,因此相关行应理解为该篮子的年度表现,而不是某一家公司的表现。
- 拆分。 2026年内发生拆股或股票股利生效的任何ticker都会被剔除,无论比例多小。这是保守做法:它会让少数真正表现出色的股票失去上榜资格,但不会将股数变化当作收益发布。上方面板显示了因拆分幅度足以制造虚假涨幅而被排除的股票。
- 晚期上市。 在年初第一个交易时段之后上市的公司没有1月份价格,因此不会出现在这些表格中。在新股上市数量较多的年份,这确实会造成数据缺口。
- 结果。 1000个股票进入排名,其中涨幅和跌幅前十名构成该页面上的两张榜单。
三个时间窗口中的同一问题
年初至今只是阶梯上的一级,同一走势在不同时间跨度下会呈现不同面貌。周度视角关注本周涨幅最大和跌幅最大的股票,月度视角关注本月波动最大的股票,本页则关注年初至今的表现。每一级的筛选门槛都不同:本页筛选过去一个月日均成交额达到1亿美元的股票,而周度和月度页面筛选各自时间窗口内的成交总额。因此,一只股票可能通过某一页面的筛选,却无法通过另一页面的筛选。某只股票可能因一次财报后的反应登上周度榜首,但在全年表现排名中仅处于中游。若要了解今年以来更完整的市场脉络,请参阅上半年市场回顾,其中涵盖指数、利率和板块详情;杠杆ETF如何运作则解释了为何本页将杠杆基金单独排除。
常见问题
2026年表现最佳的股票是哪只?
在日均成交额至少为1亿美元、年初开盘价高于10美元、2026年未进行拆股且不在杠杆基金名单中的股票中,MRNA是截至目前2026年表现最佳的股票,较年内首个交易日上涨692.8%。SNDK排名第二,涨幅为471%。
2026年跌幅最大的股票有哪些?
在本筛选范围内,CTVA是2026年表现最差的股票,跌幅为-80.8%,其次是TTD,跌幅为-65.7%。2026年跌幅最大的股票完整名单见上方第二张表。该名单会随年内数据更新。
年初至今股票回报如何计算?
年初至今回报将最新价格与日历年初价格进行比较,并以百分比表示价格变动。本文采用2026年首个正常交易时段的开盘价,与最近一个已完成交易时段的收盘价进行比较。年内发生拆股的股票会被排除,而不是进行复权调整,因此读者看到的是实际行情数据,不包含额外调整因子。
2026年涨幅榜是否包含杠杆ETF?
不包含。杠杆基金或反向基金会放大指数或单只股票的单日涨跌,因此即使没有公司层面的消息,也经常占据原始涨跌幅榜的前列。排名前会按名称剔除这些基金,各表下方的 SQL 中可以查看筛选条件。普通指数ETF和行业ETF则不同:它们与股票一样满足相同的筛选门槛,因此会参与排名,并可能出现在任一榜单中。
本文每张表都是附带 SQL 的存储查询。展开任意面板即可审核筛选条件,也可以在 Strasmore terminal 上使用自定义门槛重新运行查询。