Strasmore Research
การเรียนรู้ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-06

High-Low Index คืออะไร วิธีวัดความกว้างของตลาด

ดัชนี High-Low คือค่าเฉลี่ยสิบวันของ Record High Percent เรียนรู้วิธีคำนวณด้วยตัวเลขกลมๆ พร้อมทำความเข้าใจกับกับดักขนาดกลุ่มตัวอย่างในช่วงตลาดซบเซาที่อาจทำให้ผลลัพธ์คลาดเคลื่อนได้

ดัชนี High-Low กับการวัดความกว้างของตลาด

ดัชนี High-Low เป็นเครื่องมือวัดความกว้างของตลาด (market breadth) ที่คำนวณจากสองส่วนประกอบ โดยเริ่มจากการหาค่า Record High Percent ซึ่งเป็นค่าเฉลี่ยเคลื่อนที่แบบง่าย (simple moving average) ในรอบสิบวัน ค่า Record High Percent นี้คำนวณโดยนำจำนวนหุ้นที่ทำจุดสูงสุดใหม่ในรอบห้าสิบสองสัปดาห์ หารด้วยผลรวมของจำนวนหุ้นที่ทำจุดสูงสุดใหม่และจุดต่ำสุดใหม่ในรอบห้าสิบสองสัปดาห์ แล้วคูณด้วยหนึ่งร้อย

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

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

ตัวอย่างการคำนวณและข้อควรระวังในเดือนมิถุนายน 2026

วิธีการคำนวณดัชนี High-Low Index

มีสองขั้นตอน ซึ่งทั้งสองขั้นตอนสามารถสรุปได้ในบรรทัดเดียว

  1. คำนวณ Record High Percent สำหรับหนึ่งช่วงการซื้อขาย: นับจำนวนหุ้นในกลุ่มที่คุณสนใจที่ปิดที่ระดับสูงสุดใหม่ในรอบ 52 สัปดาห์ และนับจำนวนหุ้นที่ปิดที่ระดับต่ำสุดใหม่ในรอบ 52 สัปดาห์ จากนั้นนำจำนวนหุ้นที่ทำจุดสูงสุดใหม่หารด้วยผลรวมของทั้งสองค่า แล้วคูณด้วย 100
  2. ดัชนี High-Low Index: คำนวณค่าเฉลี่ยของค่า Record High Percent ย้อนหลัง 10 วันทำการ

ตัวเลขกลมๆ จะช่วยให้เห็นภาพชัดเจนขึ้น หากมีการซื้อขายหุ้นที่ทำจุดสูงสุดใหม่ 90 ตัว และจุดต่ำสุดใหม่ 30 ตัว ผลรวมของจุดสูงสุดและจุดต่ำสุดคือ 120 และเมื่อนำ 90 หารด้วย 120 จะได้ 0.75 ดังนั้น Record High Percent สำหรับช่วงการซื้อขายนั้นคือ 75 จากนั้นนำค่าที่อ่านได้จากสิบช่วงการซื้อขายมาคำนวณ: 75, 70, 65, 60, 55, 50, 45, 40, 35 และ 30 ผลรวมคือ 525 และเมื่อนำ 525 หารด้วย 10 จะได้ 52.5 ดัชนี High-Low Index จึงอยู่ที่ 52.5 ในวันที่ค่า Record High Percent ของวันนั้นอยู่ที่ 75

ช่องว่างดังกล่าวคือผลลัพธ์จากการใช้ค่าเฉลี่ยเคลื่อนที่ หน่วยความจำย้อนหลังสิบวันช่วยปรับให้ข้อมูลที่สามารถเหวี่ยงจาก 100 ไปสู่ 0 ได้ในชั่วข้ามคืนมีความราบรื่นขึ้น โดยแลกกับการที่ข้อมูลมีความล่าช้า ดัชนีนี้ตอบคำถามว่าความกว้างของตลาด (breadth) เป็นอย่างไรในช่วงสองสัปดาห์ที่ผ่านมา แต่ไม่ได้ตอบว่าเกิดอะไรขึ้นในช่วงบ่ายวันนี้

อะไรคือเกณฑ์ของจุดสูงสุดใหม่ในรอบ 52 สัปดาห์

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

