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

หุ้นที่มีการเคลื่อนไหวมากที่สุดประจำเดือนนี้

สรุปรายชื่อหุ้นที่มีการเปลี่ยนแปลงราคาสูงสุดทั้งขาขึ้นและขาลงประจำเดือนนี้ โดยจัดลำดับตามข้อมูลจากตลาดหลักทรัพย์ พร้อมระบุมูลค่าการซื้อขายรวมเป็นจำนวนดอลลาร์

รายการหุ้นที่มีการเคลื่อนไหวมากที่สุดในเดือนนี้ จัดลำดับตามข้อมูลจากตลาดหลักทรัพย์ โดยครอบคลุมช่วงเวลาการซื้อขายที่เสร็จสิ้นแล้วจำนวน 21 ครั้ง ตั้งแต่ Jun 23 ถึง Jul 22 ข้อมูลนี้คัดเลือกเฉพาะบริษัทที่มีมูลค่าการซื้อขายอย่างน้อย 1 พันล้านดอลลาร์ในช่วงเวลาดังกล่าว เพื่อให้มั่นใจว่าทุกการเคลื่อนไหวในรายการนี้มีเม็ดเงินจริงรองรับ ทั้งนี้ได้คัดกองทุนที่มีการใช้ Leverage และกองทุน Inverse ออกไป และข้อมูลจะถูกอัปเดตไปข้างหน้าเมื่อสิ้นสุดรอบการซื้อขายใหม่

หุ้นที่มีมูลค่าเพิ่มขึ้นสูงสุดในเดือนนี้

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

คำสั่งดึงข้อมูลหุ้นที่มีผลตอบแทนสูงสุดในเดือนนี้ (มูลค่าซื้อขาย > $1B ในช่วงเวลาดังกล่าว)
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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 d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT ticker,
       round((argMax(c, d) / argMin(o, d) - 1) * 100, 1) AS month_return_pct,
       round(sum(dollars) / 1e9, 1) AS month_dollar_bn
FROM (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS o,
           argMax(toFloat64(close), window_start) AS c,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 34 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
      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','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                     WHERE market_cap > 0)
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 45 AND today())
    GROUP BY ticker, d
)
GROUP BY ticker
HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
ORDER BY argMax(c, d) / argMin(o, d) DESC
LIMIT 10

CRNX นำโด่งที่ 136.1% โดยมีมูลค่าการซื้อขาย 9.7 พันล้านดอลลาร์ แซงหน้า PBF ที่ 65.9% และ MAN ที่ 62.1% การเคลื่อนไหวในระดับนี้ภายในหนึ่งเดือน มักจะปรากฏให้เห็นในรูปแบบของ relative volume ที่สูงขึ้นเมื่อเทียบกับ average daily volume ของหุ้น และมักจะเริ่มต้นจากการเกิด overnight gap ในบางเซสชัน แทนที่จะเป็นการปรับตัวขึ้นอย่างต่อเนื่องตลอดทั้งช่วงเวลา

หุ้นที่ราคาลดลงมากที่สุดในเดือนนี้

ข้อมูลในทิศทางตรงกันข้าม: หุ้นที่มีการปรับตัวลดลงรุนแรงที่สุดในช่วงเวลาดังกล่าว โดยพิจารณาเฉพาะบริษัทที่มีมูลค่าการซื้อขายมากกว่า 1 พันล้านดอลลาร์

คำสั่งดึงข้อมูลหุ้นที่มีผลตอบแทนต่ำสุดในเดือนนี้ (มูลค่าซื้อขาย > $1B ในช่วงเวลาดังกล่าว)
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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 d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT ticker,
       round((argMax(c, d) / argMin(o, d) - 1) * 100, 1) AS month_return_pct,
       round(sum(dollars) / 1e9, 1) AS month_dollar_bn
FROM (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS o,
           argMax(toFloat64(close), window_start) AS c,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 34 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
      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','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                     WHERE market_cap > 0)
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 45 AND today())
    GROUP BY ticker, d
)
GROUP BY ticker
HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
ORDER BY argMax(c, d) / argMin(o, d) ASC
LIMIT 10

