Strasmore Research
시장 요약 Matt Connor작성자 Matt Connor · 업데이트됨 2026-07-24 · data as of July 24, 2026 · refreshed weekly

2026년 주식 상승률 및 하락률 순위

2026년 최대 수익률 종목과 하락 종목을 거래소 테이프 기반으로 나열합니다. 주식 분할 및 레버리지 ETF는 제외되었습니다.

2026년 현재 가장 높은 수익률을 기록 중인 종목은 SNDK이며, 연초 시가 대비 최근 거래 종료 시점까지 554.9% 상승했습니다. 이 페이지는 거래소 테이프(exchange tape)를 기준으로 실제 거래되는 종목 중 2026년 최대 상승 및 하락 종목을 순위별로 나열하며, 연중 실시간으로 업데이트됩니다. 대부분의 연초 대비(year-to-date) 목록이 간과하는 오류를 방지하기 위해, 모든 순위 산정 전 주식 분할 및 레버리지 펀드는 제외됩니다.

2026년 최대 상승 종목

아래 목록의 모든 종목은 순위 산정 전 유동성 하한선을 충족했습니다. 이는 지난 한 달간 거래 완료 세션당 평균 최소 1억 달러 이상의 주식이 거래되었음을 의미합니다. 거래량이 적은 종목의 높은 상승률은 실제 결과가 아닌 단순 수치에 불과합니다.

조회2026년 최대 상승 종목: 거래량 상위 10개 종목의 YTD(Year-to-date, 연초 대비) 수익률
모든 수치 뒤에 숨겨진 정확한 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 10

SNDK554.9% 상승하며 올해 1위를 기록했습니다. MXL386.3%로 그 뒤를 이었으며, AEHR345%로 3위를 차지했습니다. 10위인 AAOI조차 여전히 204.3% 상승 중이므로, 전체 목록의 수익률은 모든 광범위 지수(broad index)를 크게 앞서고 있습니다.

각 변동률 옆의 달러 수치는 퍼센트만큼 중요한 정보를 제공합니다. AAOI의 일평균 거래액은 약 817만 달러입니다. 1위인 SNDK은 일평균 18348만 달러를 기록했습니다. 이 목록의 모든 종목은 일일 1억 달러 이상의 거래량을 기록하고 있으며, 그 상한선과의 범위가 매우 넓어 동일한 퍼센트 수치라도 양 끝단에서는 서로 다른 의미를 갖습니다. 거래량이 적은 종목은 주가를 끌어올리기는 쉽지만, 화면에 표시된 가격으로 매도하여 빠져나오기는 더 어렵습니다.

2026년 최대 하락 종목

동일한 기준을 역으로 적용한 결과입니다. 동일한 유동성 하한선을 통과한 종목 중 연초 대비 가장 가파른 하락률을 기록한 종목들입니다.

조회2026년 최대 하락 종목: 거래량 상위 10개 종목의 YTD(연초 대비) 수익률
모든 수치 뒤에 숨겨진 정확한 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%)가 그 뒤를 이었습니다. 목록의 10위인 TEAM-47.3%를 기록했습니다. 이 목록에 포함된 여러 종목은 투기적인 마이크로 캡(micro caps)이 아니라 규모가 크고 널리 보유된 기업들이며, 이는 하락 종목 목록에서 사람들을 놀라게 하는 부분입니다. 유동성과 애널리스트의 분석 범위가 주가 하한선을 보장하지는 않습니다. 이 중 특정 종목을 포트폴리오에서 과도한 비중으로 보유한 투자자는 변동성과 낙폭(drawdown) 수치로 측정되는 단일 종목 보유 위험을 그대로 겪게 됩니다.

2026년 시장 상승 종목의 비중

상위권 목록은 양 끝의 극단적인 사례만을 보여준다. 시장 폭(Breadth)은 지수 펀드(Index funds)를 포함하여 스크리닝된 전체 유니버스 내에서 상승 종목과 하락 종목이 변동 폭에 따라 어떻게 나뉘는지, 즉 시장의 실질적인 상태를 보여준다.

조회YTD(연초 대비) 시장 폭(Breadth): 스크리닝된 유니버스(Universe)의 수익률 구간별 분포
모든 수치 뒤에 숨겨진 정확한 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

스크리닝된 종목 중 61.9%은 연초 대비 상승했으며 38.1%은 하락했다. 상위 10개 종목 표는 이러한 분포를 숨긴다. 변동이 없는 종목을 기준으로, 한쪽 끝에는 22개의 종목이 Down 40%+ 버킷에 위치하며, 반대쪽에는 130개의 종목이 Up 50%+ 버킷에 위치한다. 그 외에 146Down 0-10%에, 159Up 0-10%에 위치한다. 일반적인 해에 시장의 대부분은 평범한 움직임을 보인다. 위의 두 표에 나타난 종목들은 평균값을 구성하는 예외적인 사례들이다.

시장의 현 위치

개별 종목의 연간 수익률은 시장 수익률과 다르게 나타납니다. 동일한 기간 동안의 4대 주요 지수 ETF(Exchange Traded Fund) 성과는 다음과 같습니다.

