Strasmore Research
สรุปภาวะตลาด Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-07-24 · data as of July 24, 2026 · refreshed weekly

หุ้นที่บวกและลบมากที่สุดในปี 2026

สรุปอันดับหุ้นที่มีผลตอบแทนสูงสุดและต่ำสุดในปี 2026 โดยอ้างอิงจากข้อมูลการซื้อขายจริงจากตลาดหลักทรัพย์ ไม่รวมหุ้นที่มีการแตกหุ้นและกองทุนที่มีอัตราทด

หุ้นที่มีผลตอบแทนสูงสุดในปี 2026 จนถึงปัจจุบัน นำโดย SNDK ซึ่งปรับตัวขึ้น 554.9% นับตั้งแต่ช่วงเปิดตลาดต้นปีจนถึงรอบการซื้อขายล่าสุดที่สิ้นสุดลง หน้าเว็บนี้จัดอันดับหุ้นที่มีมูลค่าเพิ่มขึ้นและลดลงมากที่สุดในปี 2026 โดยคัดเลือกเฉพาะหุ้นที่มีการซื้อขายจริง ซึ่งวัดผลจากข้อมูลการซื้อขายโดยตรงจากตลาดหลักทรัพย์แทนการใช้ข้อมูลสรุปจากผู้ให้บริการ ข้อมูลจะได้รับการอัปเดตอย่างต่อเนื่องตลอดทั้งปี ทั้งนี้ มีการคัดหุ้นที่มีการแตกหุ้น (stock splits) และกองทุนที่มีอัตราทด (leveraged funds) ออกก่อนการจัดอันดับ เพื่อป้องกันข้อผิดพลาดที่มักพบในรายการสรุปผลตอบแทนตั้งแต่ต้นปีจนถึงปัจจุบัน (year-to-date) ส่วนใหญ่

หุ้นที่มีผลตอบแทนสูงสุดในปี 2026

รายชื่อทั้งหมดด้านล่างนี้ต้องผ่านเกณฑ์สภาพคล่องก่อนได้รับการจัดอันดับ โดยมีมูลค่าการซื้อขายเฉลี่ยอย่างน้อย 100 ล้านดอลลาร์ต่อหนึ่งรอบการซื้อขายในช่วงหนึ่งเดือนที่ผ่านมา เนื่องจากเปอร์เซ็นต์ที่สูงในหุ้นที่ไม่มีการซื้อขายถือเป็นเพียงราคาเสนอซื้อขาย ไม่ใช่ผลตอบแทนที่เกิดขึ้นจริง

คำสั่งดึงข้อมูลหุ้นที่มีผลตอบแทนสูงสุดในปี 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) DESC
LIMIT 10

SNDK นำเป็นอันดับหนึ่งของปี ณ 554.9% โดยมี MXL ตามมาที่ 386.3% และ AEHR อยู่ในอันดับที่สามที่ 345% ส่วนอันดับที่สิบคือ AAOI ซึ่งยังคงบวกอยู่ 204.3% ส่งผลให้หุ้นทั้งหมดในตารางนี้มีผลตอบแทนสูงกว่าดัชนีตลาดโดยรวมอย่างมาก

มูลค่าดอลลาร์ในคอลัมน์ข้างผลตอบแทนแต่ละตัวให้ข้อมูลที่สำคัญไม่แพ้กัน โดย AAOI มีมูลค่าการซื้อขายเฉลี่ยประมาณ 817 ล้านดอลลาร์ต่อวัน ส่วน SNDK ซึ่งอยู่อันดับสูงสุดในตาราง มีมูลค่าการซื้อขายเฉลี่ยที่ 18348 ล้านดอลลาร์ ทุกรายชื่อในที่นี้มีมูลค่าการซื้อขายมากกว่า 100 ล้านดอลลาร์ต่อวัน และช่วงของมูลค่าที่สูงกว่าเกณฑ์นั้นมีความแตกต่างกันมาก จนทำให้เปอร์เซ็นต์ที่เท่ากันอาจมีความหมายต่างกันอย่างสิ้นเชิงในแต่ละช่วงราคา หุ้นที่มีสภาพคล่องต่ำจะปรับตัวขึ้นได้ง่ายกว่า แต่จะทำกำไรตามราคาที่แสดงบนหน้าจอได้ยากกว่าเมื่อต้องการขายออก

