High-Low-Index: Marktbreite und Berechnung
Der High-Low-Index ist der Zehn-Tage-Durchschnitt des Record High Percent. Die Formel mit runden Zahlen und die Stichprobengrößenfalle bei ruhigem Handel erklärt.
Der High-Low Index ist ein Maß für die Marktbreite und basiert auf zwei Größen: Er ist der einfache gleitende Zehn-Tage-Durchschnitt des Record High Percent. Der Record High Percent entspricht der Zahl neuer 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 damit bereits vollständig beschrieben. Im Folgenden werden die Berechnung mit gerundeten Zahlen und das Problem der Stichprobengröße erläutert. Letzteres kann dazu führen, dass ein scheinbar eindeutiger Wert auf nur wenigen Aktien beruht.
Wie berechnet man den High-Low-Index?
Zwei Schritte, die jeweils in eine Zeile passen.
- Record High Percent für eine einzelne Handelssitzung: Zählen Sie die Aktien in Ihrem Anlageuniversum, die auf einem neuen 52-Wochen-Hoch geschlossen haben, und die Aktien, die auf einem neuen 52-Wochen-Tief geschlossen haben. Teilen Sie die Zahl der Hochs durch die Summe aus Hochs und Tiefs und multiplizieren Sie das Ergebnis anschließend mit 100.
- Der High-Low-Index: Ermitteln Sie den Durchschnitt der letzten 10 täglichen Record-High-Percent-Werte.
Runde Zahlen machen die Berechnung greifbar. An einem Handelstag werden 90 neue Hochs und 30 neue Tiefs verzeichnet. Hochs und Tiefs ergeben zusammen 120. 90 geteilt durch 120 ergibt 0,75. Der Record High Percent für diese Sitzung beträgt daher 75. Nun nehmen wir zehn Sitzungen mit folgenden Werten: 75, 70, 65, 60, 55, 50, 45, 40, 35 und 30. Die Summe beträgt 525. 525 geteilt durch 10 ergibt 52,5. Der High-Low-Index liegt an einem Tag, an dem der Record High Percent selbst 75 beträgt, bei 52,5.
Diese Differenz ist der Effekt des gleitenden Durchschnitts. Die Berücksichtigung von zehn Tagen glättet eine Reihe, die sich über Nacht von 100 auf 0 bewegen kann. Dafür reagiert der Index verzögert. Er zeigt, wie sich die Marktbreite über zwei Wochen entwickelt hat. Er zeigt jedoch 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, der in den vorangegangenen 52 Wochen festgestellt wurde. Datenanbieter unterscheiden sich bei der Berechnungsgrundlage: Einige vergleichen Intraday-Hochs und -Tiefs, andere ausschließlich Schlusskurse. Für dieselbe Sitzung ergeben sich dadurch unterschiedliche Anzahlen. Auf dieser Seite bilden überall die Schlusskurse die Grundlage. Neue 52-Wochen-Hochs und -Tiefs führt durch die Liste selbst.
Das folgende Panel zählt für jede Sitzung beide Extremwerte. Betrachtet wird ein fester Korb aus 40 US-Aktien mit hoher Marktkapitalisierung im Zeitraum vom 1. April bis zum 31. Juli 2026. Bei dieser Korbgröße bleiben die Anzahlen klein genug, um sie von Hand zu überprüfen. Dadurch wird später der Fehler in der Formel 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_dateIn 77 Sitzungen stiegen die beiden Anzahlen nur selten gemeinsam. Am Jul 29, der letzten Sitzung des Zeitfensters, schlossen 3 der 40 Titel auf einem 52-Wochen-Hoch und 0 auf einem 52-Wochen-Tief. Am Apr 1, der ersten Sitzung, standen 1 Hochs 1 Tiefs gegenüber. Jeder andere Titel im Korb lag innerhalb seiner eigenen Handelsspanne und ging nicht in die Berechnung ein.
Wie ist ein guter Wert beim High-Low Index?
Die 50-Linie ist der Drehpunkt. Hochs und Tiefs halten sich die Waage. Der konventionelle Schwächemarker liegt bei 70. Dort übertrifft die Zahl der neuen Hochs die der neuen Tiefs über den gesamten 10-Tage-Durchschnitt hinweg um mehr als two-to-one. Der konventionelle Schwächemarker liegt bei 30. Er ist das spiegelbildliche Signal. Zwischen 30 und 70 zeigt der Index, dass die Extreme des Marktes gemischt sind. In diesem Bereich bewegt er sich die meiste Zeit.
Das folgende Panel stellt den täglichen Record High Percent zusammen mit seinem eigenen 10-Tage-Durchschnitt für denselben Korb dar. Die Verzögerung ist im Chart sichtbar und wird nicht nur beschrieben.
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 Zeitraum beginnt mit einem Record High Percent von 100 am Apr 15. Der Index steht dabei bei 52.5. Er endet bei 100 am Jul 29, der Index bei 64. Ordnen Sie beide Werte jeweils im Verhältnis zu den Markierungen bei 70 und 30 ein. Die Entfernung 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 im Panel nicht enthalten, da ein 10-Tage-Durchschnitt 10 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 und neuen Tiefs – aus nichts anderem. Eine Aktie, die in der Mitte ihrer 52-Wochen-Spanne notiert, fließt 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 bei neun Titeln der Fall ist. Beide Situationen werden mit derselben scheinbar präzisen zweistelligen Zahl ausgewiesen.
Stellen Sie sich eine Börse mit 6.000 Titeln an einem ruhigen August-Handelstag vor: 40 Aktien erreichen neue Hochs, 20 neue Tiefs. Der Record High Percent beträgt 40 geteilt durch 60, also 66,7. Das wirkt wie ein breit angelegter Anstieg. Berechnet wurde der Wert jedoch auf Basis von 1 % der gelisteten Titel. Die übrigen 5.940 Titel hatten keinen Einfluss.
Der Korb aus 40 Titeln macht diese Einschränkung messbar sichtbar. Jede Sitzung innerhalb des Zeitfensters wird abhängig davon, wie viele Titel überhaupt ein Extrem erreicht haben, einer Gruppe zugeordnet.
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 der Gruppe 1 to 3 names basierte der gesamte Wert auf durchschnittlich 2 Titeln von 40. Diese Sitzungen wiesen einen Median des Record High Percent von 100 auf und lagen im Median 50 Punkte von der 50er-Linie entfernt. Die 10 or more names Sitzungen, darunter 1 mit durchschnittlich 10 Titeln, wiesen einen Median von 70 auf und lagen 20 Punkte vom Mittelwert entfernt.
Die Arithmetik begrenzt, welche Werte eine dünne Sitzung überhaupt ausweisen kann. Bei drei Titeln im Extrem sind nur 0, 33,3, 66,7 und 100 möglich. Bei zwei Titeln sind es nur 0, 50 und 100. Ein Wert von 66,7, der auf zwei Hochs und einem Tief basiert, enthält eine Dezimalstelle, die seine Stichprobe nicht rechtfertigt. Die einfache Lösung lautet: Lesen Sie neben dem Index immer auch die absoluten Zahlen der neuen Hochs und Tiefs ab. Verlassen Sie sich nie auf den Index allein.
Marktbreite: High-Low Index im Vergleich zu Advance/Decline
Beide Kennzahlen messen, wie viele Aktien an einer Bewegung beteiligt sind. Sie tun dies jedoch über unterschiedliche Zeiträume. Die Advance/Decline-Marktbreite zählt jeden Titel, der gegenüber dem Vortag höher oder niedriger schloss. Ihr Nenner ist das gesamte Universum. Sie beschreibt einen einzelnen Handelstag. Der High-Low Index berücksichtigt nur Titel, die ein 52-Wochen-Extrem erreichen. Sein Nenner ist kleiner. Er zeigt, wo die Kurse im Vergleich zu ihrer Entwicklung über ein volles Jahr stehen. Ein Markt kann an einem Tag breit zulegen, während nur sehr wenige Titel in der Nähe eines 52-Wochen-Hochs notieren.
Die folgende Grafik glättet beide Kennzahlen über dieselben 10 Sitzungen und für denselben Aktienkorb. Dadurch werden sie auf einer gemeinsamen Skala vergleichbar.
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_dateDas Paar beginnt im dargestellten Zeitraum am Apr 15 beim High-Low Index bei 52.5 und beim 10-Tage-Anteil steigender Aktien bei 52.8. Am Jul 29 endet es bei 64 beziehungsweise 52.5. Insgesamt umfasst die Darstellung 68 Sitzungen. Der Anteil steigender Aktien bewegt sich in einer engen Bandbreite. In einer gewöhnlichen Sitzung schließt ungefähr die Hälfte des Aktienkorbs höher. Der Durchschnitt über zehn solcher Sitzungen liegt daher nahe der Mitte der Skala. Beim High-Low Index gibt es keinen solchen Referenzpunkt. Wenn zehn Sitzungen in Folge kein Titel des Aktienkorbs ein 52-Wochen-Tief erreicht, liegt jeder Tageswert bei 100. Auch der Durchschnitt beträgt dann 100.
Die Marktbreite lässt sich besser einordnen, wenn daneben Beteiligungskennzahlen betrachtet werden. Das relative Volumen zeigt, ob ein Titel heute im Vergleich zu seinem eigenen üblichen Handelsvolumen ungewöhnlich aktiv gehandelt wird. Die größten Kursbewegungen der Woche zeigen, welche Titel sich tatsächlich stark bewegt haben. Aktien mit ungewöhnlichem Volumen in dieser Woche zeigen, wohin sich das Handelsvolumen konzentriert hat.
FAQ zum High-Low Index
Was bedeutet ein Wert des High-Low Index von über 70?
Das bedeutet, dass neue 52-Wochen-Hochs den neuen 52-Wochen-Tiefs im Durchschnitt der vergangenen zehn Sitzungen um mehr als two-to-one überlegen waren. Das ist das konventionelle Signal für einen starken Markt. Es sagt jedoch nichts darüber aus, wie viele Aktien überhaupt ein Extrem erreicht haben. Diese Zahl sollte zusätzlich geprüft werden.
Was ist der Unterschied zwischen dem Record High Percent und dem High-Low Index?
Der Record High Percent ist der Wert für eine einzelne Sitzung: neue Hochs geteilt durch die Summe aus neuen Hochs und neuen Tiefs, multipliziert mit 100. Der High-Low Index ist der einfache gleitende Zehn-Tage-Durchschnitt dieses Werts. Der eine beschreibt den heutigen Handelstag. Der andere beschreibt die vergangenen zwei Wochen.
Kann der High-Low Index 0 oder 100 betragen?
Ja. Wenn zehn Sitzungen in Folge keine Aktie im betrachteten Universum ein neues 52-Wochen-Tief erreicht, beträgt jeder Tageswert 100 und auch der Durchschnitt liegt bei 100. Erreicht keine Aktie ein neues Hoch oder Tief, ist der Nenner des Bruchs null. Für diese Sitzung ist dann kein definierter Wert vorhanden.
Ist der High-Low Index dasselbe wie die Advance-Decline-Breadth?
Nein. Die Advance-Decline-Breadth bezieht sich auf das gesamte Universum und beschreibt die Kursrichtung an einem einzelnen Tag. Der High-Low Index bezieht sich auf die kleine Gruppe von Aktien an 52-Wochen-Extremwerten und beschreibt ihre Position im Verhältnis zu einem Jahr Kursentwicklung.
Wie viele Aktien stehen üblicherweise im Nenner des High-Low Index?
Im hier von April bis Juli 2026 gemessenen Basket aus 40 Titeln umfasste der Nenner in Sitzungen des 1 to 3 names-Buckets durchschnittlich 2 Titel. Börsenweite Zahlen sind absolut größer, machen aber weiterhin nur einen kleinen Teil aller Listings aus. Deshalb sollten die Rohzahlen im Screen neben dem Index angezeigt werden.
Jede Zahl auf dieser Seite stammt aus einer gespeicherten, versionierten Abfrage auf Basis von Schlusskursen. Öffnen Sie ein beliebiges Panel, um die dahinterliegende SQL-Abfrage zu lesen, oder erstellen Sie dieselbe Breadth-Zeitreihe für einen eigenen Basket im Strasmore-Terminal.