Strasmore Research
Belajar Matt ConnorOleh Matt Connor

Apakah Indeks High-Low? Keluasan Pasaran

Indeks High-Low ialah purata 10 hari Peratusan Rekod Tinggi. Lihat formula dengan nombor bulat serta perangkap saiz sampel ketika pasaran sepi.

Indeks High-Low ialah ukuran keluasan pasaran yang dibina daripada dua kiraan: ia merupakan purata bergerak mudah 10 hari bagi Peratusan Rekod Tinggi, manakala Peratusan Rekod Tinggi ialah bilangan paras tinggi baharu 52 minggu dibahagikan dengan jumlah paras tinggi baharu 52 minggu dan paras rendah baharu 52 minggu, kemudian didarab dengan 100. Bacaan melebihi 50 bermakna lebih banyak saham mencatat paras tinggi baharu berbanding paras rendah baharu, manakala bacaan di bawah 50 bermakna sebaliknya. Formulanya sesingkat itu. Seterusnya ialah pengiraan menggunakan nombor bulat dan kelemahan saiz sampel yang membolehkan bacaan yang kelihatan tegas itu bergantung pada segelintir saham.

Bagaimanakah Indeks High-Low dikira?

Dua langkah, dan kedua-duanya boleh ditulis dalam satu baris.

  1. Peratusan Rekod Tinggi bagi satu sesi: kira saham dalam kumpulan anda yang ditutup pada paras tinggi baharu 52 minggu, kira saham yang ditutup pada paras rendah baharu 52 minggu, bahagikan bilangan paras tinggi dengan jumlah kedua-duanya, kemudian darabkan dengan 100.
  2. Indeks High-Low: puratakan 10 bacaan harian Peratusan Rekod Tinggi yang terkini.

Nombor bulat menjadikannya lebih jelas. Pasaran mencatat 90 paras tinggi baharu dan 30 paras rendah baharu. Jumlah paras tinggi dan rendah ialah 120, manakala 90 dibahagikan dengan 120 ialah 0.75. Maka, Peratusan Rekod Tinggi bagi sesi itu ialah 75. Sekarang ambil bacaan bagi sepuluh sesi: 75, 70, 65, 60, 55, 50, 45, 40, 35 dan 30. Jumlahnya ialah 525, dan 525 dibahagikan dengan 10 ialah 52.5. Indeks High-Low mencatat 52.5 pada hari apabila Peratusan Rekod Tinggi hari itu sendiri ialah 75.

Perbezaan itu ialah pertukaran yang dibuat oleh purata bergerak. Ingatan selama sepuluh hari melicinkan siri yang boleh berubah daripada 100 kepada 0 dalam sekelip mata, tetapi menyebabkan bacaan lewat bertindak balas. Indeks itu menjawab kedudukan keluasan pasaran sepanjang dua minggu. Ia tidak pernah menjawab perkara yang berlaku pada petang itu.

Apakah yang dikira sebagai paras tinggi baharu 52 minggu?

Saham mencatat paras tinggi baharu 52 minggu apabila harganya melepasi setiap harga yang dicatat dalam 52 minggu sebelumnya. Penyedia data menggunakan asas yang berbeza: sesetengahnya membandingkan paras tinggi dan rendah intrahari, manakala yang lain hanya membandingkan harga penutupan. Kedua-dua kaedah menghasilkan kiraan yang berbeza bagi sesi yang sama. Harga penutupan menjadi asas di seluruh halaman ini. Paras tinggi dan rendah baharu 52 minggu menerangkan senarai itu sendiri.

Panel di bawah mengira kedua-dua ekstrem bagi setiap sesi untuk sekumpulan tetap 40 saham besar AS, dari 1 April hingga 31 Julai 2026. Saiz kumpulan itu cukup kecil untuk membolehkan kiraan disemak secara manual. Itulah yang menjadikan kelemahan formula tersebut jelas kemudian.

PertanyaanParas tertinggi dan terendah 52 minggu setiap sesi: 40 saham bermodal besar AS, April hingga Julai 2026
SQL tepat di sebalik setiap nombor
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

Sepanjang 77 sesi, kedua-dua kiraan jarang meningkat serentak. Pada Jul 29, iaitu sesi terakhir dalam tempoh tersebut, 3 daripada 40 saham ditutup pada paras tinggi 52 minggu dan 0 ditutup pada paras rendah 52 minggu. Pada Apr 1, iaitu sesi pertama, pecahannya ialah 1 paras tinggi berbanding 1 paras rendah. Setiap saham lain dalam kumpulan itu berada di suatu tahap dalam julatnya sendiri dan tidak dimasukkan dalam pengiraan.