หุ้นที่ราคาลดลงมากที่สุดในปี 2026

เกณฑ์การวัดแบบเดียวกันในทิศทางตรงกันข้าม: หุ้นที่มีการปรับตัวลดลงสูงสุดตั้งแต่ต้นปีจนถึงปัจจุบัน (year-to-date) โดยพิจารณาจากกลุ่มที่มีสภาพคล่องต่ำกว่าระดับที่กำหนด

คำสั่งดึงข้อมูลหุ้นที่มีผลตอบแทนต่ำสุดในปี 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% ส่วนอันดับที่สิบในรายการคือ TEAM ซึ่งอยู่ที่ -47.3% หุ้นหลายตัวในรายการนี้เป็นบริษัทขนาดใหญ่ที่มีผู้ถือหุ้นจำนวนมาก ไม่ใช่หุ้นขนาดเล็กที่มีความเสี่ยงสูง (speculative micro caps) ซึ่งเป็นลักษณะที่สร้างความประหลาดใจแก่ผู้คน สภาพคล่องและการวิเคราะห์จากนักวิเคราะห์ไม่สามารถเป็นฐานรองรับราคาหุ้นได้ ผู้ที่ถือหุ้นเหล่านี้ในสัดส่วนที่มากเกินไปในพอร์ตโฟลิโอจะได้รับผลกระทบจากการเปลี่ยนแปลงของราคาอย่างเต็มที่ ซึ่งสามารถวัดได้ด้วยค่าความผันผวน (volatility) และการปรับตัวลดลงของราคา (drawdown) ในหน้า ความเสี่ยงจากการถือหุ้นตัวเดียว

ตลาดมีหุ้นที่ปรับตัวขึ้นเป็นสัดส่วนเท่าใดในปี 2026

ตารางอันดับแสดงให้เห็นเพียงหุ้นที่มีการเปลี่ยนแปลงสูงสุดและต่ำสุดเท่านั้น แต่ค่าความกว้างของตลาด (Breadth) จะแสดงภาพรวมทั้งหมด โดยแสดงสัดส่วนระหว่างหุ้นที่ปรับตัวขึ้นและหุ้นที่ปรับตัวลงจากหุ้นทั้งหมดที่คัดกรอง รวมถึงกองทุนดัชนี โดยแบ่งตามขนาดของการเปลี่ยนแปลง

คำสั่งดึงข้อมูลBreadth 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
),
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% มีราคาลดลง การกระจายตัวของข้อมูลคือสิ่งที่ตารางหุ้นสิบอันดับแรกไม่ได้แสดงไว้ โดยมีหุ้น 22 ตัวอยู่ในกลุ่ม Down 40%+ ที่ด้านหนึ่ง และหุ้น 130 ตัวอยู่ในกลุ่ม Up 50%+ ที่อีกด้านหนึ่ง เมื่อเทียบกับหุ้น 146 ตัวในกลุ่ม Down 0-10% และ 159 ตัวในกลุ่ม Up 0-10% ที่อยู่ทั้งสองด้านของกลุ่มที่ราคาไม่เปลี่ยนแปลง ในปีใดๆ หุ้นส่วนใหญ่ในตลาดจะมีการเคลื่อนไหวแบบปกติ และหุ้นในตารางสองตารางด้านบนคือข้อยกเว้นที่นำมาใช้คำนวณค่าเฉลี่ย

สถานะของตลาด

ผลตอบแทนรายปีของหุ้นตัวเดียวจะมีความแตกต่างจากผลตอบแทนของตลาด โดยในช่วงเวลาเดียวกันของ ETF ดัชนีหลักทั้งสี่รายการ:

คำสั่งดึงข้อมูล4 ETF ดัชนีหลัก ผลตอบแทน 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% หุ้นทุกตัวในตารางหุ้นที่ปรับตัวขึ้น (gainers) มีผลตอบแทนสูงกว่าทั้งสี่ดัชนีอย่างชัดเจน ซึ่งเป็นผลจากการคำนวณดัชนี เนื่องจากหุ้นหลายร้อยตัวถูกนำมาหาค่าเฉลี่ยรวมเป็นเส้นเดียว โดยการเคลื่อนไหวของหุ้นแต่ละตัวจะมีการหักล้างกันบางส่วน ส่วนต่างที่อยู่ใต้เส้นนั้นกว้างกว่าตัวเส้นเองมาก และ คะแนนสรุปรายกลุ่มอุตสาหกรรมสำหรับครึ่งปีแรก ได้จัดอันดับทั้งสิบเอ็ดกลุ่มอุตสาหกรรมเปรียบเทียบกัน