CLBK เป็นหุ้นที่มีราคาลดลงมากที่สุดที่ -44.6% จากมูลค่าการซื้อขาย 1.1 พันล้านดอลลาร์ โดยมี NVTS ตามมาที่ -41.6% โปรดสังเกตคอลัมน์ดอลลาร์ในตารางนี้ การลดลงของหุ้นที่มีปริมาณการซื้อขายสูงนั้นมีความแตกต่างจากการลดลงในสภาวะตลาดที่เงียบเหงา ซึ่งข้อมูลชุดนี้จะแสดงความแตกต่างดังกล่าวให้เห็นอย่างชัดเจนแทนการคาดเดา

คำถามเดียวกันในสามกรอบเวลา

หนึ่งคำถาม กับสามช่วงเวลา ชื่อหุ้นหนึ่งอาจติดอันดับสูงสุดในตารางหนึ่ง แต่ไม่ปรากฏเลยในอีกสองตารางที่เหลือ

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

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

สถานะของตลาดในช่วงเวลาเดียวกัน

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

คำสั่งดึงข้อมูลดัชนีหลัก 4 ดัชนีในช่วงเวลาเดียวกัน โดยปรับฐานที่ราคาเปิดวันแรก
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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 d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT session,
       round(anyIf(cum_pct, ticker = 'SPY'), 2) AS sp500_pct,
       round(anyIf(cum_pct, ticker = 'QQQ'), 2) AS nasdaq100_pct,
       round(anyIf(cum_pct, ticker = 'DIA'), 2) AS dow_pct,
       round(anyIf(cum_pct, ticker = 'IWM'), 2) AS russell2000_pct
FROM (
    SELECT ticker,
           formatDateTime(d, '%Y-%m-%d') AS session,
           100 * (c / first_value(o) OVER (PARTITION BY ticker ORDER BY d) - 1) AS cum_pct
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMin(toFloat64(open), window_start) AS o,
               argMax(toFloat64(close), window_start) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 34 DAY
          AND ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
          AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
          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, d
    )
)
GROUP BY session
ORDER BY session

เมื่อสิ้นสุดการซื้อขายวันสุดท้าย ดัชนี S&P 500 อยู่ที่ 1.85%, ดัชนี Nasdaq 100 อยู่ที่ -1.47%, ดัชนี Dow อยู่ที่ 1.33% และดัชนี Russell 2000 อยู่ที่ 0.17% ตะกร้าหุ้นสี่กลุ่มในช่วงเวลาเดียวกันให้ผลลัพธ์ที่แตกต่างกันสี่รูปแบบ เมื่อเปรียบเทียบกับช่วงเวลาดังกล่าว พบว่ากลุ่มหุ้นที่มีผลตอบแทนสูงสุดมีค่าเกิน 136.1% ทั้งนี้ หุ้นรายตัวมีการเคลื่อนไหวที่แตกต่างกันมากกว่าดัชนีที่รวมหุ้นเหล่านั้นไว้ ซึ่งเป็นเหตุผลหลักที่รายการหุ้นที่มีการเคลื่อนไหวมาก (movers list) ต้องระบุเป็นรายชื่อหุ้นรายตัว

ผลประกอบการของหุ้นบริษัทชั้นนำ

ผู้อ่านที่กำลังมองหาหุ้นที่มีผลตอบแทนสูงสุดในเดือนนี้ มักต้องการทราบผลการดำเนินงานของหุ้นที่ตนเองถือครองอยู่ด้วย โดยเป็นการเปรียบเทียบหุ้นขนาดใหญ่ที่เป็นที่รู้จักกันดีจำนวนแปดบริษัท ซึ่งใช้ช่วงเวลาและวิธีการจัดกลุ่มแบบเดียวกัน:

คำสั่งดึงข้อมูลหุ้น Mega-cap 8 บริษัทในช่วงเวลาเดียวกัน
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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 d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT ticker,
       round((argMax(c, d) / argMin(o, d) - 1) * 100, 1) AS month_return_pct
FROM (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS o,
           argMax(toFloat64(close), window_start) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 34 DAY
      AND ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'META', 'TSLA', 'AVGO')
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
      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 (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 45 AND today())
    GROUP BY ticker, d
)
GROUP BY ticker
HAVING count() >= 15
ORDER BY argMax(c, d) / argMin(o, d) DESC

