Strasmore Research
నేర్చుకోండి Matt Connorద్వారా Matt Connor

హై-లో ఇండెక్స్ అంటే ఏమిటి? మార్కెట్ breadth

హై-లో ఇండెక్స్‌లో Record High Percent యొక్క 10-రోజుల సగటును ఎలా లెక్కించాలో తెలుసుకోండి. గుండ్రని సంఖ్యల ఉదాహరణతో పాటు quiet tapeలో sample size trapను గుర్తించండి.

హై-లో ఇండెక్స్ అనేది మార్కెట్ breadthను కొలిచే సూచిక. ఇది రెండు లెక్కలపై ఆధారపడుతుంది: Record High Percent యొక్క 10-రోజుల simple moving average. Record High Percent అంటే కొత్త 52-వారాల గరిష్ఠాలకు చేరిన షేర్ల సంఖ్యను, కొత్త 52-వారాల గరిష్ఠాలు మరియు కొత్త 52-వారాల కనిష్ఠాల మొత్తం సంఖ్యతో భాగించి, 100తో గుణించిన విలువ. రీడింగ్ 50కి పైగా ఉంటే కొత్త కనిష్ఠాల కంటే కొత్త గరిష్ఠాలను నమోదు చేస్తున్న షేర్లు ఎక్కువగా ఉన్నాయని అర్థం. 50కి దిగువన ఉంటే దీనికి విరుద్ధం. సూత్రం ఇంతే సరళం. ఇప్పుడు గుండ్రని సంఖ్యలతో గణనను, కొద్దిమంది షేర్లపై ఆధారపడినప్పటికీ నిర్ణయాత్మకంగా కనిపించే రీడింగ్‌కు దారితీసే sample size లోపాన్ని చూద్దాం.

హై-లో ఇండెక్స్‌ను ఎలా లెక్కిస్తారు?

రెండు దశలు. రెండూ ఒక్కో లైన్లో సరిపోతాయి.

  1. ఒక సెషన్‌కు Record High Percent: మీరు పరిశీలిస్తున్న సమూహంలో కొత్త 52-వారాల గరిష్ఠ స్థాయిలో ముగిసిన షేర్లను లెక్కించండి. కొత్త 52-వారాల కనిష్ఠ స్థాయిలో ముగిసిన షేర్లను లెక్కించండి. గరిష్ఠాల సంఖ్యను ఈ రెండు సంఖ్యల మొత్తంతో భాగించి, 100తో గుణించండి.
  2. హై-లో ఇండెక్స్: చివరి 10 రోజువారీ Record High Percent రీడింగ్‌ల సగటును తీసుకోండి.

గుండ్రని సంఖ్యలు విషయాన్ని స్పష్టంగా చూపిస్తాయి. ఒక మార్కెట్‌లో 90 కొత్త గరిష్ఠాలు, 30 కొత్త కనిష్ఠాలు నమోదయ్యాయి. గరిష్ఠాలు మరియు కనిష్ఠాల మొత్తం 120. 90ని 120తో భాగిస్తే 0.75 వస్తుంది. కాబట్టి ఆ సెషన్‌కు Record High Percent 75. ఇప్పుడు పది సెషన్‌ల రీడింగ్‌లు 75, 70, 65, 60, 55, 50, 45, 40, 35 మరియు 30 అని అనుకుందాం. వాటి మొత్తం 525. 525ని 10తో భాగిస్తే 52.5 వస్తుంది. ఆ రోజు యొక్క Record High Percent 75 అయినప్పటికీ, హై-లో ఇండెక్స్ 52.5గా ఉంటుంది.

చలన సగటు కలిగించే మార్పిడి ఇదే. పది రోజుల సమాచారం 100 నుంచి 0 వరకు ఒక్క రాత్రిలో మారగల సిరీస్‌ను సున్నితంగా చేస్తుంది. అయితే దానికి బదులుగా సూచిక ఆలస్యంగా స్పందిస్తుంది. గత రెండు వారాల్లో breadth ఎలా ఉందో ఈ ఇండెక్స్ చెబుతుంది. ఈ మధ్యాహ్నం ఏం జరిగిందో మాత్రం ఇది ఎప్పుడూ చెప్పదు.

కొత్త 52-వారాల గరిష్ఠంగా ఏది పరిగణించబడుతుంది?