การแตกหุ้นที่ทำให้ผลตอบแทนตั้งแต่ต้นปีดูผิดเพี้ยน

การแตกหุ้นทำให้จำนวนหุ้นและราคาต่อหุ้นเปลี่ยนไป โดยที่มูลค่ารวมของสินทรัพย์ที่ถือครองยังคงเท่าเดิม ในช่วงระยะเวลาที่ยาวนานเช่นนี้ หลายบริษัทมีการแตกหุ้น และการคำนวณผลตอบแทนตั้งแต่ต้นปีแบบไม่ปรับปรุงค่า (unadjusted) จะอ่านค่าการเปลี่ยนแปลงของราคาต่อหุ้นว่าเป็นผลการดำเนินงาน รายชื่อด้านล่างนี้แต่ละบริษัทมีการแตกหุ้นหรือการจ่ายเงินปันผลเป็นหุ้นในปี 2026 ในสัดส่วนที่มากพอจะทำให้ราคาเปลี่ยนแปลงไปอย่างน้อยหนึ่งในห้า และทุกบริษัทมีสภาพคล่องผ่านเกณฑ์ขั้นต่ำที่กำหนดไว้ ดังนั้นทุกบริษัทจึงมีคุณสมบัติครบถ้วนตามเกณฑ์ในตารางด้านบน ก่อนที่จะถูกคัดออกด้วยตัวกรองการแตกหุ้น

คำสั่งดึงข้อมูลไม่รวมในรายการ: การแตกหุ้นในปี 2026 ที่ส่งผลกระทบต่อการเคลื่อนไหวของราคา 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
),
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.7% บนหน้าจอแบบไม่ปรับปรุงค่า หลังจากที่ forward split ทำให้ราคาต่อหุ้นเปลี่ยนไป -96% และ CVNA จะแสดงค่า -85.1% หลังจากที่ forward split ทำให้ราคาเปลี่ยนไป -80% ผู้ถือหุ้นของทั้งสองบริษัทไม่สูญเสียมูลค่าใดๆ ในวันที่การแตกหุ้นมีผล ราคาต่อหุ้นถูกหารด้วยจำนวนเท่าเดียวกับที่จำนวนหุ้นถูกคูณด้วย คอลัมน์ผลกระทบจากการแตกหุ้น (split effect) จะแยกเฉพาะการเปลี่ยนแปลงของราคาที่เกิดจากการแตกหุ้นเพียงอย่างเดียว ซึ่งเป็นส่วนที่หน้าจอแบบไม่ปรับปรุงค่าอ่านค่าเป็นผลการดำเนินงาน

แถวสุดท้ายของตารางแสดงผลในทิศทางตรงกันข้าม: DD แสดงค่า 245.3% หลังจากที่ reverse split ทำให้ราคาต่อหุ้นเพิ่มขึ้น 200% โดยเป็นการเพิ่มราคาแทนที่จะเป็นการลดราคา รายการใดก็ตามที่ข้ามขั้นตอนนี้จะเผยแพร่ข้อมูลที่เป็นเท็จทั้งในส่วนบนและส่วนล่างของตาราง ซึ่งเป็นเหตุผลที่หน้าจอนี้แยกหุ้นที่มีการแตกหุ้นไว้ต่างหาก แทนที่จะพยายามปรับปรุงราคาของหุ้นเหล่านั้น กองทุนสามารถเข้ามาอยู่ในตารางนี้ได้เช่นเดียวกับบริษัท เนื่องจากกองทุนดัชนีมีการแตกหุ้นเช่นกัน และหน้าจอนี้ครอบคลุมทั้งสองประเภท

วิธีการวัดผลของหน้าจอนี้

แต่ละขั้นตอนของการคัดกรอง พร้อมจำนวนชื่อที่ยังคงผ่านเกณฑ์หลังจากขั้นตอนนั้น:

คำสั่งดึงข้อมูลขั้นตอนการคัดกรอง: จำนวนหุ้นที่ผ่านเกณฑ์ในแต่ละขั้นตอน
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 DAY))
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960

    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