조회주요 4대 지수 ETF(Exchange Traded Fund)의 동일 기간 YTD(연초 대비) 수익률
모든 수치 뒤에 숨겨진 정확한 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%의 수익률을 기록했습니다. 상승 종목 목록의 모든 종목은 위 네 가지 지수를 큰 차이로 상회했습니다. 이는 지수의 산술적 특성 때문입니다. 수백 개의 보유 종목이 하나의 선으로 평균화되면서 개별 종목의 변동성이 일부 상쇄됩니다. 해당 지수 선 아래의 변동 폭은 지수 선 자체보다 훨씬 넓었습니다. 상반기 섹터 성적표는 11개 섹터를 서로 비교하여 순위를 매깁니다.

연초 대비 수익률을 왜곡하는 주식 분할

주식 분할은 보유 가치를 변화시키지 않으면서 발행 주식 수와 주당 가격을 변경한다. 이처럼 긴 기간 동안 많은 기업이 주식 분할을 실시하며, 수정되지 않은 연초 대비(year-to-date) 계산 방식은 주당 가격의 변화를 수익률로 간주한다. 아래 목록의 기업들은 주당 가격을 최소 5분의 1 이상 변화시킬 만큼 큰 규모의 2026년 주식 분할 또는 주식 배당을 실시했다. 각 기업은 동일한 유동성 기준을 충족했으므로, 주식 분할 필터가 적용되기 전에는 위의 보드에 포함될 자격이 있었다.

조회제외 대상: YTD(연초 대비) 변동성을 왜곡할 수 있는 2026년 대규모 주식 분할(Splits)
모든 수치 뒤에 숨겨진 정확한 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

BKNGforward split 이후 주당 가격이 -96%만큼 변동된 후 수정되지 않은 화면에서 -96.7%으로 표시되며, CVNAforward split 이후 가격이 -80%만큼 변동되어 -85.1%으로 표시된다. 두 기업의 주주 중 누구도 주식 분할이 실행된 날에 손실을 입지 않았다. 주당 가격은 나누어지고 주식 수는 동일한 배수로 곱해졌다. 주식 분할 효과 열은 주식 분할만으로 발생하는 가격 변동을 분리하며, 이는 수정되지 않은 화면이 수익률로 읽는 부분이다.

패널의 마지막 행은 반대의 경우를 보여준다. DDreverse split이 주당 가격을 200%만큼 인상하여 가격을 삭감하는 대신 높인 후의 245.3%을 나타낸다. 이 단계를 생략하는 목록은 상단과 하단 모두에서 허구의 데이터를 게시하게 된다. 이것이 이 화면이 가격을 수정하려 시도하는 대신 주식 분할 티커(ticker)를 따로 분류하는 이유이다. 펀드도 기업과 마찬가지로 이 패널에 포함될 수 있다. 인덱스 펀드(index fund) 또한 주식을 분할하며, 이 화면은 두 경우를 모두 다룬다.

이 스크린의 측정 방식

각 단계별 스크린 통과 후 남은 종목 수:

조회단계별 스크리닝(Screen) 과정: 각 필터 통과 종목 수
모든 수치 뒤에 숨겨진 정확한 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년의 첫 번째 전체 거래 세션부터 가장 최근의 전체 거래 세션까지를 의미합니다. 양 끝점은 분봉(minute bars)을 기준으로 하며, 정규 거래 시간의 봉 개수가 완전한 세션만 포함합니다. 따라서 진행 중인 거래일은 완료된 것으로 간주하지 않습니다.
  • 수익률. 분봉을 기준으로 연초 첫 정규 세션 시가 대비 직전 정규 세션 종가를 계산합니다. 장전(Premarket) 및 장후(After-hours) 거래 가격은 제외됩니다. 이는 가격 수익률이며 배당금은 재투자되지 않습니다. 따라서 고배당 종목은 총수익률(total-return) 수치보다 약간 낮게 나타납니다.
  • 유동성 하한선. 지난 20일간의 정규 거래 시간당 평균 거래대금이 1억 달러 이상이어야 하며, 시작부터 종료까지 완료된 세션만 포함합니다. 부분적인 세션이 포함될 경우 일일 거래대금이 과소평가될 수 있기 때문입니다. 이 필터를 통해 대상은 4492개 티커(ticker)에서 1036개로 압축됩니다.
  • 가격 하한선. 연초 시가가 주당 10달러 이상이어야 합니다. 10달러 미만의 종목은 작은 가격 변동에도 수익률이 과도하게 높게 나타날 수 있습니다.
  • 레버리지 및 인버스 펀드는 별도의 목록을 통해 제외되며, 해당 목록은 모든 테이블 하단의 SQL에 전체 포함되어 있습니다. 이 목록은 지수 연동 펀드와 특정 기업의 일일 변동폭을 배수로 추종하는 개별 주식 펀드를 포함합니다. 레버리지 펀드는 기업 뉴스 없이도 변동성 상위 목록에 오를 수 있습니다. 이 목록은 수동으로 관리되므로, 이번 달에 출시된 펀드는 목록에 추가되기 전까지 제외되지 않는다는 단점이 있습니다.
  • 일반 펀드는 제외되지 않습니다. 유동성 및 가격 하한선을 충족하는 언레버리지(unleavered) 지수 또는 섹터 ETF는 운영 기업과 함께 순위가 매겨지며, 폭(breadth) 계산에도 포함됩니다. 펀드는 이미 동일한 유니버스 내에서 계산된 종목들의 바스켓이므로, 해당 행은 개별 기업의 성과가 아닌 바스켓의 성과로 해석해야 합니다.
  • 주식 분할. 2026년 중 주식 분할 또는 주식 배당이 발생하는 모든 티커는 분할 비율에 관계없이 제외됩니다. 이는 보수적인 선택입니다. 이로 인해 일부 우량 종목이 목록에서 제외될 수 있으나, 주식 수 변동이 수익률로 오인되는 것을 방지합니다. 상단의 패널은 주식 분할로 인해 변동성이 왜곡될 만큼 규모가 컸던 제외 종목들을 보여줍니다.
  • 신규 상장. 연초 첫 세션 이후 상장한 기업은 1월 가격 데이터가 없으므로 이 테이블에서 제외됩니다. 이는 신규 상장이 많은 해에 발생하는 데이터 공백입니다.
  • 결과. 954개 종목의 순위를 매기며, 이 중 상위 10개와 하위 10개가 이 페이지의 두 표를 구성합니다.

