Strasmore Research
गहन पड़ताल Matt Connorलेखक: Matt Connor

क्या उच्च put/call ratio तेजी का संकेत है?

Contrarian निवेशक उच्च put/call ratio को तेजी का संकेत मानते हैं। Equity और index options के percentile bands देखें और जानें कि extreme readings के बाद वास्तव में क्या हुआ।

उच्च put/call ratio को आमतौर पर contrarian तेजी के संकेत के रूप में देखा जाता है: put की असामान्य रूप से भारी खरीदारी से यह संकेत मिलता है कि बाजार में अधिकांश प्रतिभागी पहले ही गिरावट के लिए तैयार हो चुके हैं। लेकिन इस संकेत पर कार्रवाई करने में एक समस्या है। “उच्च” का कोई निश्चित स्तर नहीं होता। आपकी स्क्रीन पर 1.15 का ratio single-stock options में अत्यधिक हो सकता है, जबकि index products में यह सामान्य कारोबारी सत्र का संकेत हो सकता है।

इस सवाल का उत्तर देने के लिए reference distribution चाहिए। यह पेज दोनों पुस्तकों के लिए ऐसी distribution देता है और फिर मापता है कि उच्च readings के बाद क्या हुआ। put/call ratio की व्याख्या बताती है कि यह ratio कैसे बनाया जाता है। नीचे की पूरी चर्चा उसी परिभाषा से शुरू होती है।

मापन से जुड़ी दो बातें ध्यान देने योग्य हैं। यहां हर ratio उस दिन ट्रेड किए गए contracts की संख्या पर आधारित है। इसलिए यह volume ratio है। Open interest उन positions की गिनती करता है जो अभी खुली हैं और यह अलग स्तर का माप है (volume और open interest दोनों के बीच अंतर स्पष्ट करता है)। आंकड़े एक fixed basket से भी लिए गए हैं: पूरे बाजार के tape के बजाय दस व्यापक रूप से रखे जाने वाले single-stock names और तीन broad-market ETFs। इसलिए distribution के अंतिम दशमलव के बजाय उसके पैटर्न पर ध्यान दें।

उच्च put/call ratio किसे माना जाए?

प्रतिशतक उस सवाल का जवाब देता है, जिसका जवाब कोई एक स्तर नहीं दे सकता। नीचे दिया गया वक्र जनवरी 2022 से जुलाई 2026 तक के हर कारोबारी सत्र को दर्शाता है। प्रत्येक बुक के लिए हर सत्र का एक ratio दिखाया गया है।

क्वेरीपुट/कॉल वॉल्यूम अनुपात पर्सेंटाइल: सिंगल-स्टॉक बास्केट बनाम इंडेक्स ETFs, 2022 से जुलाई 2026 तक
हर आंकड़े के पीछे का पूरा SQL
WITH book_days AS (
    SELECT date AS day,
           if(underlying_symbol IN ('SPY', 'QQQ', 'IWM'), 'index_etf', 'equity') AS book,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
    FROM global_markets.options_greeks
    WHERE date >= toDate('2022-01-01')
      AND date <= toDate('2026-07-31')
      AND volume > 0
      AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMZN',
                                'META', 'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
    GROUP BY day, book
    HAVING call_volume > 0
),
paired AS (
    SELECT day,
           toFloat64(sumIf(put_volume, book = 'equity'))
             / toFloat64(sumIf(call_volume, book = 'equity')) AS equity_pcr,
           toFloat64(sumIf(put_volume, book = 'index_etf'))
             / toFloat64(sumIf(call_volume, book = 'index_etf')) AS index_pcr
    FROM book_days
    GROUP BY day
    HAVING sumIf(call_volume, book = 'equity') > 0
       AND sumIf(call_volume, book = 'index_etf') > 0
),
curves AS (
    SELECT arrayMap(v -> round(v, 2),
                    quantilesDeterministic(0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99)
                                          (equity_pcr, cityHash64(day))) AS eq,
           arrayMap(v -> round(v, 2),
                    quantilesDeterministic(0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99)
                                          (index_pcr, cityHash64(day))) AS idx
    FROM paired
)
SELECT z.1 AS percentile,
       z.2 AS equity_pcr,
       z.3 AS index_etf_pcr
FROM (
    SELECT arrayJoin(arrayZip(['p05', 'p10', 'p25', 'p50', 'p75', 'p90', 'p95', 'p99'], eq, idx)) AS z
    FROM curves
)
Run this yourself