flagged AS (
    SELECT ticker,
        year_open,
        ticker IN (SELECT ticker FROM universe) AS liquid,
        ticker NOT IN ('SPCX','KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL') AS not_geared,
        ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                       WHERE execution_date BETWEEN toDate('2026-01-01') AND today()) AS no_split
    FROM edges
)
SELECT tup.1 AS screen_step, tup.2 AS names
FROM (
    SELECT arrayJoin([
        ('Traded the first and the last full session', count()),
        ('Averaging $100m+ a day over the past month', countIf(liquid)),
        ('Opened 2026 above $10 a share', countIf(liquid AND year_open >= 10)),
        ('Not on the excluded-fund list', countIf(liquid AND year_open >= 10 AND not_geared)),
        ('No split or stock dividend in 2026', countIf(liquid AND year_open >= 10 AND not_geared AND no_split))
    ]) AS tup
    FROM flagged
)

รายละเอียดวิธีการทั้งหมด:

  • ช่วงเวลา (The window). เริ่มตั้งแต่เซสชันการซื้อขายเต็มรูปแบบเซสชันแรกของปี 2026 จนถึงเซสชันเต็มรูปแบบล่าสุด ข้อมูลจุดเริ่มต้นและจุดสิ้นสุดอ่านจากแท่งราคาแบบรายนาที โดยจะนับหนึ่งเซสชันก็ต่อเมื่อมีจำนวนแท่งราคาในช่วงเวลาทำการปกติครบถ้วนเท่านั้น ดังนั้นวันที่ยังไม่สิ้นสุดวันจะไม่ถูกนับว่าเสร็จสิ้นแล้ว
  • ผลตอบแทน (The return). คำนวณจากราคาเปิดของเซสชันปกติครั้งแรกของปี เทียบกับราคาปิดของเซสชันปกติครั้งล่าสุด โดยคำนวณจากแท่งราคาแบบรายนาที จะไม่มีการนำราคาในช่วง Pre-market และ After-hours มาคำนวณ นี่คือผลตอบแทนด้านราคา โดยไม่ได้รวมเงินปันผลกลับเข้าไป ดังนั้นหุ้นที่มีอัตราเงินปันผลสูงอาจมีค่าต่ำกว่าตัวเลขผลตอบแทนรวม (total-return) เล็กน้อย
  • เกณฑ์สภาพคล่องขั้นต่ำ (The liquidity floor). ค่าเฉลี่ยของมูลค่าการซื้อขายในช่วงเวลาทำการปกติอย่างน้อย 100 ล้านดอลลาร์ต่อเซสชัน ในช่วง 20 วันปฏิทินที่ผ่านมา โดยนับเฉพาะเซสชันที่ดำเนินการตั้งแต่เริ่มต้นจนสิ้นสุดเท่านั้น มิฉะนั้นการนับเซสชันที่ไม่สมบูรณ์จะทำให้มูลค่าการซื้อขายต่อวันถูกหารด้วยจำนวนวันเต็ม ซึ่งจะทำให้มูลค่าการซื้อขายของหุ้นทุกตัวดูต่ำกว่าความเป็นจริง เพียงแค่ตัวกรองนี้ตัวเดียวก็ทำให้จำนวนหุ้นลดลงจาก 4492 เหลือเพียง 1036
  • เกณฑ์ราคาขั้นต่ำ (The price floor). หุ้นต้องมีราคาเปิดต้นปีสูงกว่า 10 ดอลลาร์ต่อหุ้น เนื่องจากหุ้นที่มีราคาต่ำกว่า 10 ดอลลาร์อาจทำให้เกิดเปอร์เซ็นต์ที่สูงเกินจริงจากการเปลี่ยนแปลงของราคาเพียงเล็กน้อย
  • กองทุนที่มีเลเวอเรจและกองทุน Inverse (Leveraged and inverse funds) จะถูกคัดออกโดยใช้รายการที่จัดทำขึ้นโดยเฉพาะ ซึ่งแสดงรายละเอียดทั้งหมดไว้ใน SQL ภายใต้ทุกตาราง รายการนี้ครอบคลุมถึงกองทุนที่อ้างอิงตามดัชนีและกองทุนรายตัวที่เพิ่มทวีคูณการเคลื่อนไหวรายวันของบริษัทหนึ่งๆ กองทุนที่มีเลเวอเรจอาจติดอันดับต้นๆ ของรายการหุ้นที่มีการเคลื่อนไหวรุนแรงได้โดยไม่ต้องมีข่าวสารของบริษัท รายการนี้ใช้วิธีการคัดเลือกด้วยมือซึ่งเป็นจุดอ่อน เนื่องจากกองทุนที่เปิดตัวในเดือนนี้จะถูกคัดออกก็ต่อเมื่อมีผู้เพิ่มชื่อเข้าไปในรายการแล้วเท่านั้น
  • กองทุนทั่วไปจะไม่ถูกคัดออก. ETF ดัชนีหรือกลุ่มอุตสาหกรรมที่ไม่มีเลเวอเรจ ซึ่งผ่านเกณฑ์สภาพคล่องและเกณฑ์ราคา จะถูกจัดอันดับรวมกับบริษัทที่ดำเนินงานปกติ และจะถูกนับรวมในสถิติความกว้างของตลาด (breadth counts) ด้วย เนื่องจากกองทุนคือตะกร้าของหุ้นที่ถูกนับไปแล้วในจักรวาลเดียวกัน ดังนั้นให้ตีความแถวเหล่านั้นว่าเป็นผลการดำเนินงานของตะกร้าหุ้น ไม่ใช่ผลการดำเนินงานของบริษัทเดียวในปีนั้น
  • การแตกหุ้น (Splits). หุ้นใดก็ตามที่มีการแตกหุ้นหรือการจ่ายหุ้นปันผลที่มีผลในช่วงปี 2026 จะถูกแยกออก ไม่ว่าอัตราส่วนจะเป็นเท่าใดก็ตาม นี่คือการเลือกที่ระมัดระวังที่สุด แม้จะทำให้หุ้นที่มีผลงานดีจำนวนหนึ่งเสียโอกาสในการติดอันดับ แต่จะช่วยป้องกันไม่ให้การเปลี่ยนแปลงจำนวนหุ้นถูกนำมาคำนวณเป็นผลตอบแทน ตารางด้านบนแสดงรายชื่อหุ้นที่ถูกคัดออกซึ่งมีการแตกหุ้นในสัดส่วนที่มากพอที่จะทำให้ราคาดูเหมือนมีการเคลื่อนไหวอย่างผิดปกติ
  • การจดทะเบียนล่าช้า (Late listings). บริษัทที่จดทะเบียนหลังจากเซสชันแรกของปีจะไม่มีราคาของเดือนมกราคม และจะไม่ปรากฏในตารางเหล่านี้ ซึ่งถือเป็นช่องว่างของข้อมูลในปีที่มีการจดทะเบียนหุ้นใหม่จำนวนมาก
  • ผลลัพธ์ (The result). หุ้นจำนวน 954 ตัวจะถูกจัดอันดับ โดยสิบอันดับแรกและสิบอันดับสุดท้ายจะแสดงในตารางสองชุดบนหน้าจอนี้