ตารางด้านล่างแสดงจำนวนของทั้งสองสภาวะในแต่ละรอบการซื้อขายสำหรับกลุ่มหุ้นขนาดใหญ่ในสหรัฐฯ จำนวน 40 ตัว ตั้งแต่วันที่ 1 เมษายน ถึง 31 กรกฎาคม 2026 กลุ่มหุ้นขนาดนี้ช่วยให้สามารถตรวจสอบจำนวนได้ด้วยตนเอง ซึ่งจะทำให้เห็นข้อผิดพลาดในสูตรคำนวณได้ชัดเจนในภายหลัง

คำสั่งดึงข้อมูลจำนวนหุ้นทำจุดสูงสุดและต่ำสุดใหม่ในรอบ 52 สัปดาห์รายวัน: หุ้นขนาดใหญ่ในสหรัฐฯ 40 ตัว ช่วงเดือนเมษายนถึงกรกฎาคม 2026
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily_close AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','AVGO','JPM','JNJ','XOM','PG',
                     'KO','PEP','WMT','HD','CVX','MRK','PFE','ABBV','CSCO','ORCL',
                     'CRM','ADBE','MCD','NKE','VZ','T','DIS','BA','CAT','GE',
                     'IBM','MMM','UNH','LLY','COST','TGT','SBUX','GS','MS','LIN')
      AND window_start >= toDateTime('2025-03-01 00:00:00')
      AND window_start < toDateTime('2026-08-01 05:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session_date
),
extremes AS (
    SELECT cur.ticker AS ticker,
           cur.session_date AS session_date,
           cur.close_px AS close_px,
           max(hist.close_px) AS high_52w,
           min(hist.close_px) AS low_52w
    FROM daily_close AS cur
    INNER JOIN daily_close AS hist ON cur.ticker = hist.ticker
    WHERE cur.session_date >= toDate('2026-04-01')
      AND hist.session_date <= cur.session_date
      AND hist.session_date > cur.session_date - 364
    GROUP BY cur.ticker, cur.session_date, cur.close_px
),
daily AS (
    SELECT session_date,
           countIf(close_px >= high_52w) AS new_highs,
           countIf(close_px <= low_52w) AS new_lows,
           countIf(close_px >= high_52w) + countIf(close_px <= low_52w) AS names_at_extreme
    FROM extremes
    GROUP BY session_date
    HAVING names_at_extreme > 0
)
SELECT session_date AS date,
       formatDateTimeInJodaSyntax(session_date, 'MMM d') AS session_label,
       new_highs,
       new_lows
FROM daily
ORDER BY session_date
Run this yourself

ตลอด 77 รอบการซื้อขาย จำนวนทั้งสองค่ามักไม่ปรับตัวขึ้นพร้อมกัน ในวันที่ Jul 29 ซึ่งเป็นรอบการซื้อขายสุดท้ายในช่วงเวลาดังกล่าว มีหุ้น 3 จากทั้งหมด 40 ตัวที่ปิดที่จุดสูงสุดใหม่ในรอบ 52 สัปดาห์ และมี 0 ตัวที่ปิดที่จุดต่ำสุดใหม่ในรอบ 52 สัปดาห์ ส่วนในวันที่ Apr 1 ซึ่งเป็นรอบการซื้อขายแรก มีหุ้นที่ทำจุดสูงสุด 1 ตัว เทียบกับหุ้นที่ทำจุดต่ำสุด 1 ตัว หุ้นตัวอื่น ๆ ทั้งหมดในกลุ่มมีราคาเคลื่อนไหวอยู่ภายในกรอบของตัวเองและไม่ได้ถูกนำมาคำนวณ

ค่า High-Low Index ที่ดีควรเป็นเท่าใด

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

แผงข้อมูลด้านล่างแสดงค่า Record High Percent รายวันเทียบกับค่าเฉลี่ย 10 วันของกลุ่มหลักทรัพย์เดียวกัน โดยความล่าช้าของข้อมูลจะปรากฏให้เห็นบนแผนภูมิแทนการอธิบายเป็นตัวอักษร