ఒక షేరు గత 52 వారాల్లో నమోదైన ప్రతి ధరను అధిగమించినప్పుడు అది కొత్త 52-వారాల గరిష్ఠాన్ని నమోదు చేసినట్లు పరిగణిస్తారు. ఈ లెక్కకు ఏ ఆధారాన్ని ఉపయోగించాలనే విషయంలో డేటా ప్రొవైడర్ల మధ్య తేడా ఉంటుంది. కొందరు intraday గరిష్ఠాలు, కనిష్ఠాలను పోలుస్తారు. మరికొందరు ముగింపు ధరలను మాత్రమే పోలుస్తారు. అందువల్ల ఒకే సెషన్‌కు రెండు విధానాలు వేర్వేరు సంఖ్యలను ఇస్తాయి. ఈ పేజీ అంతటా ముగింపు ధరలనే ఆధారంగా ఉపయోగిస్తున్నాం. కొత్త 52-వారాల గరిష్ఠాలు మరియు కనిష్ఠాలు జాబితాను స్వయంగా వివరిస్తుంది.

క్రింది ప్యానెల్‌లో 2026 ఏప్రిల్ 1 నుంచి జూలై 31 వరకు, 40 పెద్ద మార్కెట్ విలువ కలిగిన US షేర్ల స్థిర బాస్కెట్‌లో ప్రతి సెషన్‌కు నమోదైన రెండు అంచులను లెక్కించాం. ఈ పరిమాణంలోని బాస్కెట్‌లో సంఖ్యలు చేతితో పరిశీలించగలిగేంత చిన్నగా ఉంటాయి. అందువల్ల తరువాత కనిపించే సూత్రంలోని లోపం స్పష్టమవుతుంది.

క్వెరీప్రతి సెషన్‌లో కొత్త 52-వారాల గరిష్ఠాలు మరియు కనిష్ఠాలు: పెద్ద మార్కెట్ విలువ గల 40 US షేర్లు, ఏప్రిల్ నుంచి జూలై 2026 వరకు
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన 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_date
Run this yourself

77 సెషన్‌లలో ఈ రెండు సంఖ్యలు అరుదుగా ఒకేసారి పెరిగాయి. విండోలోని చివరి సెషన్ అయిన Jul 29న, 40 షేర్లలో 3 షేర్లు 52-వారాల గరిష్ఠ స్థాయిలో ముగిశాయి. 0 షేర్లు 52-వారాల కనిష్ఠ స్థాయిలో ముగిశాయి. మొదటి సెషన్ అయిన Apr 1న, గరిష్ఠాల సంఖ్య 1, కనిష్ఠాల సంఖ్య 1గా ఉంది. బాస్కెట్‌లోని మిగిలిన ప్రతి షేరు తన స్వంత పరిధిలోనే ఉండి, ఈ లెక్కలోకి రాలేదు.

మంచి హై-లో ఇండెక్స్ రీడింగ్ అంటే ఏమిటి?

50 స్థాయి కీలకమైన మధ్యబిందువు. ఈ స్థాయిలో గరిష్ఠాలు మరియు కనిష్ఠాలు సమతుల్యంగా ఉంటాయి. సాధారణంగా 70ని బలమైన సంకేతంగా పరిగణిస్తారు. పది రోజుల సగటులో కొత్త గరిష్ఠాలు కొత్త కనిష్ఠాల కంటే two-to-one కంటే ఎక్కువగా ఉన్నప్పుడు ఈ స్థాయి వస్తుంది. 30 సాధారణంగా బలహీన సంకేతం. ఇది 70కి ప్రతిబింబ రూపం. 30 నుంచి 70 మధ్య ఉన్నప్పుడు మార్కెట్‌లోని అంచులు మిశ్రమంగా ఉన్నాయని ఇండెక్స్ సూచిస్తుంది. ఎక్కువ సమయం ఇది ఈ పరిధిలోనే ఉంటుంది.

క్రింది ప్యానెల్‌లో అదే బాస్కెట్‌కు రోజువారీ అసలు Record High Percentను దాని 10-రోజుల సగటుతో పోల్చి చూపించాం. ఆలస్యం చార్ట్‌లోనే కనిపిస్తుంది.