세 가지 관점에서의 동일한 질문

연초 대비(Year to date) 데이터는 사다리의 한 칸과 같으며, 관찰 기간에 따라 변동 양상이 다르게 나타난다. 주간 단위는 이번 주 최대 상승 및 하락 종목을, 월간 단위는 이번 달 최대 변동 종목을 보여주며, 본 페이지는 연간 단위 데이터를 제공한다. 각 관점마다 기준이 다르다. 본 페이지는 지난 한 달간 일평균 1억 달러를 기준으로 필터링하지만, 주간 및 월간 페이지는 해당 기간 내 총 거래 대금을 기준으로 필터링한다. 따라서 특정 종목이 한 기준에서는 상위권에 오르고 다른 기준에서는 제외될 수 있다. 실적 발표에 따른 주간 변동성 상위 종목이 연간 변동성에서는 중간 순위에 머무는 경우가 이에 해당한다. 올해 시장 흐름에 대한 전반적인 개요는 지수, 금리 및 섹터 상세 정보를 담은 상반기 시장 요약에서 확인할 수 있으며, 레버리지 ETF 작동 원리에서는 레버리지 펀드가 본 페이지에서 제외된 이유를 설명한다.

FAQ

2026년 최고의 수익률을 기록 중인 종목은 무엇입니까?

일평균 거래대금이 1억 달러 이상이고, 연초 시가가 10달러 이상이며, 2026년 중 주식 분할이 없고, 레버리지 펀드(leveraged-fund) 목록에 포함되지 않은 종목 중 SNDK이(가) 현재까지 2026년 최고의 수익률을 기록하고 있습니다. 해당 종목은 연초 첫 거래일 대비 554.9% 상승했습니다. MXL이(가) 386.3%의 수익률로 2세를 기록하고 있습니다.

2026년에 가장 많이 하락한 종목은 무엇입니까?

본 스크린 기준 -65.9%의 수익률을 기록한 EOSE이(가) 2026년 최악의 수익률을 기록 중이며, CSGP이(가) -58.7%으로 그 뒤를 잇고 있습니다. 2026년 최대 하락 종목의 전체 목록은 상단의 두 번째 표에 있으며, 연중 수시로 업데이트됩니다.

연초 대비(year-to-date) 주식 수익률은 어떻게 계산됩니까?

연초 대비 수익률은 최신 가격을 해당 연도 시작 시점의 가격과 비교하여 변화율을 백분율로 나타낸 것입니다. 여기서는 2026년 첫 정규 거래일 시가와 가장 최근에 종료된 거래일의 종가를 비교합니다. 연중에 주식 분할을 실시한 종목은 별도로 조정하지 않고 제외하므로, 독자는 조정 계수 없이 원본 데이터를 확인할 수 있습니다.

레버리지 ETF가 2026년 상승 종목 목록에 포함됩니까?

아니요. 레버리지(leveraged) 또는 인버스(inverse) 펀드는 지수나 개별 주식의 일일 변동폭을 배수로 적용하므로, 기업 뉴스 없이도 일반 종목 목록보다 높은 수익률을 기록하는 경우가 빈번합니다. 따라서 순위 산정 전 해당 펀드들은 목록에서 제외되며, 관련 목록은 각 표 하단의 SQL에서 확인할 수 있습니다. 일반적인 지수 및 섹터 ETF는 다른 사례입니다. 이들은 일반 주식과 동일한 기준을 적용받아 순위에 포함되므로, 두 목록 모두에 나타날 수 있습니다.


이곳의 모든 표는 SQL이 포함된 저장된 쿼리(stored query)입니다. 패널을 확장하여 스크린을 검토하거나, Strasmore 터미널에서 직접 설정한 기준을 사용하여 재구성할 수 있습니다.