คำสั่งดึงข้อมูลสัดส่วนการทำจุดสูงสุดใหม่ (Record High Percent) และค่าเฉลี่ย 10 วัน (High-Low Index) ของกลุ่มหุ้น 40 ตัว
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily_close AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','AVGO','JPM','JNJ','XOM','PG',
                     'KO','PEP','WMT','HD','CVX','MRK','PFE','ABBV','CSCO','ORCL',
                     'CRM','ADBE','MCD','NKE','VZ','T','DIS','BA','CAT','GE',
                     'IBM','MMM','UNH','LLY','COST','TGT','SBUX','GS','MS','LIN')
      AND window_start >= toDateTime('2025-03-01 00:00:00')
      AND window_start < toDateTime('2026-08-01 05:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session_date
),
extremes AS (
    SELECT cur.ticker AS ticker,
           cur.session_date AS session_date,
           cur.close_px AS close_px,
           max(hist.close_px) AS high_52w,
           min(hist.close_px) AS low_52w
    FROM daily_close AS cur
    INNER JOIN daily_close AS hist ON cur.ticker = hist.ticker
    WHERE cur.session_date >= toDate('2026-04-01')
      AND hist.session_date <= cur.session_date
      AND hist.session_date > cur.session_date - 364
    GROUP BY cur.ticker, cur.session_date, cur.close_px
),
daily AS (
    SELECT session_date,
           countIf(close_px >= high_52w) AS new_highs,
           countIf(close_px >= high_52w) + countIf(close_px <= low_52w) AS names_at_extreme
    FROM extremes
    GROUP BY session_date
    HAVING names_at_extreme > 0
),
rhp AS (
    SELECT session_date,
           round(100 * new_highs / names_at_extreme, 1) AS record_high_pct
    FROM daily
),
smoothed AS (
    SELECT session_date,
           record_high_pct,
           round(avg(record_high_pct) OVER (ORDER BY session_date
                                            ROWS BETWEEN 9 PRECEDING AND CURRENT ROW), 1) AS high_low_index_pct,
           count() OVER (ORDER BY session_date
                         ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) AS sessions_in_window
    FROM rhp
)
SELECT session_date AS date,
       formatDateTimeInJodaSyntax(session_date, 'MMM d') AS session_label,
       record_high_pct,
       high_low_index_pct
FROM smoothed
WHERE sessions_in_window = 10
ORDER BY session_date
Run this yourself

ช่วงข้อมูลที่แสดงเริ่มต้นที่ค่า Record High Percent ที่ 100 ในวันที่ Apr 15 โดยดัชนีอยู่ที่ 52.5 และสิ้นสุดที่ 100 ในวันที่ Jul 29 โดยดัชนีอยู่ที่ 64 การอ่านค่าควรเปรียบเทียบกับระดับ 70 และ 30 และให้พิจารณาระยะห่างระหว่างเส้นทั้งสองว่าเป็นต้นทุนของการปรับให้เรียบ (smoothing): ในทุก ๆ วัน ค่าเฉลี่ยจะยังคงรวมข้อมูลของเก้าช่วงการซื้อขายก่อนหน้าเอาไว้ด้วย โดยเก้าช่วงการซื้อขายแรกของกรอบเวลานี้จะถูกตัดออกจากการแสดงผล เนื่องจากค่าเฉลี่ย 10 วันจำเป็นต้องใช้ข้อมูลครบ 10 วัน

ตัวหารละเลยตลาดส่วนใหญ่

นี่คือข้อจำกัดที่ควรนำไปพิจารณา ตัวหารของ Record High Percent คือผลรวมของหุ้นที่ทำจุดสูงสุดใหม่และจุดต่ำสุดใหม่เท่านั้น หุ้นที่เคลื่อนไหวอยู่ตรงกลางของกรอบ 52 สัปดาห์จะไม่อยู่ทั้งในตัวเศษและตัวหาร ดัชนีนี้ไม่สามารถแยกแยะความแตกต่างระหว่างวันที่หุ้น 900 จาก 3,000 ตัวทำจุดสุดขั้ว กับวันที่หุ้นเพียง 9 ตัวทำจุดสุดขั้วได้ โดยดัชนีจะแสดงผลลัพธ์ทั้งสองกรณีออกมาเป็นตัวเลขสองหลักที่ดูมั่นใจเท่ากัน

ลองจินตนาการถึงตลาดที่มีหุ้น 6,000 ตัวในวันซื้อขายที่ซบเซาช่วงเดือนสิงหาคม: หุ้น 40 ตัวทำจุดสูงสุดใหม่ และ 20 ตัวทำจุดต่ำสุดใหม่ ค่า Record High Percent จะเท่ากับ 40 หารด้วย 60 หรือ 66.7 ซึ่งดูเหมือนเป็นการปรับตัวขึ้นในวงกว้าง ทั้งที่ตัวเลขนี้คำนวณมาจากหุ้นเพียงหนึ่งเปอร์เซ็นต์ของทั้งหมด ส่วนหุ้นอีก 5,940 ตัวไม่มีส่วนร่วมในการคำนวณนี้

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

