High-Low Index nedir ve nasıl hesaplanır?
High-Low Index, on günlük Record High Percent ortalamasıdır. Piyasa genişliği ölçüsünün yuvarlak sayılarla hesaplanması ve örneklem boyutu tuzağı hakkında detaylı bilgiler.
High-Low Index, iki farklı veriden türetilen bir piyasa genişliği ölçüsüdür: 10 günlük basit hareketli ortalaması alınan "Record High Percent" (Yeni Zirve Yüzdesi) değeridir. Record High Percent ise, 52 haftalık yeni zirve yapan hisse sayısının, 52 haftalık yeni zirve ve yeni dip yapan hisse sayılarının toplamına bölünmesi ve 100 ile çarpılmasıyla hesaplanır. 50'nin üzerindeki bir değer, yeni zirve yapan hisselerin yeni dip yapanlardan fazla olduğunu; 50'nin altındaki bir değer ise bunun tersini gösterir. Formül bu kadar kısadır. Aşağıda, bu aritmetiğin yuvarlak sayılarla nasıl işlediği ve kararlı görünen bir değerin aslında çok az sayıda hisseye dayanmasına yol açan örneklem boyutu kusuru açıklanmaktadır.
High-Low Index nasıl hesaplanır?
İki adımda hesaplanır ve her ikisi de tek satıra sığar.
- Record High Percent (tek bir seans için): Evreninizdeki 52 haftalık yeni zirvede kapanan hisseleri sayın, 52 haftalık yeni dipte kapananları sayın, zirve sayısını toplam sayıya bölün ve 100 ile çarpın.
- High-Low Index: Son 10 günlük Record High Percent değerinin ortalamasını alın.
Yuvarlak sayılarla somutlaştıralım. Bir seansta 90 yeni zirve ve 30 yeni dip kaydedildiğini varsayalım. Zirve ve diplerin toplamı 120'dir; 90'ın 120'ye bölümü 0,75 eder, yani o seans için Record High Percent 75'tir. Şimdi on seanslık değerleri alalım: 75, 70, 65, 60, 55, 50, 45, 40, 35 ve 30. Bunların toplamı 525'tir ve 525'in 10'a bölümü 52,5 eder. High-Low Index, kendi Record High Percent değeri 75 olan bir günde 52,5 değerini gösterir.
Bu fark, hareketli ortalamanın yarattığı gecikmedir. On günlük hafıza, bir gecede 100'den 0'a düşebilen bir seriyi yumuşatır ancak bunun bedeli geç tepki vermesidir. Endeks, piyasa genişliğinin son iki haftada ne durumda olduğunu yanıtlar. Bu öğleden sonra ne olduğunu asla yanıtlamaz.
52 haftalık yeni zirve ne sayılır?
Bir hisse senedi, fiyatı önceki 52 hafta içinde gördüğü tüm fiyatların üzerine çıktığında 52 haftalık yeni zirve yapmış sayılır. Veri sağlayıcıları bu konuda farklı yöntemler izler: Bazıları gün içi en yüksek ve en düşük seviyeleri karşılaştırırken, diğerleri yalnızca kapanış fiyatlarını esas alır; bu iki yöntem aynı seans için farklı sayımlar üretir. Bu sayfadaki tüm hesaplamalarda kapanış fiyatları esas alınmıştır. 52 haftalık yeni zirveler ve dipler listeyi detaylıca inceler.
Aşağıdaki panel, 1 Nisan - 31 Temmuz 2026 tarihleri arasında, 40 büyük ölçekli ABD hissesinden oluşan sabit bir sepet için her seansta her iki uç değeri de saymaktadır. Bu büyüklükteki bir sepet, sayımların elle kontrol edilebilecek kadar küçük kalmasını sağlar; formüldeki kusurun daha sonra görünür hale gelmesinin nedeni de budur.
Her verinin arkasındaki tam 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_date77 seans boyunca iki sayım nadiren birlikte yükselir. Penceredeki son seans olan Jul 29 tarihinde, 40 hisseden 3 tanesi 52 haftalık zirvede, 0 tanesi ise 52 haftalık dipte kapandı. İlk seans olan Apr 1 tarihinde ise dağılım 1 zirveye karşı 1 dip şeklindeydi. Sepetteki diğer tüm hisseler kendi aralıklarının bir yerinde kaldı ve hesaplamaya dahil edilmedi.
İyi bir High-Low Index değeri nedir?
50 çizgisi, zirveler ve diplerin dengede olduğu pivot noktasıdır. Geleneksel güçlü piyasa göstergesi 70'tir; bu seviyede yeni zirveler, 10 günlük ortalama genelinde yeni dipleri ikiye birden fazla oranda geride bırakmıştır. Geleneksel zayıf gösterge ise bunun yansıması olan 30'dur. 30 ile 70 arasındaki endeks, piyasadaki uç noktaların karışık olduğunu gösterir ki endeks zamanın çoğunu burada geçirir.
Aşağıdaki panel, aynı sepet için ham günlük Record High Percent değerini kendi 10 günlük ortalamasına karşı grafiğe döker. Gecikme, tarif edilmek yerine grafikte açıkça görülmektedir.
Her verinin arkasındaki tam 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_dateGrafik aralığı, Apr 15 tarihinde 100 Record High Percent değeriyle açılır ve endeks 52.5 seviyesindedir. Jul 29 tarihinde 100 değeriyle kapanır ve endeks 64 seviyesindedir. Her birini 70 ve 30 işaretlerine göre okuyun ve iki çizgi arasındaki mesafeyi yumuşatmanın bedeli olarak görün: Herhangi bir günde ortalama, hala dokuz eski seansı taşımaktadır. 10 günlük ortalama 10 gün gerektirdiğinden, pencerenin ilk dokuz seansı panelin dışında bırakılmıştır.
Payda, piyasanın çoğunu görmezden gelir
İşte dikkate alınması gereken sınırlama budur. Record High Percent'in paydası, yeni zirveler artı yeni diplerdir, başka hiçbir şey değildir. 52 haftalık aralığının ortasında duran bir hisse, ne payda ne de pay kısmında yer alır. Endeks, 3.000 hisseden 900'ünün uç noktaya ulaştığı bir seans ile 9'unun ulaştığı bir seansı ayırt edemez ve her ikisini de aynı güven verici iki haneli sayıyla yazdırır.
Sakin bir Ağustos seansında 6.000 hisseli bir borsayı hayal edin: 40 hisse yeni zirve, 20 hisse yeni dip yapıyor. Record High Percent, 40'ın 60'a bölümü yani 66,7'dir; bu da geniş tabanlı bir yükseliş gibi görünür. Ancak bu değer, listelenen hisselerin yüzde birinden hesaplanmıştır. Diğer 5.940 hissenin hiçbir etkisi olmamıştır.
40 hisselik sepet, bunun sayılabilir bir versiyonunu ekrana getirir. Penceredeki her seans, kaç hissenin uç değer kaydettiğine göre bir kovaya ayrılmıştır.
Her verinin arkasındaki tam 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_denominator1 to 3 names kovasındaki 39 seansta, tüm okuma 40 hisseden ortalama 2 tanesine dayanıyordu. Bu seanslar 100 medyan Record High Percent değerine sahipti ve 50 çizgisinden medyan 50 puan uzaktaydı. 10 or more names seans ise, ortalama 10 hisse ile 1 tanesi, 70 medyan değerini taşıyordu ve orta noktadan 20 puan uzaktaydı.
Aritmetik, zayıf bir seansın neyi yazdırabileceğini sınırlar. Uç noktada üç hisse varken, olası tek değerler 0, 33,3, 66,7 ve 100'dür. İki hisse varken sadece 0, 50 ve 100 mümkündür. İki zirve ve bir dip üzerine kurulan 66,7'lik bir değer, örnekleminin destekleyemeyeceği bir ondalık basamak taşır. Bunu düzeltmenin yolu basittir: Endeksi asla tek başına okumayın, her zaman yanındaki zirve ve dip sayılarını da kontrol edin.
Piyasa genişliği: High-Low Index vs. yükselen/düşen hisse sayısı
Her iki ölçüm de kaç hissenin katılımcı olduğunu sorgular. Ancak bunu farklı ufuklarda yaparlar. Yükselen/düşen hisse sayısı (advance/decline), düne göre yükselen veya düşen her hisseyi sayar. Paydası tüm evrendir ve tek bir günü tanımlar. High-Low Index ise sadece 52 haftalık uç noktadaki hisseleri sayar. Paydası küçüktür ve fiyatların bir yıllık geçmişe göre nerede durduğunu tanımlar. Bir piyasa gün içinde genel olarak yükseliyor olabilir ancak çok az sayıda hisse 52 haftalık zirveye yakın olabilir.
Aşağıdaki panel, her iki ölçümü aynı 10 seans boyunca aynı sepette yumuşatarak tek bir ölçeğe oturtur.
Her verinin arkasındaki tam 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İkili, grafik aralığını Apr 15 tarihinde High-Low Index için 52.5 ve 10 günlük yükselen hisse payı için 52.8 ile açar; 68 seans boyunca ilerleyerek Jul 29 tarihinde 64 ve 52.5 ile tamamlar. Yükselen hisse payı dar bir bantta yaşar. Sıradan bir seansta sepetin yaklaşık yarısı yükselişle kapanır ve bunların onunun ortalamasını almak çizgiyi ölçeğin ortasında bırakır. High-Low Index'in böyle bir çapası yoktur. Sepetteki hiçbir hisse on seans boyunca 52 haftalık dip yapmadığında, her günlük okuma 100 olur ve ortalama da bununla birlikte 100 olur.
Piyasa genişliği, yanındaki katılım ölçümleriyle daha iyi okunur. Göreceli hacim, bir hissenin bugün kendi normuna göre alışılmadık derecede yüksek işlem görüp görmediğini sorgular. Haftanın en büyük hisse hareketleri, hangi hisselerin gerçekten hareket ettiğini gösterir ve haftanın sıra dışı hacimli hisseleri, işlemlerin nereye yoğunlaştığını gösterir.
High-Low Index SSS
High-Low Index'in 70'in üzerinde olması ne anlama gelir?
Bu, son on seansın ortalamasında 52 haftalık yeni zirvelerin, yeni dipleri ikiye birden fazla oranda geride bıraktığı anlamına gelir. Bu, geleneksel güçlü piyasa göstergesidir. Ancak bu, kaç hissenin uç noktaya ulaştığı hakkında hiçbir şey söylemez; bu yüzden yanında mutlaka ham sayılara bakılmalıdır.
Record High Percent ile High-Low Index arasındaki fark nedir?
Record High Percent tek seanslık bir değerdir: yeni zirveler bölü yeni zirveler artı yeni dipler, çarpı 100. High-Low Index ise bu değerin 10 günlük basit hareketli ortalamasıdır. Biri bugünü tanımlar, diğeri son iki haftayı.
High-Low Index 0 veya 100 olabilir mi?
Evet. Eğer evrendeki hiçbir hisse on gün boyunca 52 haftalık yeni dip yapmazsa, her günlük okuma 100 olur ve ortalama da 100 olur. Hiçbir hisse ne zirve ne de dip yaptığında, kesrin paydası sıfır olur ve o seans için tanımlı bir değer oluşmaz.
High-Low Index, yükselen/düşen hisse sayısı (advance/decline) ile aynı mıdır?
Hayır. Yükselen/düşen hisse sayısı tüm evrene bölünür ve tek bir yön gününü tanımlar. High-Low Index ise 52 haftalık uç noktalarda duran küçük bir hisse grubuna bölünür ve fiyatların bir yıllık geçmişe göre konumunu tanımlar.
High-Low Index paydasında genellikle kaç hisse bulunur?
Burada Nisan-Temmuz 2026 tarihleri arasında ölçülen 40 hisselik sepette, 1 to 3 names kovasındaki seanslar paydada ortalama 2 hisse içermiştir. Borsa genelindeki sayımlar mutlak değer olarak daha büyüktür ancak yine de tüm listelemelerin küçük bir dilimini oluştururlar; bu yüzden ham sayılar endeksin yanında ekranda yer almalıdır.
Bu sayfadaki her sayım, kapanış fiyatları üzerinden alınan sürüm kontrollü bir sorgudur. Arkasındaki SQL'i okumak için herhangi bir paneli açın veya Strasmore terminalinde kendi sepetiniz üzerinde aynı genişlik serisini yeniden oluşturun.