క్వెరీరికార్డు గరిష్ఠ శాతం మరియు దాని 10-రోజుల సగటు (High-Low Index), 40-షేర్ల బాస్కెట్
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన 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_date
Run this yourself

చార్ట్ పరిధి Apr 15న Record High Percent 100 వద్ద, ఇండెక్స్ 52.5 వద్ద ప్రారంభమవుతుంది. Jul 29న ఇది 100 వద్ద ముగుస్తుంది. ఇండెక్స్ 64. ప్రతి విలువను 70 మరియు 30 స్థాయిలతో పోల్చండి. రెండు రేఖల మధ్య దూరాన్ని smoothingకు చెల్లించే ధరగా చూడండి. ఏ రోజైనా సగటులో గత తొమ్మిది సెషన్‌ల ప్రభావం ఇంకా ఉంటుంది. విండోలోని మొదటి తొమ్మిది సెషన్‌లను ప్యానెల్‌లో చూపించలేదు, ఎందుకంటే 10-రోజుల సగటుకు 10 రోజుల డేటా అవసరం.

డినామినేటర్ మార్కెట్‌లోని ఎక్కువ భాగాన్ని పరిగణనలోకి తీసుకోదు

ఇక్కడ గుర్తుంచుకోవాల్సిన ప్రధాన పరిమితి ఉంది. Record High Percent డినామినేటర్‌లో కొత్త గరిష్ఠాలు మరియు కొత్త కనిష్ఠాలు మాత్రమే ఉంటాయి. మరే ఇతర షేర్లు ఉండవు. 52-వారాల పరిధి మధ్యలో ఉన్న షేరు numeratorలోనూ, denominatorలోనూ ఉండదు. అందువల్ల 3,000 షేర్లలో 900 ఒక అంచును తాకిన సెషన్‌ను, కేవలం 9 షేర్లు అంచును తాకిన సెషన్‌ను ఈ ఇండెక్స్ వేరు చేయలేడు. రెండింటికీ ఒకేలా నమ్మకంగా కనిపించే రెండు అంకెల రీడింగ్ ఇస్తుంది.

ఆగస్టులో నెమ్మదిగా సాగుతున్న ఒక సెషన్‌లో 6,000 షేర్లు ఉన్న ఎక్స్చేంజ్‌ను ఊహించండి. 40 షేర్లు కొత్త గరిష్ఠాలను, 20 షేర్లు కొత్త కనిష్ఠాలను నమోదు చేశాయి. Record High Percent 40ని 60తో భాగించిన విలువ, అంటే 66.7. ఇది విస్తృతమైన పెరుగుదలలా కనిపిస్తుంది. కానీ ఈ లెక్క మొత్తం లిస్టింగ్‌లలో 1% షేర్లపై మాత్రమే ఆధారపడింది. మిగిలిన 5,940 షేర్లకు ఇందులో ఎలాంటి పాత్ర లేదు.

40 షేర్ల బాస్కెట్ ఈ సమస్యను లెక్కించగల రూపంలో చూపిస్తుంది. విండోలోని ప్రతి సెషన్‌లో ఏదైనా అంచును నమోదు చేసిన షేర్ల సంఖ్య ఆధారంగా ఒక bucketలో వర్గీకరించాం.

క్వెరీహారం ఎంత పలుచబడుతుంది: 52-వారాల గరిష్ఠం లేదా కనిష్ఠం వద్ద ఉన్న షేర్ల సంఖ్య ఆధారంగా సెషన్ల వర్గీకరణ
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన 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_denominator
Run this yourself

1 to 3 names bucketలోని 39 సెషన్‌లలో మొత్తం రీడింగ్ సగటున 40లోని 2 షేర్లపై మాత్రమే ఆధారపడింది. ఆ సెషన్‌లలో మధ్యస్థ Record High Percent 100. అవి 50 స్థాయికి మధ్యస్థంగా 50 పాయింట్ల దూరంలో ఉన్నాయి. 10 or more names సెషన్‌లలో, 1 సెషన్‌లకు సగటున 10 షేర్లు మాత్రమే denominatorలో ఉన్నాయి. వాటి మధ్యస్థ రీడింగ్ 70. మధ్యస్థ స్థాయి నుంచి వాటి దూరం 20 పాయింట్లు.