คำสั่งดึงข้อมูลผลกระทบจากจำนวนหุ้นที่ทำจุดสูงสุดหรือต่ำสุดในรอบ 52 สัปดาห์ต่อการคำนวณดัชนี
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily_close AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','AVGO','JPM','JNJ','XOM','PG',
                     'KO','PEP','WMT','HD','CVX','MRK','PFE','ABBV','CSCO','ORCL',
                     'CRM','ADBE','MCD','NKE','VZ','T','DIS','BA','CAT','GE',
                     'IBM','MMM','UNH','LLY','COST','TGT','SBUX','GS','MS','LIN')
      AND window_start >= toDateTime('2025-03-01 00:00:00')
      AND window_start < toDateTime('2026-08-01 05:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session_date
),
extremes AS (
    SELECT cur.ticker AS ticker,
           cur.session_date AS session_date,
           cur.close_px AS close_px,
           max(hist.close_px) AS high_52w,
           min(hist.close_px) AS low_52w
    FROM daily_close AS cur
    INNER JOIN daily_close AS hist ON cur.ticker = hist.ticker
    WHERE cur.session_date >= toDate('2026-04-01')
      AND hist.session_date <= cur.session_date
      AND hist.session_date > cur.session_date - 364
    GROUP BY cur.ticker, cur.session_date, cur.close_px
),
daily AS (
    SELECT session_date,
           countIf(close_px >= high_52w) AS new_highs,
           countIf(close_px >= high_52w) + countIf(close_px <= low_52w) AS names_at_extreme
    FROM extremes
    GROUP BY session_date
    HAVING names_at_extreme > 0
)
SELECT multiIf(names_at_extreme <= 3, '1 to 3 names',
               names_at_extreme <= 9, '4 to 9 names',
               '10 or more names') AS sample_size_bucket,
       count() AS readings,
       round(avg(names_at_extreme), 1) AS avg_names_in_denominator,
       round(quantileDeterministic(0.5)(100 * new_highs / names_at_extreme,
                                        cityHash64(session_date)), 1) AS median_record_high_pct,
       round(quantileDeterministic(0.5)(abs(100 * new_highs / names_at_extreme - 50),
                                        cityHash64(session_date)), 1) AS median_distance_from_50
FROM daily
GROUP BY sample_size_bucket
ORDER BY avg_names_in_denominator
Run this yourself

ใน 39 วันซื้อขายที่อยู่ในกลุ่ม 1 to 3 names ค่าที่อ่านได้ทั้งหมดมาจากจำนวนหุ้นเฉลี่ย 2 ตัวจากทั้งหมด 40 ตัว วันเหล่านั้นมีค่ามัธยฐานของ Record High Percent อยู่ที่ 100 และอยู่ห่างจากเส้น 50 เป็นระยะมัธยฐาน 50 จุด สำหรับ 10 or more names วันซื้อขาย ซึ่งมี 1 ของจำนวนวันดังกล่าวที่ค่าเฉลี่ย 10 ตัว มีค่ามัธยฐานอยู่ที่ 70 และอยู่ห่างจากจุดกึ่งกลาง 20 จุด

หลักคณิตศาสตร์จำกัดค่าที่วันซื้อขายที่มีสภาพคล่องต่ำจะสามารถแสดงผลได้ หากมีหุ้นเพียงสามตัวที่ทำจุดสุดขั้ว ค่าที่เป็นไปได้จะมีเพียง 0, 33.3, 66.7 และ 100 เท่านั้น หากมีหุ้นเพียงสองตัว ค่าที่เป็นไปได้จะมีเพียง 0, 50 และ 100 การแสดงค่า 66.7 ที่เกิดจากหุ้นทำจุดสูงสุดสองตัวและจุดต่ำสุดหนึ่งตัวนั้น เป็นการแสดงทศนิยมที่กลุ่มตัวอย่างไม่สามารถรองรับได้ วิธีแก้ไขที่ถูกต้องคือ: ให้ดูจำนวนหุ้นที่ทำจุดสูงสุดและจุดต่ำสุดควบคู่ไปกับดัชนีเสมอ อย่าดูเพียงแค่ตัวเลขดัชนีเพียงอย่างเดียว