single-stock basket में सामान्य सत्र में प्रति call 0.67 puts रहे। सबसे ऊपरी दसवें प्रतिशतक वाले सत्र 0.89 से शुरू हुए, जबकि सबसे असाधारण एक प्रतिशत सत्र 1.34 से ऊपर रहे। शांत बाजार वाला सिरा भी तुलना के लिए उतना ही उपयोगी है: हर बीस में से एक सत्र 0.48 या उससे कम पर समाप्त हुआ।

ETF कॉलम में वक्र के हर बिंदु पर distribution अलग है। इसका सामान्य सत्र 1.45 पर रहा। यह उस one-to-one रेखा से ऊपर है, जिसके काफी नीचे single-stock basket का median रहता है। ETF का अपना सबसे ऊपरी दसवां प्रतिशतक 1.77 से शुरू हुआ। जिस बुक का नाम न बताया जाए, उसके बिना किसी ratio का उल्लेख लगभग अर्थहीन है। 1.15 का वह print किस कॉलम से आया है, इसके आधार पर उसके दो अलग-अलग अर्थ होते हैं।

इंडेक्स ratio का 1 से ऊपर होना सामान्य है, लेकिन इक्विटी ratio का 1 से ऊपर होना नहीं

समान volume को underlying के आधार पर अलग करने पर दोनों स्तर स्पष्ट रूप से अलग हो जाते हैं।

क्वेरीअंतर्निहित परिसंपत्ति के अनुसार पुट/कॉल वॉल्यूम अनुपात: 1 जनवरी से 31 जुलाई 2026 तक
हर आंकड़े के पीछे का पूरा SQL
WITH symbol_days AS (
    SELECT underlying_symbol AS symbol,
           date AS day,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
    FROM global_markets.options_greeks
    WHERE date >= toDate('2026-01-01')
      AND date <= toDate('2026-07-31')
      AND volume > 0
      AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMZN',
                                'META', 'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
    GROUP BY symbol, day
    HAVING call_volume > 0
)
SELECT symbol,
       round(toFloat64(sum(put_volume)) / toFloat64(sum(call_volume)), 2) AS put_call_ratio,
       round(100 * countIf(put_volume > call_volume) / count(), 1) AS above_one_pct,
       count() AS observations
FROM symbol_days
GROUP BY symbol
ORDER BY put_call_ratio DESC
Run this yourself

2026 के पहले सात महीनों में, IWM तालिका में सबसे ऊपर रहा। इसमें प्रति call 2.73 puts रहे और इसके 144 में से 98.6% sessions में ratio one से ऊपर रहा। सबसे नीचे, XOM में 0.38 का कारोबार हुआ और 2.8% sessions में ratio one से ऊपर रहा।

यह अंतर संरचनात्मक है। Broad-market ETF options में portfolio hedging की जाती है। दो सौ positions रखने वाला manager हर holding पर put खरीदने के बजाय index puts खरीदता है। इस flow के सामने matching call trade नहीं होता। Single-stock option volume का झुकाव इसके विपरीत होता है। इसमें upside के लिए calls खरीदी जाती हैं और पहले से रखे गए stock के विरुद्ध calls लिखी जाती हैं। "Total" ratio दोनों books को मिलाता है। इसलिए यह दोनों के बीच रहता है और sentiment जितना, उतना ही दिन के product mix के साथ भी बदलता है।

एक और स्तरगत बदलाव समझना उपयोगी है। Index और ETF volume में अब same-day expiries (0DTE options) की हिस्सेदारी काफी बड़ी है। जब पुराने परिचित thresholds तय किए गए थे, तब यह category आज के स्तर जैसी volume पर trade नहीं करती थी। अलग composition वाले tape पर पुराने levels लागू नहीं होते।

क्या high put/call ratio तेजी का संकेत है? चरम स्तरों के बाद क्या हुआ

Contrarian मामला जांचा जा सकता है। हर सत्र को उस दिन के equity ratio के आधार पर पांच बराबर समूहों में बांटें। इसके बाद मापें कि अगले 5 और 20 सत्रों में S&P 500 tracker में कितना बदलाव आया।