చిన్న sampleలో ఒక సెషన్ ఏ రీడింగ్‌లను ఇవ్వగలదో గణితం పరిమితం చేస్తుంది. మూడు షేర్లు మాత్రమే ఒక అంచున ఉంటే సాధ్యమైన రీడింగ్‌లు 0, 33.3, 66.7 మరియు 100 మాత్రమే. రెండు షేర్లు ఉంటే 0, 50 మరియు 100 మాత్రమే సాధ్యం. రెండు గరిష్ఠాలు, ఒక కనిష్ఠంపై ఆధారపడిన 66.7 రీడింగ్‌కు దాని sample మద్దతు ఇవ్వలేనంత ఖచ్చితత్వం కనిపిస్తుంది. దీనిని సరిచేసే పద్ధతి సరళమైనది: ఇండెక్స్ పక్కనే గరిష్ఠాలు, కనిష్ఠాల అసలు సంఖ్యలను చూడాలి. ఇండెక్స్‌ను ఒంటరిగా ఎప్పుడూ చదవకూడదు.

మార్కెట్ breadth: హై-లో ఇండెక్స్ వర్సెస్ advance/decline

రెండు సూచికలూ ఎన్ని షేర్లు మార్కెట్ కదలికలో పాల్గొంటున్నాయో అడుగుతాయి. కానీ అవి వేర్వేరు కాలపరిమితులను పరిశీలిస్తాయి. Advance/decline breadth నిన్నటి ముగింపుతో పోల్చి పెరిగిన లేదా తగ్గిన ప్రతి షేరును లెక్కిస్తుంది. దాని denominator మొత్తం universe. ఇది ఒక రోజును వివరిస్తుంది. హై-లో ఇండెక్స్ 52-వారాల అంచు వద్ద ఉన్న షేర్లను మాత్రమే లెక్కిస్తుంది. దాని denominator చిన్నది. ఇది పూర్తి ఏడాది చరిత్రతో పోల్చితే ధరలు ఎక్కడ ఉన్నాయో వివరిస్తుంది. ఒక రోజున మార్కెట్ విస్తృతంగా పెరిగినా, చాలా కొద్దిమంది షేర్లు మాత్రమే 52-వారాల గరిష్ఠానికి సమీపంలో ఉండవచ్చు.

క్రింది ప్యానెల్‌లో అదే బాస్కెట్‌కు రెండు సూచికలనూ ఒకే 10 సెషన్‌లపై సగటు చేసి చూపించాం. అందువల్ల రెండూ ఒకే scaleపై కనిపిస్తాయి.

క్వెరీరెండు మార్కెట్ విస్తృతి కొలమానాలు, అదే బాస్కెట్: 10-రోజుల High-Low Index వర్సెస్ 10-రోజుల పెరిగిన షేర్ల వాటా
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన 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
Run this yourself

చార్ట్ పరిధి Apr 15న హై-లో ఇండెక్స్ 52.5 వద్ద, 10-రోజుల advancing share 52.8 వద్ద ప్రారంభమవుతుంది. Jul 29న ఇవి వరుసగా 64 మరియు 52.5 వద్ద ముగుస్తాయి. మొత్తం 68 చార్ట్ సెషన్‌లు ఉన్నాయి. Advancing share ఒక ఇరుకైన పరిధిలో ఉంటుంది. సాధారణ సెషన్‌లో సుమారు సగం బాస్కెట్ షేర్లు అధికంగా ముగుస్తాయి. వాటిలో పది రోజుల సగటు తీసుకున్నప్పుడు రేఖ scale మధ్యానికి సమీపంలోనే ఉంటుంది. హై-లో ఇండెక్స్‌కు మాత్రం ఇలాంటి స్థిరమైన ఆధారం లేదు. పది సెషన్‌లు వరుసగా బాస్కెట్‌లోని ఏ షేరు కూడా 52-వారాల కనిష్ఠాన్ని నమోదు చేయకపోతే, ప్రతి రోజువారీ రీడింగ్ 100 అవుతుంది. సగటు కూడా 100గానే ఉంటుంది.