Apakah bacaan Indeks High-Low yang baik?

Paras 50 ialah titik tengah, apabila paras tinggi dan rendah berada dalam keseimbangan. Penanda kukuh yang lazim ialah 70, apabila paras tinggi baharu mengatasi paras rendah baharu dengan nisbah lebih baik daripada two-to-one sepanjang purata 10 hari. Penanda lemah yang lazim ialah 30, iaitu gambaran sebaliknya. Antara 30 dan 70, indeks itu menunjukkan bahawa ekstrem pasaran bercampur-campur. Di situlah indeks biasanya berada.

Panel di bawah memplot Peratusan Rekod Tinggi harian mentah berbanding purata bergerak 10 harinya bagi kumpulan yang sama. Kelewatan itu dapat dilihat pada carta dan bukannya hanya diterangkan.

PertanyaanPeratus Paras Tertinggi Rekod dan purata 10 harinya (Indeks Tinggi-Rendah), bakul 40 saham
SQL tepat di sebalik setiap nombor
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

Julat yang diplot bermula pada Peratusan Rekod Tinggi 100 pada Apr 15, dengan indeks pada 52.5. Ia berakhir pada 100 pada Jul 29, dengan indeks pada 64. Bandingkan setiap bacaan dengan penanda 70 dan 30. Jarak antara kedua-dua garisan menunjukkan kos pelicinan: pada mana-mana hari, purata itu masih membawa sembilan sesi yang lebih lama. Sembilan sesi pertama dalam tempoh tersebut tidak dimasukkan dalam panel kerana purata 10 hari memerlukan 10 hari.

Penyebut mengabaikan sebahagian besar pasaran

Inilah batasan yang wajar diingati. Penyebut Peratusan Rekod Tinggi ialah paras tinggi baharu ditambah paras rendah baharu, dan tiada yang lain. Saham yang berada di tengah-tengah julat 52 minggunya tidak termasuk dalam pengangka atau penyebut. Indeks itu tidak dapat membezakan sesi apabila 900 daripada 3,000 saham mencapai ekstrem daripada sesi apabila hanya 9 saham berbuat demikian. Kedua-duanya akan menghasilkan nombor dua digit yang sama dan kelihatan meyakinkan.

Bayangkan bursa dengan 6,000 saham pada satu sesi Ogos yang perlahan: 40 saham mencatat paras tinggi baharu dan 20 mencatat paras rendah baharu. Peratusan Rekod Tinggi ialah 40 dibahagikan dengan 60, atau 66.7, yang kelihatan seperti kenaikan pasaran yang meluas. Namun, kiraan itu hanya berdasarkan 1% daripada saham tersenarai. Sebanyak 5,940 saham lain tidak memberi sebarang undi.

Kumpulan 40 saham itu memaparkan versi yang boleh dikira bagi isu tersebut. Setiap sesi dalam tempoh itu dikelaskan mengikut bilangan saham yang mencatat sebarang ekstrem.

PertanyaanApabila penyebut menjadi kecil: sesi dikelompokkan mengikut bilangan saham pada paras ekstrem 52 minggu
SQL tepat di sebalik setiap nombor
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

Dalam 39 sesi dalam kumpulan 1 to 3 names, keseluruhan bacaan itu bergantung pada purata 2 saham daripada 40 saham. Sesi-sesi tersebut mencatat median Peratusan Rekod Tinggi 100 dan berada pada jarak median 50 mata daripada paras 50. Sebanyak 10 or more names sesi, 1 daripadanya dengan purata 10 saham, mencatat median 70 dan berada 20 mata daripada titik tengah.

Aritmetik mengehadkan bacaan yang boleh dihasilkan oleh sesi dengan penyertaan nipis. Dengan tiga saham pada tahap ekstrem, satu-satunya bacaan yang mungkin ialah 0, 33.3, 66.7 dan 100. Dengan dua saham, hanya 0, 50 dan 100. Bacaan 66.7 yang dibina daripada dua paras tinggi dan satu paras rendah membawa titik perpuluhan yang tidak disokong oleh sampelnya. Amalan yang membetulkan isu ini adalah jelas: baca kiraan mentah paras tinggi dan rendah di sebelah indeks, jangan baca indeks secara berasingan.

Keluasan pasaran: Indeks High-Low berbanding advance/decline

Kedua-dua ukuran ini menilai bilangan saham yang mengambil bahagian. Namun, kedua-duanya menggunakan tempoh masa yang berbeza. Keluasan advance/decline mengira setiap saham yang ditutup naik atau turun berbanding hari sebelumnya. Penyebutnya ialah keseluruhan kumpulan saham, dan ukuran itu menerangkan satu hari. Indeks High-Low hanya mengira saham yang berada pada ekstrem 52 minggu. Penyebutnya kecil, dan ukuran itu menerangkan kedudukan harga berbanding sejarah setahun penuh. Pasaran boleh meningkat secara meluas pada hari tersebut walaupun sangat sedikit saham berada berdekatan paras tinggi 52 minggu.