क्वेरीइक्विटी पुट/कॉल अनुपात के प्रत्येक पाँचवें हिस्से के बाद S&P 500 ट्रैकर में बदलाव, 2022 से जुलाई 2026 तक
हर आंकड़े के पीछे का पूरा SQL
WITH raw AS (
    SELECT date AS day,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
    FROM global_markets.options_greeks
    WHERE date >= toDate('2022-01-01')
      AND date <= toDate('2026-07-31')
      AND volume > 0
      AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'META',
                                'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
    GROUP BY day
    HAVING call_volume > 0
),
equity_pcr AS (
    SELECT day, toFloat64(put_volume) / toFloat64(call_volume) AS pcr
    FROM raw
),
spy_daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
           toFloat64(argMax(close, window_start)) AS close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-08-01')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY day
),
forward AS (
    SELECT day,
           close,
           any(close) OVER (ORDER BY day ASC ROWS BETWEEN 5 FOLLOWING AND 5 FOLLOWING) AS close_5,
           any(close) OVER (ORDER BY day ASC ROWS BETWEEN 20 FOLLOWING AND 20 FOLLOWING) AS close_20
    FROM spy_daily
),
joined AS (
    SELECT p.day AS day,
           p.pcr AS pcr,
           100 * (f.close_5 / f.close - 1) AS fwd_5d_pct,
           100 * (f.close_20 / f.close - 1) AS fwd_20d_pct
    FROM equity_pcr AS p
    INNER JOIN forward AS f ON p.day = f.day
    WHERE f.close_5 > 0 AND f.close_20 > 0
),
cuts AS (
    SELECT quantilesDeterministic(0.2, 0.4, 0.6, 0.8)(pcr, cityHash64(day)) AS q
    FROM joined
)
SELECT multiIf(pcr < q[1], 'lowest fifth',
               pcr < q[2], 'second fifth',
               pcr < q[3], 'middle fifth',
               pcr < q[4], 'fourth fifth',
               'highest fifth') AS pcr_band,
       count() AS observations,
       round(min(pcr), 2) AS band_floor_ratio,
       round(quantileDeterministic(0.5)(fwd_5d_pct, cityHash64(day)), 2) AS fwd_5d_median_pct,
       round(quantileDeterministic(0.5)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_median_pct,
       round(quantileDeterministic(0.25)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_p25_pct,
       round(quantileDeterministic(0.75)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_p75_pct
FROM joined CROSS JOIN cuts
GROUP BY pcr_band
ORDER BY band_floor_ratio ASC
Run this yourself

सबसे शांत पांचवां समूह 0.34 से शुरू होता है और सबसे सक्रिय पांचवां समूह 0.81 से शुरू होता है। इसलिए ऊपरी band में वे सभी readings शामिल हैं जिन्हें कोई contrarian अत्यधिक मान सकता है। उन 226 सत्रों में 20-सत्रीय बदलाव का median 3% रहा। सबसे शांत पांचवें समूह के बाद यह 0.91% था। पांच सत्र बाद, इन्हीं दो groups के आंकड़े क्रमशः 0.82% और 0.3% रहे।

Medians महत्वपूर्ण हिस्से को छिपा देते हैं। सबसे ऊपरी पांचवें समूह में 20-सत्रीय परिणामों का मध्य आधा -1.82% से 5.71% तक रहा। सबसे शांत पांचवें समूह में मध्य आधा -0.83% से 2.67% तक रहा। ये दोनों ranges काफी हद तक एक ही क्षेत्र को कवर करती हैं। किसी सत्र का किस band में आना distribution के केंद्र को बदलता है। लेकिन यह उस केंद्र के आसपास की range को बहुत कम संकरा करता है। यही वह हिस्सा है जिसे सामान्य नियम छोड़ देता है।

Weight से जुड़ी एक सावधानी भी है। जनवरी 2022 से जुलाई 2026 तक की अवधि में एक bear market और उसके बाद की recovery शामिल है। प्रत्येक band में लगभग 226 सत्र आते हैं। यह एक वास्तविक sample है, लेकिन यह market history का केवल एक चरण है।

क्या चरम रीडिंग्स बाजार के निचले स्तरों पर समूह बनाती हैं?

वे गिरावट वाले महीनों में समूह बनाती हैं। यह एक अलग दावा है। 2022 के बाद के हर महीने को इस आधार पर समूहित करें कि उस महीने के भीतर tracker में कितना बदलाव आया, फिर गिनें कि प्रत्येक समूह में top-decile put/call readings कितनी रहीं।

क्वेरीप्रति माह शीर्ष-दशमक पुट/कॉल रीडिंग, S&P 500 ट्रैकर में बदलाव के अनुसार समूहीकृत
हर आंकड़े के पीछे का पूरा SQL
WITH raw AS (
    SELECT date AS day,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
           sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
    FROM global_markets.options_greeks
    WHERE date >= toDate('2022-01-01')
      AND date <= toDate('2026-07-31')
      AND volume > 0
      AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'META',
                                'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
    GROUP BY day
    HAVING call_volume > 0
),
equity_pcr AS (
    SELECT day, toFloat64(put_volume) / toFloat64(call_volume) AS pcr
    FROM raw
),
cut AS (
    SELECT quantileDeterministic(0.90)(pcr, cityHash64(day)) AS p90
    FROM equity_pcr
),
by_month AS (
    SELECT toStartOfMonth(day) AS month_start,
           countIf(pcr >= cut.p90) AS extreme_reads,
           quantileDeterministic(0.5)(pcr, cityHash64(day)) AS median_pcr
    FROM equity_pcr CROSS JOIN cut
    GROUP BY month_start
),
spy_daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
           toFloat64(argMax(close, window_start)) AS close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY day
),
spy_month AS (
    SELECT toStartOfMonth(day) AS month_start,
           100 * (argMax(close, day) / argMin(close, day) - 1) AS move_pct
    FROM spy_daily
    GROUP BY month_start
)
SELECT multiIf(s.move_pct <= -3, 'index down 3% or more',
               s.move_pct < 0, 'index down under 3%',
               s.move_pct < 3, 'index up under 3%',
               'index up 3% or more') AS index_move_bucket,
       count() AS observations,
       round(avg(m.extreme_reads), 1) AS top_decile_reads_avg,
       round(quantileDeterministic(0.5)(m.median_pcr, cityHash64(m.month_start)), 2) AS typical_pcr_ratio
FROM by_month AS m
INNER JOIN spy_month AS s ON m.month_start = s.month_start
GROUP BY index_move_bucket
ORDER BY min(s.move_pct) ASC
Run this yourself

जिन महीनों में tracker 3% या उससे अधिक नीचे बंद हुआ, उनमें औसतन 4.2 top-decile readings रहीं। इसके मुकाबले, 3% या उससे अधिक बढ़ने वाले महीनों में यह संख्या 1.9 रही। प्रत्येक समूह की median daily reading अंतिम कॉलम में है। सबसे खराब समूह के लिए यह 0.75 और सबसे अच्छे समूह के लिए 0.62 है। तालिका के दोनों छोरों पर क्रमशः 12 और 22 महीने हैं।

चरम put/call readings और गिरती कीमतें एक साथ दिखाई देती हैं। यह सह-घटना है। पिछले खंड में दिए गए forward numbers बताते हैं कि इसका वास्तविक महत्व कितना है। यह ratio उसी दिन के बाजार-आंकड़ों का उसी दिन का माप है। इसलिए इसके spikes गिरावट के भीतर दिखाई देते हैं, उनसे पहले नहीं। किसी निचले स्तर का label बाद में लगाया जाता है।

किसी स्तर को वितरण के संदर्भ में पढ़ना

ऊपर दिए गए आंकड़ों से दो आदतें निकलती हैं।

पहली, समान चीजों की तुलना करें। कोई रीडिंग तभी अर्थपूर्ण होती है जब उसकी तुलना उसी बुक के समान अवधि के अपने इतिहास से की जाए। यही जानकारी percentile table देती है, जबकि याद रखा गया threshold नहीं देता।

दूसरी, denominator पर नजर रखें। Put buying में कोई बदलाव न होने पर भी call volume बढ़ने से ratio घट सकता है। Ratio में गिरावट और उछाल, दोनों, fraction के केवल एक पक्ष के बदलने से आ सकते हैं। इसलिए put volume और call volume को अलग-अलग पढ़ने से गणना स्पष्ट रहती है।

यही अनुशासन हर उस sentiment gauge पर लागू होता है जिसे केवल एक संख्या के रूप में बताया जाता है। VIX और 30% implied volatility print को उनके अपने distributions के बिना समझना संभव नहीं है। Contrarian sentiment rules भी डेटा के आधार पर तभी टिकते हैं, जब reference level को मान लेने के बजाय मापा गया हो।

अक्सर पूछे जाने वाले प्रश्न

क्या ऊंचा put/call ratio तेजी का संकेत है?

Contrarian व्याख्या में भारी put खरीदारी को ऐसे देखा जाता है कि बाजार में पहले से ही गिरावट की स्थिति बन चुकी है। ऊपर दिए गए single-stock बास्केट के मुकाबले, readings के सबसे ऊंचे पांचवें हिस्से वाले सत्रों के बाद S&P 500 tracker में 20-सत्र की median चाल 3% रही। सबसे शांत पांचवें हिस्से के बाद यह 0.91% रही। ऊंचे पांचवें हिस्से के परिणामों के मध्य 50% का दायरा -1.82% से 5.71% तक रहा।

सामान्य put/call ratio क्या होता है?

यह पूरी तरह इस बात पर निर्भर करता है कि कौन-से options गिने जा रहे हैं। 2022 से जुलाई 2026 तक दस प्रमुख single-stock नामों के बास्केट में प्रति call median सत्र में 0.67 puts थे। इन्हीं सत्रों में तीन व्यापक-बाजार ETFs का median 1.45 रहा।

Index put/call ratio, equity put/call ratio से अधिक क्यों होता है?

Broad index और ETF options पोर्टफोलियो hedging के लिए मानक साधन हैं। Index puts खरीदने वाले hedger के सामने matching call trade नहीं होता। Single-stock volume में upside के लिए खरीदे गए calls और पहले से रखे शेयरों के विरुद्ध लिखे गए calls का हिस्सा अधिक होता है। इससे उस बुक का ratio कम रहता है।

क्या put/call ratio बाजार का समय तय करने में उपयोगी है?

ऊपर दिया गया माप बताता है कि readings के प्रत्येक पांचवें हिस्से के बाद क्या हुआ। किसी एक band के भीतर का spread, bands के medians के बीच के अंतर से कहीं अधिक चौड़ा है। सबसे ऊंचे दसवें हिस्से की readings उन महीनों में भी अधिक केंद्रित रहती हैं, जब index नीचे बंद हुआ। सबसे खराब समूह में यह दर 4.2 प्रति माह रही।

Volume put/call ratio और open interest ratio में क्या अंतर है?

Volume ratio किसी सत्र के दौरान कारोबार हुए contracts को गिनता है। इसलिए यह हर दिन reset होता है और तेजी से प्रतिक्रिया देता है। Open interest ratio उन positions को गिनता है जो अभी बकाया हैं। यह धीरे-धीरे बदलता है और अपने अलग स्तर पर रहता है। दोनों को एक-दूसरे के स्थान पर इस्तेमाल नहीं किया जा सकता। एक ratio से लिया गया threshold दूसरे को गलत ढंग से पढ़ेगा।

ये संख्याएं कैसे तैयार की जाती हैं
  • स्रोत: प्रत्येक सत्र में प्रत्येक option contract के लिए एक row, जिसमें उस सत्र का traded volume शामिल है। Puts और calls को OCC contract code से अलग किया जाता है। इसमें अंतिम आठ characters strike होते हैं और उनसे ठीक पहले का character call के लिए C तथा put के लिए P होता है। सटीक table और filters के लिए किसी भी panel के नीचे दिया गया SQL खोलें।
  • इस पेज का प्रत्येक ratio volume ratio है। Computation में open interest शामिल नहीं है। इसलिए यहां कोई open-interest ratio नहीं है।
  • Implied-volatility की गुणवत्ता के आधार पर कोई filter लागू नहीं किया गया है। Contracts केवल traded volume के आधार पर शामिल होते हैं, क्योंकि ये panels trading activity गिनते हैं, volatility नहीं मापते।
  • बास्केट में single-stock book के लिए AAPL, MSFT, NVDA, AMZN, META, TSLA, GOOGL, JPM, KO और XOM शामिल हैं। Index-ETF book में SPY, QQQ और IWM शामिल हैं। Exchange द्वारा प्रकाशित ratios पूरे बाजार को कवर करते हैं और इनमें SPX जैसे index products भी शामिल होते हैं। इसलिए उनके स्तर अलग होते हैं।
  • Index prices, S&P 500 tracker के लिए प्रत्येक दिन के अंतिम regular-session print हैं। Sample के अंतिम 20 सत्रों को forward returns से हटा दिया गया है, क्योंकि उनके बाद अभी 20 सत्र उपलब्ध नहीं हैं। Monthly moves प्रत्येक महीने के पहले सत्र के close से उसी महीने के अंतिम सत्र के close तक मापी जाती हैं।

ऊपर दिया गया प्रत्येक panel उसके पीछे के SQL को खोलता है। यही percentile queries Strasmore terminal पर आपके द्वारा follow किए जाने वाले किसी भी underlying पर चलाई जा सकती हैं।

#put-call ratio#sentiment#options structure#contrarian#reference levels