กลุ่มหุ้นดังกล่าวมีผลตอบแทนตั้งแต่ 11.5% สำหรับ META ซึ่งเป็นค่าสูงสุด ไปจนถึง -4.7% สำหรับ TSLA ซึ่งเป็นค่าต่ำสุด หุ้นเหล่านี้ไม่ได้เคลื่อนที่ไปในทิศทางเดียวกัน ซึ่งถือเป็นเรื่องปกติมากกว่าจะเป็นข้อยกเว้น แม้ว่าบริษัทเหล่านี้จะถูกจัดกลุ่มรวมกันตามดัชนี แต่สายงานรายได้ของแต่ละบริษัทแทบไม่มีความเกี่ยวข้องกันเลย ทั้งนี้ ตะกร้าหุ้นนี้เป็นการกำหนดรายชื่อแปดบริษัทแบบคงที่ ไม่ใช่การจัดลำดับ ดังนั้นควรใช้ข้อมูลนี้เพื่อเป็นแนวทางเท่านั้น ไม่ใช่การระบุว่าบริษัทใดมีขนาดใหญ่ที่สุด

ลักษณะของเดือนปกติ

ตารางอันดับแสดงข้อมูลส่วนปลาย (tail) แต่ข้อมูลนี้แสดงถึงข้อมูลส่วนใหญ่ (body) บริษัททั้งหมดใน 1167 ที่ผ่านการคัดกรอง ถูกจัดกลุ่มตามผลตอบแทนในช่วงเวลาดังกล่าว:

คำสั่งดึงข้อมูลผลตอบแทนรายเดือนแบ่งตามกลุ่มของบริษัทที่ผ่านการคัดกรอง
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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 d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT tup.1 AS return_bucket,
       tup.3 AS stocks
FROM (
    SELECT arrayJoin(arrayZip(
               ['down 20% or more', 'down 10% to 20%', 'down 0% to 10%',
                'up 0% to 10%', 'up 10% to 20%', 'up 20% or more'],
               [1, 2, 3, 4, 5, 6],
               [countIf(r <= -20), countIf(r > -20 AND r <= -10), countIf(r > -10 AND r < 0),
                countIf(r >= 0 AND r < 10), countIf(r >= 10 AND r < 20), countIf(r >= 20)])) AS tup
    FROM (
        SELECT ticker,
               (argMax(c, d) / argMin(o, d) - 1) * 100 AS r
        FROM (
            SELECT ticker,
                   toDate(toTimeZone(window_start, 'America/New_York')) AS d,
                   argMin(toFloat64(open), window_start) AS o,
                   argMax(toFloat64(close), window_start) AS c,
                   sum(toFloat64(close) * toFloat64(volume)) AS dollars
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE window_start >= now() - INTERVAL 34 DAY
              AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
              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','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
              AND ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                             WHERE market_cap > 0)
              AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                                 WHERE execution_date BETWEEN today() - 45 AND today())
            GROUP BY ticker, d
        )
        GROUP BY ticker
        HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
    )
)
ORDER BY tup.2

52 ของบริษัทที่ผ่านการคัดกรองมีกำไรตั้งแต่ 20% ขึ้นไปในช่วงเวลาดังกล่าว และ 50 มีผลขาดทุนตั้งแต่ 20% ขึ้นไป กลุ่มที่มีผลตอบแทนใกล้เคียงกับศูนย์มีจำนวน 300 และ 515 บริษัท แผนภูมินี้แสดงรูปแบบที่ใช้ในการจัดทำตารางหุ้นที่มีการเคลื่อนไหวสูง (movers leaderboard) โดยที่หุ้นสิบอันดับแรกคือส่วนปลายสุดทางด้านขวา โปรดอ่านตารางด้านบนโดยคำนึงถึงข้อเท็จจริงนี้ว่า การเคลื่อนไหวในสิบอันดับแรกของเดือนคือค่าผิดปกติ (outlier) โดยโครงสร้าง และไม่ใช่เหตุการณ์ปกติสำหรับหุ้นทั่วไปในเดือนปกติทั่วไป

ปัจจัยที่ทำให้หุ้นติดอันดับหุ้นที่มีการเคลื่อนไหวสูงสุดรายเดือน

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

ข่าวการควบรวมและซื้อกิจการ (M&A) เป็นปัจจัยที่สร้างรูปแบบที่ชัดเจนที่สุดในตารางรายเดือน ราคาหุ้นจะพุ่งขึ้นไปใกล้ระดับราคาที่ประกาศในข้อตกลง จากนั้นราคาจะเริ่มนิ่ง ในขณะที่มูลค่าการซื้อขาย (dollars traded) ยังคงอยู่ในระดับสูงมาก แต่เปอร์เซ็นต์การเปลี่ยนแปลงจะเริ่มคงที่ หากหุ้นที่อยู่ในอันดับต้นๆ ของตารางหุ้นที่ปรับตัวขึ้นสูงสุด มีมูลค่าการซื้อขายสูงมากและราคาหยุดเคลื่อนไหวในช่วงกลางของช่วงเวลาที่กำหนด รูปแบบดังกล่าวเป็นสิ่งที่ควรตรวจสอบเป็นอันดับแรก