Panel di bawah melicinkan kedua-dua ukuran sepanjang 10 sesi yang sama bagi kumpulan saham yang sama. Ini meletakkannya pada skala yang sama.

PertanyaanDua ukuran keluasan pasaran, bakul yang sama: Indeks Tinggi-Rendah 10 hari berbanding bahagian saham yang meningkat 10 hari
SQL tepat di sebalik setiap nombor
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

Pasangan itu memulakan julat yang diplot pada 52.5 bagi Indeks High-Low dan 52.8 bagi bahagian saham yang meningkat selama 10 hari pada Apr 15. Ia berakhir pada 64 dan 52.5 pada Jul 29, merangkumi 68 sesi yang diplot. Bahagian saham yang meningkat berada dalam julat yang sempit. Kira-kira separuh daripada kumpulan saham ditutup lebih tinggi pada sesi biasa, dan purata sepuluh bacaan tersebut menyebabkan garisan kekal berdekatan bahagian tengah skala. Indeks High-Low tidak mempunyai titik rujukan sedemikian. Jika tiada saham dalam kumpulan itu mencatat paras rendah 52 minggu selama sepuluh sesi berturut-turut, setiap bacaan harian ialah 100 dan puratanya juga 100.

Bacaan keluasan pasaran lebih berguna apabila disertakan ukuran penyertaan. Volum relatif menilai sama ada satu saham didagangkan dengan volum yang luar biasa tinggi hari ini berbanding kebiasaannya. Saham yang mencatat pergerakan terbesar minggu ini menunjukkan saham yang benar-benar bergerak, manakala saham dengan volum luar biasa minggu ini menunjukkan ke mana dagangan mengalir.

Soalan lazim Indeks High-Low

Apakah maksud bacaan Indeks High-Low melebihi 70?

Ini bermakna paras tinggi baharu 52 minggu mengatasi paras rendah baharu 52 minggu dengan nisbah lebih baik daripada two-to-one sepanjang purata sepuluh sesi terakhir. Itu ialah penanda lazim bagi pasaran yang kukuh. Bacaan tersebut tidak menunjukkan bilangan saham yang mencapai ekstrem, iaitu angka yang perlu disemak bersamanya.

Apakah perbezaan antara Peratusan Rekod Tinggi dengan Indeks High-Low?

Peratusan Rekod Tinggi ialah angka bagi satu sesi: paras tinggi baharu dibahagikan dengan paras tinggi baharu ditambah paras rendah baharu, kemudian didarabkan dengan 100. Indeks High-Low ialah purata bergerak mudah 10 hari bagi angka tersebut. Satu menerangkan hari ini. Satu lagi menerangkan dua minggu terakhir.

Bolehkah Indeks High-Low mencatat 0 atau 100?

Ya. Jika tiada saham dalam kumpulan itu mencatat paras rendah baharu 52 minggu selama sepuluh sesi berturut-turut, setiap bacaan harian ialah 100 dan puratanya juga 100. Jika tiada saham mencatat paras tinggi atau rendah, pecahan itu mempunyai penyebut sifar dan bacaan bagi sesi tersebut tidak ditakrifkan.

Adakah Indeks High-Low sama dengan keluasan advance/decline?

Tidak. Keluasan advance/decline membahagikan kiraan dengan keseluruhan kumpulan saham dan menerangkan arah pergerakan bagi satu hari. Indeks High-Low membahagikan kiraan dengan kumpulan kecil saham yang berada pada ekstrem 52 minggu dan menerangkan kedudukan berbanding harga sepanjang setahun.

Berapakah bilangan saham yang biasanya terdapat dalam penyebut Indeks High-Low?

Bagi kumpulan 40 saham yang diukur di sini dari April hingga Julai 2026, sesi dalam kumpulan 1 to 3 names mempunyai purata 2 saham dalam penyebut. Kiraan seluruh bursa lebih besar secara mutlak tetapi masih hanya sebahagian kecil daripada semua saham tersenarai. Sebab itu kiraan mentah perlu dipaparkan di sebelah indeks.


Setiap kiraan di halaman ini ialah kueri tersimpan dan berversi yang menggunakan harga penutupan. Buka mana-mana panel untuk membaca SQL di belakangnya, atau bina semula siri keluasan pasaran yang sama menggunakan kumpulan saham pilihan anda di terminal Strasmore.

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