ความกว้างของตลาด: ดัชนี High-Low เทียบกับ Advance/Decline

มาตรวัดทั้งสองประเมินจำนวนหุ้นที่มีส่วนร่วมในตลาด โดยพิจารณาผ่านกรอบเวลาที่แตกต่างกัน ความกว้างแบบ Advance/Decline นับจำนวนหุ้นทุกตัวที่ปิดบวกหรือลบเมื่อเทียบกับวันก่อนหน้า โดยมีตัวหารคือหุ้นทั้งหมดในตลาดและสะท้อนภาพรวมของวันเดียว ส่วนดัชนี High-Low จะนับเฉพาะหุ้นที่ทำระดับสูงสุดหรือต่ำสุดในรอบ 52 สัปดาห์ โดยมีตัวหารที่น้อยกว่าและสะท้อนตำแหน่งราคาเมื่อเทียบกับประวัติราคาตลอดทั้งปี ดังนั้น ตลาดอาจปรับตัวสูงขึ้นในภาพรวมของวันนั้น ๆ ในขณะที่มีหุ้นเพียงไม่กี่ตัวที่ทำระดับสูงสุดในรอบ 52 สัปดาห์

แผงข้อมูลด้านล่างนี้ปรับค่าเฉลี่ยของมาตรวัดทั้งสองในช่วง 10 วันทำการเท่ากัน บนตะกร้าหุ้นชุดเดียวกัน เพื่อให้สามารถเปรียบเทียบในสเกลเดียวกันได้

