2026年株価上昇率・下落率ランキング
2026年の株価上昇率上位銘柄と下落率上位銘柄を、実際の流動性に基づきランキング。株式分割とレバレッジ型ファンドは除外しています。
2026年これまでの株価上昇率上位銘柄はMRNAが先頭に立っており、年初の取引開始日から直近の取引終了日までに692.8%上昇しています。本ページでは、実際に取引されている銘柄を対象に、2026年の株価上昇率上位銘柄と下落率上位銘柄をランキングします。集計値はベンダーのサマリーではなく、取引所の売買記録に基づいています。ランキングは年内の相場進行に合わせて更新されます。株式分割とレバレッジ型ファンドは、ランキング作成前に除外しています。年初来ランキングの多くで、見落とされがちな問題はここにあります。
2026年の株価上昇率上位銘柄
以下の銘柄は、順位付けの前に流動性の基準を満たしています。過去1カ月の各営業日について、1日平均の売買代金が少なくとも1億ドルある銘柄に限定しました。ほとんど取引されない銘柄の大きな上昇率は、実績ではなく気配値にすぎません。
| ティッカー | 年初来リターン(%) | 1日平均売買代金($M) |
|---|---|---|
| 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%で年初来首位となり、SNDKが471%で続き、TWSTが355.2%で3位です。ランキング10位のKODも215.7%上昇しており、全体として主要な株価指数を大きく上回っています。
各上昇率の横にあるドル建ての数値も、割合と同じくらい重要です。KODの1日平均売買代金は約389百万ドルです。ランキング首位のMRNAは、平均3002百万ドルです。ここに挙げた銘柄はすべて1日1億ドルの基準を上回っていますが、その上の売買代金の幅は大きく、同じ上昇率でも両端の銘柄では意味が異なります。薄商いの銘柄は値動きを動かしやすく、画面に表示された価格で手仕舞うのも難しくなります。
2026年の株価下落率上位銘柄
同じ指標を逆方向から見たものです。同じ流動性基準を満たす銘柄のうち、年初来の下落率が最も大きい銘柄を示します。
| ティッカー | 年初来リターン(%) | 1日平均売買代金($M) |
|---|---|---|
| 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%です。リストで10番目のZは-54.1%となっています。ここには、投機的な小型株ではなく、大型で幅広く保有されている企業も複数含まれます。下落銘柄リストで意外に感じられるのは、この点です。流動性やアナリストのカバレッジがあっても、株価の下落を防ぐことはできません。これらの銘柄をポートフォリオの大部分として保有していた投資家は、下落の影響をそのまま受けました。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 ord年初来で上昇しているスクリーニング対象銘柄は58.8%、下落している銘柄は41.2%である。上位10銘柄の表では、この分布は見えない。一方の端では37銘柄がDown 40%+区分に入り、反対側では116銘柄がUp 50%+区分に入っている。変わらない水準の両側では、187銘柄がDown 0-10%、162銘柄がUp 0-10%に位置する。どの年でも、市場の大半は通常の値動きにとどまる。上の二つの表に並ぶ銘柄は例外であり、平均値はそうした銘柄も含めて形成されている。
市場全体の位置づけ
単一銘柄の年間パフォーマンスは、市場全体のパフォーマンスと比較すると見え方が変わります。同じ期間における主要4指数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%のリターンとなりました。上昇銘柄の一覧にある銘柄はすべて、4指数を大幅に上回りました。これは指数の仕組みを示しています。数百銘柄の保有比率を平均して一本の値にまとめるため、個別銘柄の値動きが一部相殺されるのです。その一本の値の背後にある銘柄間のリターン差は、指数自体の値動きよりはるかに大きくなっています。上期のセクター別スコアカードでは、11セクターを相互に比較して順位付けしています。
年初来騰落率を偽る株式分割
株式分割は、保有資産の価値を変えずに、株数と一株当たり価格を変更します。この期間は長いため、多くの企業が株式分割を実施します。未調整の年初来騰落率では、一株当たり価格の変化がパフォーマンスとして表示されます。以下の銘柄は、いずれも2026年に、価格を少なくとも5分の1動かす規模の株式分割または株式配当を実施しました。また、同じ流動性基準も満たしていました。そのため、分割フィルターで除外される前は、上記のランキングに入る資格がありました。
| ティッカー | 未調整年初来(%) | 分割価格効果(%) | 分割種別 | 分割日 |
|---|---|---|---|---|
| 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 ASCBKNGは、forward splitによって一株当たり価格が-96%動いた後、未調整のスクリーニングでは-96.9%と表示されます。KLACは、forward splitによって価格が-90%動いた後、-86.2%と表示されます。いずれも、分割の効力発生日に保有者の資産価値が失われたわけではありません。一株当たり価格が一定の倍率で分割され、株数も同じ倍率で増えただけです。「分割の影響」欄は、分割だけによる価格変化を切り分けています。未調整のスクリーニングでは、この部分がパフォーマンスとして表示されます。
パネルの最後の行は逆方向の動きを示します。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年の最初の完全な取引セッションから、テープ上で確認できる直近の完全なセッションまでです。始点と終点はいずれも分足から取得します。セッションとして数えるのは、通常取引時間のバー数が完全にそろっている場合に限ります。そのため、取引中の当日は完了扱いになりません。
- リターン。 年初の最初の通常取引セッションの始値と、直近の通常取引セッションの終値を分足から計算します。プレマーケットと時間外取引の約定は除外します。これは価格リターンであり、配当は再投資していません。そのため、高配当銘柄はトータルリターンで見た場合よりも、ここではやや低く表示されます。
- 流動性基準。 過去20暦日における通常取引時間の1セッション当たり売買代金が、平均で少なくとも1億ドルあることが条件です。始値から終値まで取引されたセッションだけを数えます。部分的なセッションを含めると、1日分の売買代金の一部を丸1日で割ることになり、全銘柄の売買代金を過小評価するためです。この単一のフィルターにより、対象銘柄は4543ティッカーから1082へ絞り込まれます。
- 株価基準。 年初の始値が1株10ドルを上回っていることが条件です。10ドル未満の銘柄は、小さな値幅でも大きなパーセンテージ変化が生じます。
- レバレッジ型・インバース型ファンド。 すべての表の下にあるSQLへ全件を記載した、手作業で管理するリストにより除外します。指数に連動して倍率をかけるファンドと、単一企業の日次変動を倍増させる単一株式ファンドが対象です。レバレッジ型ファンドは、企業ニュースが一つもないまま、値上がり銘柄ランキングの上位に入る可能性があります。このリストは手作業で更新するため、新たに設定されたファンドは、誰かが追加するまで除外されない点が弱点です。
- 通常のファンドは除外しません。 流動性基準と株価基準を満たす非レバレッジ型の指数ETFやセクターETFは、事業会社と並べてここでランキングします。銘柄の裾野を示す集計にも含めます。ファンドは同じ対象ユニバースですでに数えられている銘柄のバスケットなので、該当行は一企業の年間リターンではなく、そのバスケットの動きを示すものとして読んでください。
- 株式分割。 2026年中に株式分割または株式配当の効力が発生したティッカーは、比率の大小にかかわらず対象から外します。これは保守的な判断です。実際に好調だった銘柄の一部をランキングから外すことになりますが、株数の変化をリターンとして公表することはありません。上のパネルには、分割規模が大きく、見かけ上の値動きを生じさせたため除外した銘柄を示しています。
- 年初後の上場。 年初の最初のセッション後に上場した企業には1月の株価がないため、これらの表には含まれません。新規上場が多い年には、これは実質的な欠落となります。
- 結果。 1000銘柄をランキングし、その上位10銘柄と下位10銘柄をこのページの二つのボードに掲載します。
3つの期間で同じ問いを見る
年初来は、はしごの一段にすぎない。見る期間が変われば、値動きの見え方も変わる。週間では今週の上昇率・下落率上位銘柄、月間では今月の値動き上位銘柄を確認し、このページでは年初来を扱う。
各段の選別基準は異なる。このページでは、過去1カ月の1日平均売買代金が1億ドル以上の銘柄を対象とする。一方、週間ページと月間ページでは、それぞれの期間内の累計売買代金を基準にする。そのため、ある銘柄が一方の一覧には入っても、別の一覧からは外れることがある。
決算発表への反応で週間ランキングの首位となった銘柄が、年初来では中位に位置することも珍しくない。年初来の相場をめぐる全体像については、上期の市場総括で指数、金利、セクターの詳細を確認できる。レバレッジETFをここでは除外している理由は、レバレッジETFの仕組みで説明している。
よくある質問
2026年に最も好調な銘柄はどれですか?
1日当たりの売買代金が平均で少なくとも1億ドルあり、年初の株価が10ドルを上回り、2026年に株式分割を実施しておらず、レバレッジドファンドのリストにも含まれない銘柄の中では、MRNAが2026年に入ってこれまで最も好調な銘柄です。年初の初回取引日から692.8%上昇しています。SNDKが471%上昇で2位です。
2026年に最も下落した銘柄はどれですか?
このスクリーニングでは、CTVAが2026年に最も低調な銘柄で、-80.8%となっています。-65.7%のTTDが続きます。2026年に最も下落した銘柄の全リストは上の2つ目の表に掲載しており、年の進行に合わせて更新しています。
年初来の株式リターンはどのように計算されますか?
年初来リターンは、直近の株価と暦年の開始時点の株価を比較し、その変化率を示したものです。ここでは、2026年の最初の通常取引日の寄り付きと、直近の完了した取引セッションの終値を比較しています。年中に株式分割を実施した銘柄は、調整せず対象から外しています。そのため、読者と実際のティックデータの間に調整係数は入りません。
レバレッジドETFは2026年の上昇銘柄リストに含まれますか?
いいえ。レバレッジ型またはインバース型のファンドは、指数や個別株の日次変動を倍増させるため、企業ニュースがない場合でも、値上がり・値下がり銘柄の単純なランキングで上位に入ることがあります。こうしたファンドは、ランキング前に名称で除外しており、各表の下にあるSQLでリストを確認できます。通常の指数ETFやセクターETFは扱いが異なります。個別株と同じ基準を満たせばランキング対象となるため、いずれの表にもファンドが掲載される可能性があります。
ここに掲載したすべての表は、SQLを添付した保存済みクエリです。各パネルを展開してスクリーニング条件を確認するか、Strasmore terminalで独自の基準を設定して再構築できます。