Was ist der High-Low Index? Marktbreite
Der High-Low Index ist der 10-Tage-Durchschnitt des Record High Percent. Mit runden Zahlen erklärt, inklusive Stichprobengrößenfalle bei ruhigem Handel.
Der High-Low Index ist ein Marktbreiteindikator, der auf zwei Zählungen basiert: Er ist der einfache gleitende 10-Tage-Durchschnitt des Record High Percent. Der Record High Percent entspricht der Zahl der neuen 52-Wochen-Hochs geteilt durch die Summe aus neuen 52-Wochen-Hochs und neuen 52-Wochen-Tiefs, multipliziert mit 100. Ein Wert über 50 bedeutet, dass mehr Aktien neue Hochs als neue Tiefs markieren. Ein Wert unter 50 bedeutet das Gegenteil. Die Formel ist so kurz. Im Folgenden wird die Arithmetik mit runden Zahlen durchgerechnet. Außerdem wird die Schwäche der Stichprobengröße gezeigt, durch die ein eindeutig wirkender Wert auf nur wenigen Aktien beruhen kann.
Wie berechnet man den High-Low Index?
Zwei Schritte. Beide passen in eine Zeile.
- Record High Percent für eine einzelne Sitzung: Zählen Sie die Aktien in Ihrem Universum, die auf einem neuen 52-Wochen-Hoch geschlossen haben. Zählen Sie anschließend die Aktien, die auf einem neuen 52-Wochen-Tief geschlossen haben. Teilen Sie die Zahl der Hochs durch die Summe aus Hochs und Tiefs. Multiplizieren Sie das Ergebnis mit 100.
- Der High-Low Index: Bilden Sie den Durchschnitt der letzten zehn täglichen Record-High-Percent-Werte.
Runde Zahlen machen die Berechnung anschaulich. An einem Handelstag werden 90 neue Hochs und 30 neue Tiefs verzeichnet. Hochs plus Tiefs ergibt 120. 90 geteilt durch 120 ergibt 0,75. Der Record High Percent für diese Sitzung beträgt daher 75. Nehmen wir nun zehn Sitzungen mit folgenden Werten: 75, 70, 65, 60, 55, 50, 45, 40, 35 und 30. Ihre Summe beträgt 525. 525 geteilt durch 10 ergibt 52,5. Der High-Low Index steht an einem Tag, an dem der eigene Record High Percent bei 75 lag, somit bei 52,5.
Diese Differenz ist der Preis für den gleitenden Durchschnitt. Die Erinnerung an zehn Tage glättet eine Reihe, die über Nacht von 100 auf 0 fallen kann. Dafür reagiert der Index später. Er zeigt, wie sich die Marktbreite über zwei Wochen entwickelt hat. Er zeigt niemals, was an diesem Nachmittag passiert ist.
Was gilt als neues 52-Wochen-Hoch?
Eine Aktie erreicht ein neues 52-Wochen-Hoch, wenn ihr Kurs über jedem Kurs liegt, den sie in den vorangegangenen 52 Wochen verzeichnet hat. Datenanbieter verwenden dabei unterschiedliche Grundlagen. Einige vergleichen Intraday-Hochs und -Tiefs. Andere vergleichen ausschließlich Schlusskurse. Deshalb ergeben sich für dieselbe Sitzung unterschiedliche Zählungen. Auf dieser Seite sind überall Schlusskurse die Grundlage. Neue 52-Wochen-Hochs und -Tiefs führt durch die Liste selbst.
Die folgende Auswertung zählt für jede Sitzung beide Extreme. Betrachtet wird ein festes Basket aus 40 US-Aktien mit hoher Marktkapitalisierung im Zeitraum vom 1. April bis zum 31. Juli 2026. Bei einem Basket dieser Größe lassen sich die Zählungen von Hand überprüfen. Dadurch wird die Schwäche der Formel später sichtbar.
Das exakte SQL hinter jeder Zahl
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Über 77 Sitzungen steigen die beiden Zählungen nur selten gemeinsam. In Jul 29, der letzten Sitzung des Zeitfensters, schlossen 3 der 40 Titel auf einem 52-Wochen-Hoch und 0 auf einem 52-Wochen-Tief. In Apr 1, der ersten Sitzung, entfielen auf 1 Hochs und 1 Tiefs. Alle anderen Titel des Baskets lagen innerhalb ihrer jeweiligen Handelsspanne und gingen nicht in die Berechnung ein.
Was ist ein guter Wert für den High-Low Index?
Die Marke 50 ist der Wendepunkt. Dort halten sich Hochs und Tiefs die Waage. Als konventionell starker Wert gilt 70. Über den gesamten 10-Tage-Durchschnitt haben neue Hochs dann die neuen Tiefs mit mehr als zwei zu eins übertroffen. Die konventionell schwache Marke ist 30, also das Spiegelbild. Zwischen 30 und 70 zeigt der Index, dass die Markt-Extreme gemischt sind. In diesem Bereich liegt er die meiste Zeit.
Die folgende Auswertung stellt den täglichen Record High Percent seinem eigenen 10-Tage-Durchschnitt für dasselbe Basket gegenüber. Die Verzögerung ist im Chart sichtbar und muss nicht beschrieben werden.
Das exakte SQL hinter jeder Zahl
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_dateDer dargestellte Bereich beginnt am Apr 15 mit einem Record High Percent von 100 und einem Indexwert von 52.5. Er endet am Jul 29 bei 100 und einem Indexwert von 64. Vergleichen Sie jeden Wert mit den Marken 70 und 30. Die Differenz zwischen den beiden Linien zeigt den Preis der Glättung: An jedem einzelnen Tag enthält der Durchschnitt noch neun ältere Sitzungen. Die ersten neun Sitzungen des Zeitfensters sind in der Auswertung nicht enthalten, da ein 10-Tage-Durchschnitt zehn Tage benötigt.
Der Nenner ignoriert den Großteil des Marktes
Das ist die entscheidende Einschränkung. Der Nenner des Record High Percent besteht aus neuen Hochs plus neuen Tiefs. Mehr wird nicht berücksichtigt. Eine Aktie, die in der Mitte ihrer 52-Wochen-Spanne liegt, geht weder in den Zähler noch in den Nenner ein. Der Index kann nicht zwischen einer Sitzung unterscheiden, in der 900 von 3.000 Titeln ein Extrem erreichen, und einer Sitzung, in der dies nur neun Titel tun. Beide Situationen werden mit derselben scheinbar eindeutigen zweistelligen Zahl dargestellt.
Stellen Sie sich eine Börse mit 6.000 Titeln an einem ruhigen Augusttag vor. 40 Aktien erreichen neue Hochs, 20 neue Tiefs. Der Record High Percent beträgt 40 geteilt durch 60, also 66,7. Das sieht nach einem breiten Anstieg aus. Berechnet wurde der Wert jedoch auf Basis von 1 % der gelisteten Titel. Die übrigen 5.940 Aktien hatten kein Stimmrecht.
Das Basket aus 40 Titeln macht diese Einschränkung zählbar sichtbar. Jede Sitzung des Zeitfensters wird danach sortiert, wie viele Titel überhaupt ein Extrem markiert haben.
Das exakte SQL hinter jeder Zahl
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_denominatorIn den 39 Sitzungen im Bucket 1 to 3 names beruhte der gesamte Wert im Durchschnitt auf 2 von 40 Titeln. Für diese Sitzungen lag der Median des Record High Percent bei 100. Der Medianabstand zur Marke 50 betrug 50 Punkte. Die 10 or more names Sitzungen im anderen Bucket umfassten 1 Sitzungen mit durchschnittlich 10 Titeln. Ihr Medianwert lag bei 70. Der Medianabstand zur Mitte betrug 20 Punkte.
Die Arithmetik begrenzt bereits, welche Werte eine dünne Sitzung überhaupt annehmen kann. Bei drei Titeln an einem Extrem sind nur 0, 33,3, 66,7 und 100 möglich. Bei zwei Titeln sind nur 0, 50 und 100 möglich. Ein Wert von 66,7, der auf zwei Hochs und einem Tief beruht, enthält eine Dezimalstelle, die die Stichprobe nicht rechtfertigt. Die einfache Korrektur lautet: Lesen Sie neben dem Index immer die Rohzählungen der Hochs und Tiefs. Verlassen Sie sich niemals auf den Index allein.
Marktbreite: High-Low Index im Vergleich zu Advance/Decline
Beide Maßzahlen zeigen, wie viele Aktien am Marktgeschehen teilnehmen. Sie tun dies jedoch über unterschiedliche Zeithorizonte. Die Advance/Decline-Marktbreite zählt jeden Titel, der gegenüber dem Vortag höher oder niedriger schließt. Ihr Nenner umfasst das gesamte Universum. Sie beschreibt einen einzelnen Tag. Der High-Low Index zählt nur Titel, die ein 52-Wochen-Extrem erreichen. Sein Nenner ist klein. Er beschreibt, wo die Kurse im Verhältnis zu einem ganzen Jahr ihrer Historie liegen. Ein Markt kann an einem Tag breit steigen, während sich nur sehr wenige Titel in der Nähe eines 52-Wochen-Hochs befinden.
Die folgende Auswertung glättet beide Maßzahlen über dieselben zehn Sitzungen und für dasselbe Basket. Dadurch liegen sie auf derselben Skala.
Das exakte SQL hinter jeder Zahl
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_dateDer dargestellte Bereich beginnt am Apr 15 mit 52.5 für den High-Low Index und 52.8 für den 10-Tage-Anteil der gestiegenen Titel. Er endet am Jul 29 bei 64 und 52.5 über 68 dargestellte Sitzungen. Der Anteil der gestiegenen Titel bewegt sich in einer engen Spanne. An einem normalen Handelstag schließt ungefähr die Hälfte eines Baskets höher. Der Durchschnitt aus zehn solchen Sitzungen bleibt daher nahe der Mitte der Skala. Der High-Low Index hat keine vergleichbare Verankerung. Wenn zehn Sitzungen lang kein Titel des Baskets ein 52-Wochen-Tief markiert, beträgt jeder Tageswert 100. Der Durchschnitt liegt dann ebenfalls bei 100.
Marktbreite lässt sich besser beurteilen, wenn daneben Partizipationsmaßzahlen stehen. Relatives Volumen zeigt, ob ein Titel heute im Vergleich zu seinem eigenen Normalniveau ungewöhnlich hohes Handelsvolumen aufweist. Die größten Aktienbewegungen der Woche zeigt, welche Titel sich tatsächlich bewegt haben. Aktien mit ungewöhnlichem Volumen in dieser Woche zeigt, wohin sich das Handelsvolumen verlagert hat.
FAQ zum High-Low Index
Was bedeutet ein High-Low-Index-Wert über 70?
Das bedeutet, dass neue 52-Wochen-Hochs über den Durchschnitt der letzten zehn Sitzungen hinweg neue 52-Wochen-Tiefs mit mehr als zwei zu eins übertroffen haben. Das ist die konventionelle Marke für einen starken Markt. Der Wert sagt jedoch nichts darüber aus, wie viele Aktien überhaupt ein Extrem erreicht haben. Diese Zahl sollte daneben geprüft werden.
Was ist der Unterschied zwischen Record High Percent und dem High-Low Index?
Der Record High Percent ist der Wert für eine einzelne Sitzung: neue Hochs geteilt durch neue Hochs plus neue Tiefs, multipliziert mit 100. Der High-Low Index ist der einfache gleitende 10-Tage-Durchschnitt dieses Werts. Der eine beschreibt den heutigen Tag. Der andere beschreibt die vergangenen zwei Wochen.
Kann der High-Low Index bei 0 oder 100 liegen?
Ja. Wenn im Universum zehn Sitzungen in Folge keine Aktie ein neues 52-Wochen-Tief erreicht, beträgt jeder Tageswert 100. Der Durchschnitt liegt dann ebenfalls bei 100. Wenn keine Aktie weder ein Hoch noch ein Tief erreicht, ist der Nenner null. Für diese Sitzung ist kein Wert definiert.
Ist der High-Low Index dasselbe wie die Advance/Decline-Marktbreite?
Nein. Die Advance/Decline-Marktbreite teilt durch das gesamte Universum und beschreibt die Kursrichtung an einem einzelnen Tag. Der High-Low Index teilt durch die kleine Gruppe von Aktien an 52-Wochen-Extremen. Er beschreibt die Position der Kurse im Verhältnis zu einem Jahr ihrer Entwicklung.
Wie viele Aktien befinden sich normalerweise im Nenner des High-Low Index?
Im hier von April bis Juli 2026 gemessenen Basket aus 40 Titeln umfassten die Sitzungen im Bucket 1 to 3 names durchschnittlich 2 Titel im Nenner. Börsenweite Zählungen sind absolut größer, bleiben aber ebenfalls nur ein kleiner Teil aller gelisteten Titel. Deshalb gehören die Rohzählungen neben den Index auf den Bildschirm.
Jede Zählung auf dieser Seite stammt aus einer gespeicherten und versionierten Abfrage auf Basis von Schlusskursen. Öffnen Sie eine beliebige Auswertung, um die dahinterliegende SQL-Abfrage zu lesen. Oder erstellen Sie dieselbe Marktbreitenreihe auf einem eigenen Basket im Strasmore-Terminal.