การเคลื่อนไหวของกลุ่มอุตสาหกรรม (Sector moves) มีความสำคัญในกรอบเวลาหนึ่งเดือน ซึ่งต่างจากการเคลื่อนไหวในกรอบเวลาหนึ่งสัปดาห์ การเปลี่ยนแปลงของอัตราดอกเบี้ย ราคาน้ำมัน หรือราคาหน่วยความจำ สามารถส่งผลกระทบต่อหุ้นทั้งกลุ่มได้พร้อมกัน ด้วยเหตุนี้ ตารางรายเดือนจึงมักแสดงกลุ่มธุรกิจที่คล้ายคลึงกันแทนที่จะเป็นหุ้นสิบตัวที่ไม่เกี่ยวข้องกัน ส่วนปัจจัยที่เหลือประกอบด้วย การดำเนินการของนักวิเคราะห์ การนำหุ้นเข้าหรือออกจากดัชนี ผลการทดสอบทางคลินิกและกฎระเบียบ และสภาวะ Short squeeze ข้อมูลเหล่านี้ไม่สามารถดูได้จากเปอร์เซ็นต์เพียงอย่างเดียว จึงเป็นเหตุผลที่ต้องมีคอลัมน์มูลค่าการซื้อขายและช่วงเวลาของตลาดประกอบอยู่ข้างการเคลื่อนไหวทุกครั้งในที่นี้

วิธีการวัดผล