คำสั่งดึงข้อมูลการเปรียบเทียบดัชนีความกว้างตลาด 2 รูปแบบในกลุ่มหุ้นเดียวกัน: High-Low Index 10 วัน เทียบกับสัดส่วนหุ้นปรับตัวขึ้น 10 วัน
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily_close AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','AVGO','JPM','JNJ','XOM','PG',
                     'KO','PEP','WMT','HD','CVX','MRK','PFE','ABBV','CSCO','ORCL',
                     'CRM','ADBE','MCD','NKE','VZ','T','DIS','BA','CAT','GE',
                     'IBM','MMM','UNH','LLY','COST','TGT','SBUX','GS','MS','LIN')
      AND window_start >= toDateTime('2025-03-01 00:00:00')
      AND window_start < toDateTime('2026-08-01 05:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session_date
),
extremes AS (
    SELECT cur.ticker AS ticker,
           cur.session_date AS session_date,
           cur.close_px AS close_px,
           max(hist.close_px) AS high_52w,
           min(hist.close_px) AS low_52w
    FROM daily_close AS cur
    INNER JOIN daily_close AS hist ON cur.ticker = hist.ticker
    WHERE cur.session_date >= toDate('2026-04-01')
      AND hist.session_date <= cur.session_date
      AND hist.session_date > cur.session_date - 364
    GROUP BY cur.ticker, cur.session_date, cur.close_px
),
daily AS (
    SELECT session_date,
           countIf(close_px >= high_52w) AS new_highs,
           countIf(close_px >= high_52w) + countIf(close_px <= low_52w) AS names_at_extreme
    FROM extremes
    GROUP BY session_date
    HAVING names_at_extreme > 0
),
prior AS (
    SELECT ticker,
           session_date,
           close_px,
           lagInFrame(close_px, 1) OVER (PARTITION BY ticker ORDER BY session_date
                                         ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM daily_close
),
breadth AS (
    SELECT session_date,
           round(100 * countIf(close_px > prev_close) / count(), 1) AS advancing_pct
    FROM prior
    WHERE session_date >= toDate('2026-04-01')
      AND prev_close > 0
    GROUP BY session_date
    HAVING count() >= 20
),
combined AS (
    SELECT d.session_date AS session_date,
           round(100 * d.new_highs / d.names_at_extreme, 1) AS record_high_pct,
           b.advancing_pct AS advancing_pct
    FROM daily AS d
    INNER JOIN breadth AS b ON d.session_date = b.session_date
),
smoothed AS (
    SELECT session_date,
           round(avg(record_high_pct) OVER (ORDER BY session_date
                                            ROWS BETWEEN 9 PRECEDING AND CURRENT ROW), 1) AS high_low_index_pct,
           round(avg(advancing_pct) OVER (ORDER BY session_date
                                          ROWS BETWEEN 9 PRECEDING AND CURRENT ROW), 1) AS advancing_pct_10d,
           count() OVER (ORDER BY session_date
                         ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) AS sessions_in_window
    FROM combined
)
SELECT session_date AS date,
       formatDateTimeInJodaSyntax(session_date, 'MMM d') AS session_label,
       high_low_index_pct,
       advancing_pct_10d
FROM smoothed
WHERE sessions_in_window = 10
ORDER BY session_date
Run this yourself

ข้อมูลทั้งสองชุดเริ่มต้นช่วงเวลาที่แสดงในกราฟที่ 52.5 สำหรับดัชนี High-Low และ 52.8 สำหรับสัดส่วนหุ้นที่ปรับตัวขึ้นในรอบ 10 วัน ณ วันที่ Apr 15 และสิ้นสุดที่ 64 และ 52.5 ณ วันที่ Jul 29 โดยครอบคลุมช่วงเวลาที่แสดงผลทั้งหมด 68 วันทำการ สัดส่วนหุ้นที่ปรับตัวขึ้นจะเคลื่อนไหวอยู่ในกรอบแคบ ๆ โดยปกติแล้วหุ้นประมาณครึ่งหนึ่งของตะกร้าจะปิดบวกในวันทำการทั่วไป และเมื่อนำมาหาค่าเฉลี่ยสิบวัน เส้นกราฟจะอยู่ใกล้บริเวณกึ่งกลางของสเกล ในขณะที่ดัชนี High-Low ไม่มีจุดยึดเหนี่ยวเช่นนั้น หากไม่มีหุ้นตัวใดในตะกร้าทำระดับต่ำสุดในรอบ 52 สัปดาห์ติดต่อกันสิบวัน ค่าที่อ่านได้ในแต่ละวันจะเป็น 100 และค่าเฉลี่ยก็จะอยู่ที่ 100 เช่นกัน

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

คำถามที่พบบ่อยเกี่ยวกับ High-Low Index

ค่า High-Low Index ที่สูงกว่า 70 หมายความว่าอย่างไร?

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

Record High Percent กับ High-Low Index แตกต่างกันอย่างไร?

Record High Percent คือตัวเลขของวันเดียว โดยคำนวณจากจำนวนหุ้นที่ทำจุดสูงสุดใหม่หารด้วยผลรวมของหุ้นที่ทำจุดสูงสุดใหม่และจุดต่ำสุดใหม่ แล้วคูณด้วยหนึ่งร้อย ส่วน High-Low Index คือค่าเฉลี่ยเคลื่อนที่แบบง่าย (simple moving average) สิบวันของตัวเลขดังกล่าว ตัวหนึ่งใช้อธิบายสถานะของวันนี้ ส่วนอีกตัวใช้อธิบายสถานะในช่วงสองสัปดาห์ที่ผ่านมา

High-Low Index สามารถเป็น 0 หรือ 100 ได้หรือไม่?

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

High-Low Index เหมือนกับ advance/decline breadth หรือไม่?

ไม่เหมือนกัน Advance/decline breadth คำนวณโดยหารด้วยจำนวนหุ้นทั้งหมดในตลาดและใช้อธิบายทิศทางของวันเดียว ส่วน High-Low Index คำนวณโดยหารด้วยกลุ่มหุ้นขนาดเล็กที่อยู่ในระดับสุดโต่งของรอบ 52 สัปดาห์ และใช้อธิบายตำแหน่งราคาเมื่อเทียบกับราคาในช่วงหนึ่งปีที่ผ่านมา

โดยปกติแล้วมีหุ้นกี่ตัวที่เป็นตัวหารใน High-Low Index?

ในกลุ่มหุ้นสี่สิบตัวที่วัดผลที่นี่ตั้งแต่เดือนเมษายนถึงมิถุนายน 2026 ช่วงเวลาในกลุ่ม 1 to 3 names มีจำนวนหุ้นเฉลี่ย 2 ตัวที่เป็นตัวหาร จำนวนหุ้นในระดับตลาดโดยรวมจะมีค่ามากกว่าในเชิงตัวเลขสัมบูรณ์ แต่ก็ยังถือเป็นส่วนน้อยของหุ้นทั้งหมดที่จดทะเบียน ซึ่งเป็นเหตุผลว่าทำไมจึงควรแสดงจำนวนหุ้นดิบไว้บนหน้าจอควบคู่ไปกับดัชนี


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

#market breadth#52-week highs#indicators#record high percent