Ano ang High-Low Index at Market Breadth?
Ang High-Low Index ay 10-day average ng Record High Percent. Tingnan ang formula gamit ang round numbers at ang sample size trap sa tahimik na market.
Ang High-Low Index ay sukatan ng market breadth na binubuo mula sa dalawang bilang: ito ang 10-day simple moving average ng Record High Percent, at ang Record High Percent ay new 52-week highs na hinati sa kabuuan ng new 52-week highs at new 52-week lows, saka minultiply sa 100. Ang reading na higit sa 50 ay nangangahulugang mas maraming stock ang nagpi-print ng new highs kaysa new lows. Ang reading na mas mababa sa 50 ay kabaligtaran. Maikli lang ang formula. Ang sumusunod ay ang arithmetic gamit ang round numbers at ang sample size flaw na nagpapakitang tiyak ang reading kahit kakaunti lang ang stock na pinagbabatayan nito.
Paano kinakalkula ang High-Low Index?
Dalawang hakbang lang, at parehong kasya sa isang linya.
- Record High Percent para sa isang session: bilangin ang mga stock sa iyong universe na nagsara sa bagong 52-week high, bilangin ang mga nagsara sa bagong 52-week low, hatiin ang highs sa kabuuan ng dalawang bilang, at saka imultiply sa 100.
- High-Low Index: kunin ang average ng huling 10 daily Record High Percent readings.
Mas madaling makita gamit ang round numbers. Nag-print ang market ng 90 new highs at 30 new lows. Ang highs plus lows ay 120, at ang 90 na hinati sa 120 ay 0.75. Kaya 75 ang Record High Percent para sa session na iyon. Ngayon, kunin ang readings sa sampung session: 75, 70, 65, 60, 55, 50, 45, 40, 35 at 30. Ang kabuuan ay 525, at ang 525 na hinati sa 10 ay 52.5. Ang High-Low Index ay 52.5 sa araw na ang sariling Record High Percent nito ay 75.
Iyan ang kapalit ng moving average. Pinapakinis ng sampung araw na memory ang seryeng maaaring umakyat mula 0 hanggang 100 sa loob ng magdamag, ngunit kapalit nito ay mas huli ang signal. Sinasagot ng index kung nasaan ang breadth sa loob ng dalawang linggo. Hindi nito sinasagot kung ano ang nangyari ngayong hapon.
Ano ang itinuturing na bagong 52-week high?
Gumagawa ang stock ng bagong 52-week high kapag nalampasan ng presyo nito ang lahat ng presyong na-print nito sa nakaraang 52 linggo. Magkakaiba ang basis ng mga data provider: may ilan na ikinukumpara ang intraday highs at lows, habang ang iba ay closing prices lamang ang ginagamit. Magkaiba ang bilang na lalabas para sa parehong session. Closing prices ang basis sa buong page na ito. Ipinapakita ng Mga bagong 52-week high at low ang mismong listahan.
Binibilang ng panel sa ibaba ang parehong extremes sa bawat session para sa fixed basket ng 40 large-cap US names, mula April 1 hanggang July 31, 2026. Sapat ang laki ng basket para manatiling madaling i-check ang mga bilang nang mano-mano. Dahil dito, malinaw na makikita sa bandang huli ang flaw sa formula.
Ang eksaktong SQL sa likod ng bawat numero
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_dateSa 77 sessions, bihirang sabay na tumaas ang dalawang bilang. Noong Jul 29, ang huling session sa window, 3 sa 40 names ang nagsara sa 52-week high at 0 ang nagsara sa 52-week low. Noong Apr 1, ang unang session, 1 highs laban sa 1 lows ang hati. Ang lahat ng iba pang pangalan sa basket ay nasa loob ng sarili nilang range at hindi pumasok sa calculation.
Ano ang magandang High-Low Index reading?
Ang 50 line ang pivot, kung saan balanse ang highs at lows. Ang conventional strong marker ay 70. Ibig sabihin, mas marami sa two-to-one ang new highs kaysa new lows sa kabuuan ng 10-day average. Ang conventional weak marker ay 30, na kabaligtaran nito. Sa pagitan ng 30 at 70, sinasabi ng index na halo-halo ang extremes ng market. Dito ito karaniwang nananatili.
Ipinapakita ng panel sa ibaba ang raw daily Record High Percent laban sa sarili nitong 10-day average para sa parehong basket. Makikita sa chart ang lag sa halip na ilarawan lamang ito.
Ang eksaktong SQL sa likod ng bawat numero
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_dateNagsisimula ang plotted range sa Record High Percent na 100 noong Apr 15, habang ang index ay nasa 52.5. Nagtatapos ito sa 100 noong Jul 29, at ang index ay 64. Ikumpara ang bawat isa sa 70 at 30 markers. Tingnan din ang pagitan ng dalawang linya bilang halaga ng smoothing: sa anumang araw, dala pa rin ng average ang siyam na mas naunang session. Hindi kasama sa panel ang unang siyam na session ng window dahil kailangan ng 10 araw para makalkula ang 10-day average.
Hindi kasama sa denominator ang karamihan ng market
Ito ang limitasyong dapat tandaan. Ang denominator ng Record High Percent ay new highs plus new lows, at wala nang iba. Ang stock na nasa gitna ng 52-week range nito ay wala sa numerator o denominator. Hindi matutukoy ng index ang pagkakaiba ng session kung saan 900 sa 3,000 names ang tumama sa extreme at session kung saan 9 lang ang gumawa nito. Pareho nitong ipi-print ang mga iyon bilang parehong mukhang tiyak na two-digit number.
Isipin ang isang exchange na may 6,000 names sa isang mabagal na August session: 40 stock ang gumawa ng new highs at 20 ang gumawa ng new lows. Ang Record High Percent ay 40 na hinati sa 60, o 66.7, na mukhang nagpapakita ng malawak na pag-akyat. Ngunit 1% lang ng listings ang pinagbabatayan nito. Walang naging boto ang iba pang 5,940 names.
Ginagawang madaling bilangin ng 40-name basket ang halimbawang ito. Sa bawat session sa window, inaayos ang mga stock sa bucket batay sa kung ilang pangalan ang nag-print ng anumang extreme.
Ang eksaktong SQL sa likod ng bawat numero
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_denominatorSa 39 sessions sa 1 to 3 names bucket, nakabatay ang buong reading sa average na 2 names mula sa 40. Ang mga session na iyon ay may median Record High Percent na 100 at median na layo na 50 points mula sa 50 line. Ang 10 or more names sessions, na 1 sa mga ito ay may average na 10 names, ay may median na 70 at nasa 20 points mula sa gitna.
Nililimitahan ng arithmetic kung ano ang maaaring mai-print ng isang manipis na session. Kapag tatlong pangalan ang nasa extreme, 0, 33.3, 66.7 at 100 lang ang posibleng readings. Kapag dalawang pangalan, 0, 50 at 100 lang. Ang reading na 66.7 na nabuo mula sa dalawang highs at isang low ay may decimal point na hindi kayang suportahan ng sample nito. Simple ang paraan para maiwasan ito: basahin ang raw counts ng highs at lows kasabay ng index, at huwag tingnan ang index nang mag-isa.
Market breadth: High-Low Index kumpara sa advance/decline
Parehong sinusukat ng dalawang measure kung ilang stock ang kasali sa galaw. Magkaiba ang horizon na ginagamit nila. Binibilang ng advance/decline breadth ang bawat pangalan na nagsara nang mas mataas o mas mababa kaysa kahapon. Buong universe ang denominator nito, at isang araw ang inilalarawan nito. Mga pangalan lamang na nasa 52-week extreme ang binibilang ng High-Low Index. Maliit ang denominator nito, at inilalarawan nito kung nasaan ang presyo kumpara sa buong isang taon ng history. Maaaring malawak ang pag-akyat ng market sa araw na iyon kahit kakaunti lang ang stock na malapit sa 52-week high.
Pinapakinis ng panel sa ibaba ang parehong measure sa kaparehong 10 sessions at sa parehong basket. Dahil dito, nasa iisang scale ang mga ito.
Ang eksaktong SQL sa likod ng bawat numero
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_dateNagsisimula ang pair sa plotted range sa 52.5 para sa High-Low Index at 52.8 para sa 10-day advancing share noong Apr 15. Nagtatapos ito sa 64 at 52.5 noong Jul 29, sa kabuuang 68 plotted sessions. Nasa makitid na band ang advancing share. Karaniwang humigit-kumulang kalahati ng basket ang nagsasara nang mas mataas sa isang ordinaryong session. Kapag kinuha ang average ng sampung ganoong session, nananatiling malapit sa gitna ng scale ang linya. Walang ganitong anchor ang High-Low Index. Kapag walang pangalan sa basket ang nagpi-print ng 52-week low sa loob ng sampung magkasunod na session, 100 ang bawat daily reading at 100 din ang average.
Mas malinaw basahin ang breadth kapag may kasamang participation measures. Tinatanong ng Relative volume kung hindi pangkaraniwang mataas ang trading ng isang pangalan ngayong araw kumpara sa sarili nitong normal na volume. Ipinapakita ng Pinakamalalaking stock mover ngayong linggo kung aling mga pangalan ang aktuwal na malaki ang naging galaw, at ipinapakita ng mga stock na may hindi pangkaraniwang volume ngayong linggo kung saan napunta ang trading.
Mga madalas itanong tungkol sa High-Low Index
Ano ang ibig sabihin ng High-Low Index reading na higit sa 70?
Ibig sabihin, mas marami sa two-to-one ang new 52-week highs kaysa new 52-week lows sa average ng huling sampung session. Ito ang conventional strong-tape marker. Wala itong sinasabi tungkol sa kung ilang stock ang aktuwal na umabot sa extreme. Iyan ang bilang na kailangang tingnan kasabay nito.
Ano ang pagkakaiba ng Record High Percent at High-Low Index?
Ang Record High Percent ang figure para sa isang session: new highs na hinati sa new highs plus new lows, saka minultiply sa 100. Ang High-Low Index naman ang 10-day simple moving average ng figure na iyon. Isa ang naglalarawan sa araw na ito. Ang isa naman ay naglalarawan sa nakaraang dalawang linggo.
Maaari bang maging 0 o 100 ang High-Low Index?
Oo. Kung walang stock sa universe ang gumawa ng bagong 52-week low sa loob ng sampung magkakasunod na session, 100 ang bawat daily reading at 100 din ang average. Kapag walang stock na gumawa ng high o low, zero ang denominator ng fraction at walang defined reading para sa session na iyon.
Pareho ba ang High-Low Index at advance/decline breadth?
Hindi. Hinahati ng advance/decline breadth ang bilang sa buong universe at inilalarawan ang direksiyon ng isang araw. Hinahati naman ng High-Low Index ang bilang sa maliit na grupo ng mga stock na nasa 52-week extremes at inilalarawan ang posisyon kumpara sa isang taon ng presyo.
Ilang stock ang karaniwang nasa denominator ng High-Low Index?
Sa 40-name basket na sinukat dito mula April hanggang July 2026, ang mga session sa 1 to 3 names bucket ay may average na 2 names sa denominator. Mas malaki ang absolute counts sa buong exchange, ngunit maliit pa rin ang mga ito kumpara sa lahat ng listings. Kaya dapat nasa screen ang raw counts kasabay ng index.
Ang bawat bilang sa page na ito ay stored, versioned query batay sa closing prices. Buksan ang anumang panel para mabasa ang SQL sa likod nito, o buuin muli ang parehong breadth series gamit ang sarili mong basket sa Strasmore terminal.