เกณฑ์ทุกอย่างจะถูกระบุไว้ที่นี่อย่างชัดเจนโดยไม่มีการละไว้ในฐานที่เข้าใจ การใช้เกณฑ์ที่ซ่อนอยู่จะทำให้ข้อมูลกลายเป็นเพียงความเห็น

  • ช่วงเวลา (The window). คือช่วงเวลา 30 วันปฏิทินย้อนหลัง นับจากเซสชันล่าสุดที่มีข้อมูลครบถ้วน ซึ่งมีจำนวน 21 เซสชัน ตั้งแต่ Jun 23 ถึง Jul 22 โดยมีกฎสองข้อในการพิจารณาว่าเซสชันใดเข้าเกณฑ์บ้าง เซสชันนั้นต้องปิดตลาดก่อนวันที่ปัจจุบันในนิวยอร์ก ดังนั้นเซสชันที่กำลังดำเนินอยู่จะไม่ถูกนำมาคำนวณ นอกจากนี้ จำนวนแท่งเทียนในช่วงเวลาทำการปกติ (regular-hours) ต้องมีค่าถึง 85% ของค่ามัธยฐานของเซสชันในช่วงการสแกน 34 วัน เพื่อป้องกันไม่ให้ข้อมูลของวันที่เพิ่งเริ่มต้นการซื้อขายถูกนำมาคำนวณเนื่องจากข้อมูลยังไม่ครบถ้วน เนื่องจากเซสชันวันหยุดที่มีเวลาทำการสั้นจะมีจำนวนแท่งเทียนเพียงประมาณครึ่งหนึ่งของวันปกติ กฎนี้จึงตัดเซสชันดังกล่าวออกแทนที่จะนำข้อมูลที่ยังไม่สมบูรณ์มาคำนวณ
  • ผลตอบแทน (The return). คำนวณจากราคาเปิดของเซสชันปกติแรกในช่วงเวลาที่กำหนด ไปจนถึงราคาปิดของเซสชันปกติสุดท้าย โดยใช้ข้อมูลจากแท่งเทียนระดับนาที คำนวณเฉพาะช่วงเวลาทำการปกติเท่านั้น ดังนั้นจึงไม่รวมราคาช่วง premarket และ after-hours และเป็นการคำนวณผลตอบแทนจากราคา (price return) โดยไม่มีการรวมเงินปันผลกลับเข้าไป
  • เกณฑ์ขั้นต่ำ (The floors). ต้องมีมูลค่าการซื้อขายรวมตลอดช่วงเวลาอย่างน้อย 1 พันล้านดอลลาร์ ราคาเปิดต้องมีค่าตั้งแต่ 10 ดอลลาร์ขึ้นไป และต้องมีการซื้อขายอย่างน้อย 15 เซสชันในช่วงเวลาดังกล่าว เกณฑ์มูลค่าดอลลาร์เป็นยอดรวมรายเดือน ซึ่งทำให้ผ่านเกณฑ์ได้ง่ายกว่าการวัดผลด้วยยอดรวมรายสัปดาห์
  • การยกเว้น (The exclusions). กองทุน Leverage และ Inverse จะถูกคัดออกตามรายชื่อ นอกจากนี้ทุก ticker ต้องมีข้อมูลปัจจัยพื้นฐานของบริษัทและมีมูลค่า Market Cap ในฐานข้อมูลอ้างอิงของเรา กฎข้อที่สองนี้ส่งผลให้ ETF, closed-end funds, commodity trusts และกลุ่มผลิตภัณฑ์ leveraged single-stock ที่กำลังเติบโตอย่างรวดเร็วถูกคัดออก ซึ่งหากไม่ใช้กฎนี้ ข้อมูลส่วนใหญ่ในตารางจะเต็มไปด้วยกลุ่มดังกล่าว ตารางอ้างอิงนี้เก็บข้อมูลหนึ่งแถวต่อหนึ่ง ticker แทนที่จะเป็นภาพถ่ายข้อมูลรายวัน ดังนั้นการสแกนจะใช้ข้อมูลจากทั้งตารางแทนที่จะใช้ข้อมูล ณ วันใดวันหนึ่งในการตัดสินคุณสมบัติ สำหรับ ticker ใดที่มีการแตกหุ้น (stock split) ในช่วง 45 วันที่ผ่านมาจะถูกคัดออกแทนที่จะใช้การปรับราคาย้อนหลัง (back-adjusted) เนื่องจากสัดส่วนราคาต่อหุ้นที่เปลี่ยนไปไม่ได้ทำให้มูลค่าของการถือครองเปลี่ยนไป และมีหนึ่งสัญลักษณ์ที่ถูกคัดออกตามรายชื่อเนื่องจากผู้ให้บริการข้อมูลมีการเปลี่ยนชื่อสัญลักษณ์ระหว่างสองบริษัทที่แตกต่างกัน
  • แผงหุ้น Mega-cap (The mega-cap panel). เป็นตะกร้าหุ้นคงที่ซึ่งประกอบด้วยบริษัทขนาดใหญ่ในสหรัฐฯ 8 แห่งที่ถือครองกันอย่างแพร่หลาย โดยมีรายชื่อระบุไว้ใน SQL ของแผงดังกล่าว แผงนี้ใช้ช่วงเวลาและวิธีการคำนวณผลตอบแทนแบบเดียวกับตารางอื่น แต่ไม่อยู่ภายใต้เกณฑ์มูลค่าการซื้อขาย (dollar-volume)
  • สิ่งที่ไม่นำมาใช้. ไม่มีการใช้ตัวกรองกลุ่มอุตสาหกรรม (sector filter) ไม่มีเกณฑ์ขั้นต่ำของ Market Cap และไม่มีข้อกำหนดการเป็นสมาชิกในดัชนี ดังนั้นบริษัทขนาดเล็กที่มีการซื้อขายหมุนเวียนสูงจึงสามารถปรากฏในตารางเคียงคู่กับบริษัทขนาดใหญ่ได้ การจัดอันดับใช้เพียงเปอร์เซ็นต์การเปลี่ยนแปลงเท่านั้น จึงมีการแสดงคอลัมน์มูลค่าการซื้อขาย (dollars-traded) ไว้ข้างกัน

แผงข้อมูลหนึ่งจะแสดงรายละเอียดทั้งหมด ได้แก่ เซสชันที่ครอบคลุมในช่วงเวลาที่กำหนด และขอบเขตของหุ้น (universe) ที่ใช้ในการสแกนแต่ละตาราง