Breadthను participation measuresతో పాటు చదివితే మరింత ఉపయోగకరంగా ఉంటుంది. Relative volume ఒక షేరు తన సాధారణ స్థాయితో పోల్చితే ఈ రోజు అసాధారణంగా అధిక ట్రేడింగ్‌లో ఉందా అని అడుగుతుంది. ఈ వారం అత్యధికంగా కదిలిన షేర్లు వాస్తవంగా ఎంత కదిలిన షేర్లను చూపిస్తుంది. ఈ వారం అసాధారణ volume ఉన్న షేర్లు ట్రేడింగ్ ఎక్కడ కేంద్రీకృతమైందో చూపిస్తుంది.

హై-లో ఇండెక్స్ తరచుగా అడిగే ప్రశ్నలు

హై-లో ఇండెక్స్ 70కి పైగా ఉంటే దాని అర్థం ఏమిటి?

చివరి పది సెషన్‌ల సగటులో కొత్త 52-వారాల గరిష్ఠాలు కొత్త 52-వారాల కనిష్ఠాల కంటే two-to-one కంటే ఎక్కువగా ఉన్నాయని అర్థం. ఇది సాధారణంగా బలమైన మార్కెట్‌కు ఉపయోగించే సంకేతం. అయితే ఎన్ని షేర్లు అసలు అంచును చేరాయో ఇది చెప్పదు. ఆ సంఖ్యను ఇండెక్స్ పక్కనే పరిశీలించాలి.

Record High Percent మరియు హై-లో ఇండెక్స్ మధ్య తేడా ఏమిటి?

Record High Percent ఒకే సెషన్‌కు సంబంధించిన విలువ. కొత్త గరిష్ఠాల సంఖ్యను కొత్త గరిష్ఠాలు మరియు కొత్త కనిష్ఠాల మొత్తంతో భాగించి, 100తో గుణిస్తారు. హై-లో ఇండెక్స్ ఆ విలువకు 10-రోజుల simple moving average. ఒకటి ఈ రోజును వివరిస్తుంది. మరొకటి గత రెండు వారాలను వివరిస్తుంది.

హై-లో ఇండెక్స్ 0 లేదా 100 కావచ్చా?

అవును. వరుసగా పది సెషన్‌లలో universeలో ఏ షేరు కూడా కొత్త 52-వారాల కనిష్ఠాన్ని నమోదు చేయకపోతే, ప్రతి రోజువారీ రీడింగ్ 100 అవుతుంది. సగటు కూడా 100 అవుతుంది. ఏ షేరు కూడా గరిష్ఠం లేదా కనిష్ఠం నమోదు చేయకపోతే, fractionలో denominator సున్నా అవుతుంది. ఆ సెషన్‌కు నిర్వచిత రీడింగ్ ఉండదు.

హై-లో ఇండెక్స్, advance/decline breadth ఒకటేనా?

కాదు. Advance/decline breadth మొత్తం universeతో భాగించి ఒకే రోజు దిశను వివరిస్తుంది. హై-లో ఇండెక్స్ 52-వారాల అంచు వద్ద ఉన్న చిన్న షేర్ల సమూహంతో భాగించి, ఏడాది ధరలతో పోల్చితే వాటి స్థితిని వివరిస్తుంది.

హై-లో ఇండెక్స్ denominatorలో సాధారణంగా ఎన్ని షేర్లు ఉంటాయి?

2026 ఏప్రిల్ నుంచి జూలై వరకు ఇక్కడ కొలిచిన 40 షేర్ల బాస్కెట్‌లో, 1 to 3 names bucketలోని సెషన్‌లలో denominatorలో సగటున 2 షేర్లు ఉన్నాయి. మొత్తం ఎక్స్చేంజ్ లెక్కలు సంఖ్యాపరంగా పెద్దవిగా ఉంటాయి. అయినప్పటికీ అవి మొత్తం లిస్టింగ్‌లలో చిన్న భాగమే. అందుకే ఇండెక్స్ పక్కనే గరిష్ఠాలు, కనిష్ఠాల అసలు సంఖ్యలను కూడా స్క్రీన్‌పై చూపించాలి.


ఈ పేజీలోని ప్రతి సంఖ్య ముగింపు ధరలపై నడిపిన stored, versioned query నుంచి వచ్చింది. ఏదైనా ప్యానెల్‌ను తెరిచి దాని వెనుక ఉన్న SQLను చదవండి. లేదా Strasmore terminalలో మీ స్వంత బాస్కెట్‌పై ఇదే breadth seriesను మళ్లీ నిర్మించండి.

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