คำถามเดิมในสามช่วงเวลา

ข้อมูลตั้งแต่ต้นปีจนถึงปัจจุบันเปรียบเสมือนขั้นบันไดหนึ่งขั้น ซึ่งการเคลื่อนไหวจะดูแตกต่างกันไปตามระยะเวลาที่พิจารณา มุมมองรายสัปดาห์คือ หุ้นที่มีผลตอบแทนสูงสุดและต่ำสุดในสัปดาห์นี้ มุมมองรายเดือนคือ หุ้นที่มีการเคลื่อนไหวสูงสุดในเดือนนี้ และหน้านี้คือข้อมูลรายปี เกณฑ์การคัดเลือกข้อมูลในแต่ละช่วงเวลานั้นแตกต่างกัน โดยหน้านี้คัดเลือกจากมูลค่าการซื้อขายเฉลี่ย 100 ล้านดอลลาร์ต่อวันในช่วงหนึ่งเดือนที่ผ่านมา ในขณะที่หน้าข้อมูลรายสัปดาห์และรายเดือนคัดเลือกจากมูลค่าการซื้อขายรวมภายในช่วงเวลานั้นๆ ดังนั้นหุ้นตัวหนึ่งอาจติดอันดับในรายการหนึ่งแต่ไม่ติดอีกรายการหนึ่ง หุ้นที่ติดอันดับสูงสุดในสัปดาห์จากการตอบสนองต่อผลประกอบการเพียงครั้งเดียว มักจะมีอันดับอยู่เพียงช่วงกลางเมื่อพิจารณาในภาพรวมรายปี สำหรับข้อมูลเชิงลึกของภาพรวมตลาดในปีนี้ สรุปภาพรวมตลาดครึ่งปีแรก จะมีรายละเอียดเกี่ยวกับดัชนี อัตราดอกเบี้ย และกลุ่มอุตสาหกรรม ส่วน กลไกการทำงานของ Leveraged ETF จะอธิบายว่าเหตุใดจึงมีการแยกกองทุนที่มีอัตราทดเหล่านี้ไว้ต่างหาก