คำสั่งดึงข้อมูลช่วงเวลาและขอบเขตของหุ้นที่ใช้ในการคัดกรองสำหรับทุกแผนภูมิในหน้านี้
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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 d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
),
screened AS (
    SELECT ticker
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMin(toFloat64(open), window_start) AS o,
               sum(toFloat64(close) * toFloat64(volume)) AS dollars
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 34 DAY
          AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
          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','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
          AND ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                         WHERE market_cap > 0)
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                             WHERE execution_date BETWEEN today() - 45 AND today())
        GROUP BY ticker, d
    )
    GROUP BY ticker
    HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
)
SELECT formatDateTime(w.first_d, '%b %e') AS first_session_date,
       formatDateTime(w.last_d, '%b %e') AS last_session_date,
       w.n AS sessions,
       (SELECT count() FROM global_markets.stocks_ratios WHERE market_cap > 0) AS companies_on_file,
       (SELECT count() FROM screened) AS companies_screened
FROM (SELECT min(d) AS first_d, max(d) AS last_d, count() AS n FROM window_days) AS w

การสแกนเริ่มต้นจาก 4121 tickers ที่มีมูลค่า Market Cap ในตารางอ้างอิง และสิ้นสุดที่ 1167 บริษัทที่ผ่านเกณฑ์มูลค่าการซื้อขาย ราคา และจำนวนเซสชัน ทั้งสองตัวเลขจะถูกบันทึกไว้ทุกครั้งที่มีการรีเฟรชหน้านี้ ดังนั้นหากจำนวนหุ้นในขอบเขตการสแกนลดลง ข้อมูลดังกล่าวจะแสดงให้เห็นในรายละเอียดแทนที่จะถูกมองข้ามไป

FAQ

หุ้นที่มีการปรับตัวขึ้นสูงสุดในเดือนนี้คือหุ้นใด?

สำหรับช่วงเวลาที่สิ้นสุด ณ Jul 22 หุ้นที่มีการปรับตัวขึ้นสูงสุดในกลุ่มบริษัทที่มีมูลค่าการซื้อขายมากกว่า 1 พันล้านดอลลาร์ คือ CRNX ที่ 136.1% และ PBF ที่ 65.9% รายชื่อหุ้นสิบอันดับแรกทั้งหมดแสดงอยู่ในตารางแรกของหน้านี้ และข้อมูลจะมีการอัปเดตต่อเนื่องเมื่อสิ้นสุดรอบการซื้อขายใหม่

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

CLBK เป็นหุ้นที่มีการปรับตัวลดลงมากที่สุดที่ -44.6% ตามด้วย NVTS ที่ -41.6% โดยทั้งสองรายการวัดผลจากจำนวนรอบการซื้อขาย 21 เช่นเดียวกับรายการหุ้นที่ปรับตัวขึ้น และใช้เกณฑ์มูลค่าการซื้อขายขั้นต่ำที่ 1 พันล้านดอลลาร์เช่นเดียวกัน

การวัดผลตอบแทนของหุ้นรายเดือนทำอย่างไร?

ผลตอบแทนรายเดือนในที่นี้คือการเปลี่ยนแปลงจากราคาเปิดในรอบการซื้อขายปกติครั้งแรกภายในช่วงเวลาที่กำหนด ไปยังราคาปิดในรอบการซื้อขายปกติครั้งสุดท้าย ซึ่งคำนวณจากข้อมูลราคาแบบรายนาที นี่คือผลตอบแทนจากส่วนต่างราคา (price return) ดังนั้นจึงไม่มีการรวมเงินปันผล และบริษัทใดที่มีการแตกหุ้นในช่วงใกล้กับช่วงเวลาที่กำหนดจะถูกคัดออกจากการคำนวณ แทนที่จะใช้การปรับปรุงข้อมูลย้อนหลัง (back-adjusted)

ทำไมจึงไม่รวม Leveraged ETF ไว้ในรายการหุ้นที่มีการเคลื่อนไหวมากที่สุด?

กองทุน Leveraged หรือ Inverse จะเพิ่มทวีคูณการเคลื่อนไหวรายวันของดัชนีหรือหุ้นรายตัว ดังนั้นกองทุนเหล่านี้อาจติดอันดับหุ้นที่มีการเคลื่อนไหวสูงสุดในวันซื้อขายปกติได้โดยไม่มีข่าวสารของบริษัทมารองรับ การคัดออกช่วยให้รายการนี้แสดงเฉพาะรายชื่อบริษัทที่ดำเนินธุรกิจจริง วิธีการทำงานของ Leveraged ETF จะอธิบายเกี่ยวกับการรีเซ็ตรายวัน (daily reset) และความคลาดเคลื่อน (drift) ที่เกิดขึ้นจากการถือครองเป็นเวลาหนึ่งเดือน


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