คำถามที่พบบ่อย

หุ้นที่มีผลตอบแทนดีที่สุดในปี 2026 คือหุ้นตัวใด?

ในกลุ่มหุ้นที่มีมูลค่าการซื้อขายเฉลี่ยต่อวันอย่างน้อย 100 ล้านดอลลาร์ มีราคาเปิดต้นปีสูงกว่า 10 ดอลลาร์ ไม่มีการแตกหุ้นในปี 2026 และไม่อยู่ในรายชื่อกองทุน Leverage โดย SNDK เป็นหุ้นที่มีผลตอบแทนดีที่สุดในปี 2026 จนถึงปัจจุบัน โดยปรับตัวขึ้น 554.9% จากราคาเปิดในวันแรกของปี ส่วน MXL มีผลตอบแทนเป็นอันดับสองที่ 386.3%

หุ้นตัวใดที่มีราคาลดลงมากที่สุดในปี 2026?

EOSE เป็นหุ้นที่มีผลตอบแทนแย่ที่สุดในปี 2026 ตามเกณฑ์นี้ที่ -65.9% นำหน้า CSGP ที่ระดับ -58.7% รายชื่อหุ้นที่ขาดทุนมากที่สุดทั้งหมดในปี 2026 แสดงอยู่ในตารางที่สองด้านบน ซึ่งจะมีการอัปเดตข้อมูลตลอดทั้งปี

การคำนวณผลตอบแทนหุ้นแบบ Year-to-date คำนวณอย่างไร?

ผลตอบแทนแบบ Year-to-date คือการเปรียบเทียบราคาสุดท้ายกับราคา ณ ต้นปีปฏิทิน และแสดงการเปลี่ยนแปลงเป็นเปอร์เซ็นต์ ในที่นี้เป็นการวัดราคาเปิดของเซสชันปกติครั้งแรกของปี 2026 เทียบกับราคาปิดของเซสชันล่าสุดที่สิ้นสุดลง หุ้นที่มีการแตกหุ้นระหว่างปีจะถูกคัดออกแทนการใช้ตัวปรับค่า เพื่อไม่ให้มีปัจจัยการปรับค่ามาแทรกแซงข้อมูลที่ผู้อ่านได้รับ

รายชื่อหุ้นที่กำไรในปี 2026 รวม ETF ที่มี Leverage หรือไม่?

ไม่รวม กองทุน Leverage หรือกองทุน Inverse จะทวีคูณการเคลื่อนไหวรายวันของดัชนีหรือหุ้นรายตัว ดังนั้นกองทุนเหล่านี้จึงมักติดอันดับต้นๆ ในรายการหุ้นที่มีการเคลื่อนไหวสูงโดยไม่มีข่าวสารของบริษัทมารองรับ กองทุนเหล่านี้จะถูกคัดออกก่อนการจัดอันดับ และสามารถตรวจสอบรายชื่อได้ใน SQL ภายใต้แต่ละตาราง สำหรับ ETF ดัชนีและกลุ่มอุตสาหกรรมทั่วไปนั้นเป็นคนละกรณี เนื่องจากผ่านเกณฑ์เดียวกับหุ้นทั่วไปและถูกจัดอันดับที่นี่ ดังนั้นกองทุนจึงสามารถปรากฏในตารางใดก็ได้


ทุกตารางในที่นี้คือการดึงข้อมูลจาก Query ที่จัดเก็บไว้พร้อมกับ SQL แนบท้าย คุณสามารถขยายแถบข้อมูลเพื่อตรวจสอบเกณฑ์การคัดเลือก หรือสร้างเกณฑ์ใหม่ด้วยตนเองบนเทอร์มินัล Strasmore