Equity বনাম Index Put/Call Ratio: কত বেশি স্বাভাবিক?
Equity ও index put/call ratio-এর স্বাভাবিক পরিসর আলাদা। প্রতিটি কীভাবে তৈরি হয়, index ratio কেন বেশি থাকে এবং ন্যায্য তুলনায় কী লাগে তা জানুন।
উচ্চ put/call ratio বলতে একটি নির্দিষ্ট সংখ্যা বোঝায় না। একই options tape থেকে অন্তত তিন ধরনের put/call ratio প্রকাশিত হয়। একটি শুধু single-stock options গণনা করে। একটি শুধু index products গণনা করে। তৃতীয়টি দুটিকে একত্র করে। প্রতিটির স্বাভাবিক পরিসর আলাদা। তাই একটি series-এ 1.20-এর reading অস্বাভাবিক হতে পারে, আবার অন্য series-এ তা স্বাভাবিক trading session-এরই অংশ হতে পারে। এই measure-টি নতুন হলে, put/call ratio কী পরিমাপ করে নিবন্ধে প্রাথমিক বিষয়গুলো ব্যাখ্যা করা হয়েছে।
ইনডেক্স put/call ratio কেন equity ratio-এর চেয়ে বেশি থাকে?
কে কিনছে, তা দিয়ে শুরু করুন। একটি index put হলো পুরো diversified portfolio-কে সুরক্ষা দেওয়ার সবচেয়ে কম খরচের একক উপকরণ। 400টি পজিশনধারী কোনো ফান্ড 400টি আলাদা put কেনে না। ফান্ডটি index-এর ওপর put কেনে, নির্ধারিত সময়সূচি অনুযায়ী সেগুলো roll করে এবং premium-কে insurance cost হিসেবে হিসাবভুক্ত করে। এই volume ফান্ডের ইতিমধ্যে থাকা শেয়ারগুলোর সুরক্ষা দেয়। ম্যানেজার আশাবাদী হলেও এটি থাকে, না হলেও থাকে।
Single-stock options-এর প্রবাহ ভিন্ন। এই volume-এর বড় অংশ individual নামের ওপর call buying থেকে আসে। Covered-call writing-ও বিপরীত দিকে আরও call volume যোগ করে। Single-name put buying-ও বাস্তব। তবে তার পাশে call flow-এর পরিমাণ অনেক বেশি।
এই formula ওই প্রবাহগুলোর পার্থক্য শনাক্ত করতে পারে না। Hedging-নির্ভর put flow-কে পাতলা call flow দিয়ে ভাগ করলে quotient 1.00-এর কাছাকাছি বা তার ওপরে থাকে। মাঝারি put flow-কে ঘন call flow দিয়ে ভাগ করলে quotient প্রায় 0.50 হয়। Formula একটিই, কিন্তু স্বাভাবিক range দুটি।
নিচের panel-এ আটটি বহুল পরিচিত শেয়ার এবং চারটি broad-market ETF-এর trailing 60 sessions-এর contract volume গণনা করা হয়েছে। এরপর প্রতিটি underlying-এর put volume-কে call volume দিয়ে ভাগ করা হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
underlying_symbol AS symbol,
if(underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA'),
'broad-market ETF',
'single stock') AS bucket,
round(sumIf(volume, startsWith(lower(option_type), 'p'))
/ sumIf(volume, startsWith(lower(option_type), 'c')), 2) AS put_call_ratio,
round(sumIf(volume, startsWith(lower(option_type), 'c')) / 1e6, 1) AS call_volume_millions,
round(sumIf(volume, startsWith(lower(option_type), 'p')) / 1e6, 1) AS put_volume_millions
FROM global_markets.options_greeks
WHERE date >= (SELECT toDate(max(date))
FROM global_markets.options_greeks
WHERE volume > 0) - 60
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'JPM', 'KO', 'JNJ',
'SPY', 'QQQ', 'IWM', 'DIA')
GROUP BY symbol
HAVING sumIf(volume, startsWith(lower(option_type), 'c')) > 0
ORDER BY put_call_ratio ASCনমুনাটিতে spread বেশ বিস্তৃত। সর্বনিম্ন reading হলো 0.43, MSFT-এ। সর্বোচ্চ হলো 2.86, IWM-এ। ওই সময়সীমায় সেখানে 9.6 million call contracts লেনদেন হয়েছে। bucket column-এ কোন সারি single stock এবং কোন সারি broad-market ETF, তা চিহ্নিত করা হয়েছে। Ratio column পড়ার সময় এর সঙ্গে মিলিয়ে দেখুন।
আরও এগোনোর আগে একটি সতর্কতা। প্রকাশিত index ratio-তে index level-এর ওপর options ব্যবহার করা হয়। মেয়াদপূর্তিতে এগুলো শেয়ার সরবরাহের পরিবর্তে cash settled হয়। Mini index options হলো ওই contract-এর ছোট notional সংস্করণ। এখানে একই hedging flow-এর per-underlying প্রতিনিধি হিসেবে broad-market ETF options ব্যবহার করা হয়েছে। ঠিক এই বিষয়েই vendors-দের মধ্যে মতভেদ রয়েছে।
প্রকাশিত প্রতিটি অনুপাত কী গণনা করে?
- Equity-only: পৃথক কোম্পানির শেয়ারের ওপর নেওয়া অপশন; অর্থাৎ single-name flow। বেশিরভাগ সেশনে call-এর পরিমাণ বেশি থাকে।
- Index-only: কোনো সূচকের স্তরের ওপর নেওয়া অপশন। এগুলো cash settled এবং পোর্টফোলিও হেজিংয়ের অধিকাংশ volume বহন করে।
- Total: উভয় শ্রেণির সব contract; এখানে call-এর তুলনায় put volume বেশি।
তিনটি অনুপাতই volume গণনা করে। অর্থাৎ, সেশনের মধ্যে হাতবদল হওয়া contract গণনা করা হয়, সেশনের শেষে খোলা থাকা position নয়। Volume এবং open interest-এর পার্থক্য এই দুটি ধারণার পার্থক্য ব্যাখ্যা করে।
মোট put/call ratio কি অন্য দুটি অনুপাতের গড়?
না। মোট অনুপাতটি একটি weighted blend, এবং এর weight হলো call volume। উভয় bucket মিলিয়ে call volume-এর মধ্যে index bucket-এর অংশকে w ধরা যাক। মোট অনুপাত = equity ratio + দুই অনুপাতের পার্থক্য × w। call volume-এর খুব সামান্য অংশ index bucket-এ থাকলে মোট অনুপাতটি প্রায় equity ratio-এর সমান থাকে। index bucket-এর অংশ বেশি হলে মোট অনুপাতটি index ratio-এর দিকে এগোয়।
পরের প্যানেলে উভয় component-কে তাদের পরিমাপ করা sixty-session level-এ স্থির রেখে w-কে zero থেকে one hundred percent পর্যন্ত পরিবর্তন করা হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH components AS
(
SELECT
round(sumIf(volume, startsWith(lower(option_type), 'p') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA'))
/ sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA')), 3) AS equity_ratio,
round(sumIf(volume, startsWith(lower(option_type), 'p') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA'))
/ sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA')), 3) AS index_ratio
FROM global_markets.options_greeks
WHERE date >= (SELECT toDate(max(date))
FROM global_markets.options_greeks
WHERE volume > 0) - 60
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'JPM', 'KO', 'JNJ',
'SPY', 'QQQ', 'IWM', 'DIA')
HAVING sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA')) > 0
AND sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA')) > 0
)
SELECT
concat(toString(step * 10), '%') AS index_share_of_call_volume,
equity_ratio,
index_ratio,
round(equity_ratio + (index_ratio - equity_ratio) * (step / 10), 3) AS blended_total_ratio
FROM
(
SELECT
equity_ratio,
index_ratio,
arrayJoin(range(11)) AS step
FROM components
)
ORDER BY stepcomponent দুটি 0.562 এবং 1.396-এ স্থির থাকলে, index bucket call volume-এর কোনো অংশ না দিলে blend-এর মান হয় 0.562, আর index bucket পুরো call volume দিলে হয় 1.396। সমান ভাগে, অর্থাৎ call volume-এর 50% index bucket-এ থাকলে, মোট অনুপাতের print হয় 0.979। ওই এগারোটি row-জুড়ে কোনো component পরিবর্তিত হয়নি। শুধু mix পরিবর্তিত হয়েছে।
মোট অনুপাত কি উভয় অংশ কমলেও বাড়তে পারে?
পারে, আর একক শিরোনামসংখ্যার ফাঁদ এখানেই। অঙ্কটি বোঝাতে পূর্ণসংখ্যা ব্যবহার করে দুটি কাল্পনিক সেশনের উদাহরণ দেওয়া হলো।
প্রথম দিন: equity bucket-এ 1,000,000টি call এবং 600,000টি put লেনদেন হয়। অনুপাত 0.60। index bucket-এ 200,000টি call এবং 280,000টি put লেনদেন হয়। অনুপাত 1.40। মোট হিসাবে 1,200,000টি call-এর বিপরীতে 880,000টি put, অর্থাৎ 0.73।
দ্বিতীয় দিন: উভয় অনুপাত কমে। Equity bucket-এ 600,000টি call এবং 330,000টি put-এ অনুপাত 0.55। Index bucket-এ 800,000টি call এবং 1,040,000টি put-এ অনুপাত 1.30। মোট হিসাবে 1,400,000টির বিপরীতে 1,370,000টি, অর্থাৎ 0.98।
উভয় উপাদানের অনুপাত কমেছে। মোট অনুপাত এক-চতুর্থাংশ পয়েন্ট বেড়েছে। অন্য যে বিষয়টি বদলেছে, তা হলো বেশি অনুপাতের bucket-এ থাকা call volume-এর অংশ। এই অংশ 17 percent থেকে বেড়ে 57 percent হয়েছে। শুধু মোট অনুপাতের দিকে নজর রাখা কোনো পাঠক put activity-তে এমন একটি বৃদ্ধি দেখতে পেতেন, যা কোনো bucket-এই ঘটেনি।
Live data-তে এই অংশ স্থির থাকে না। নিচের panel-এ প্রতিটি সেশনে উভয় bucket-এর অনুপাত এবং ETF bucket-এ call volume-এর অংশ দেখানো হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
toString(date) AS session_date,
formatDateTime(date, '%b %e') AS session_label,
round(sumIf(volume, startsWith(lower(option_type), 'p') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA'))
/ sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA')), 2) AS equity_ratio,
round(sumIf(volume, startsWith(lower(option_type), 'p') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA'))
/ sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA')), 2) AS index_style_ratio,
round(index_style_ratio - equity_ratio, 2) AS ratio_gap,
round(100 * sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA'))
/ sumIf(volume, startsWith(lower(option_type), 'c')), 1) AS etf_share_of_calls_pct
FROM global_markets.options_greeks
WHERE date >= (SELECT toDate(max(date))
FROM global_markets.options_greeks
WHERE volume > 0) - 45
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'JPM', 'KO', 'JNJ',
'SPY', 'QQQ', 'IWM', 'DIA')
GROUP BY date
HAVING sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'DIA')) > 0
AND sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA')) > 0
ORDER BY dateJun 29-এ, অর্থাৎ প্রদর্শিত সময়সীমার সবচেয়ে আগের সেশনে, single-stock bucket-এ অনুপাত ছিল 0.5, আর ETF bucket-এ ছিল 1.55। ব্যবধান ছিল 1.05। ওই সেশনে ETF bucket-এ call volume-এর অংশ ছিল 45.2 percent। Aug 12-এ ওই কলামগুলোর মান ছিল যথাক্রমে 0.55, 1.34 এবং ব্যবধান 0.79। তখন ETF-এর অংশ ছিল 49.5 percent। প্রদর্শিত 32টি সেশনের শুরু ও শেষ—উভয় প্রান্তেই gap column ইতিবাচক, আর share column তার নিচে ওঠানামা করে।
একই দিনের put/call ratio দুটি উৎসে কেন ভিন্ন দেখায়?
শ্রেণিবিন্যাসের পদ্ধতিই এর কারণ। ETF options এ ক্ষেত্রে দ্ব্যর্থক। ETF একটি তালিকাভুক্ত সিকিউরিটি, তাই এটিকে equity শ্রেণিতে রাখার যুক্তি আছে। আবার এটি একটি সূচক অনুসরণ করে, তাই index শ্রেণিতে রাখারও যুক্তি আছে। প্রকাশকেরা এই বিষয়টি ভিন্নভাবে সমাধান করেন। কেউ ETF options-কে equity ratio-তে অন্তর্ভুক্ত করেন। কেউ exchange traded products-কে আলাদা সিরিজ হিসেবে দেখান। আবার কেউ এগুলোকে index products-এর সঙ্গে একত্র করেন। প্রতিটি ক্ষেত্রেই চার্টের label একই রকম দেখায়।
এই সিদ্ধান্তের প্রভাব পরিমাপ করা যায়। নিচের panel-এ একই trading session ব্যবহার করে একটি bucket-এর ratio দুবার হিসাব করা হয়েছে। একবার ETF options বাদ রাখা হয়েছে। আরেকবার সেগুলো অন্তর্ভুক্ত করা হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
toString(date) AS session_date,
formatDateTime(date, '%b %e') AS session_label,
round(sumIf(volume, startsWith(lower(option_type), 'p') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA'))
/ sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA')), 2) AS equity_ratio_etfs_excluded,
round(sumIf(volume, startsWith(lower(option_type), 'p'))
/ sumIf(volume, startsWith(lower(option_type), 'c')), 2) AS equity_ratio_etfs_included
FROM global_markets.options_greeks
WHERE date >= (SELECT toDate(max(date))
FROM global_markets.options_greeks
WHERE volume > 0) - 30
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'JPM', 'KO', 'JNJ',
'SPY', 'QQQ', 'IWM', 'DIA')
GROUP BY date
HAVING sumIf(volume, startsWith(lower(option_type), 'c') AND underlying_symbol NOT IN ('SPY', 'QQQ', 'IWM', 'DIA')) > 0
ORDER BY dateAug 12-এ, অর্থাৎ panel-এর সর্বশেষ session-এ, শুধু single-stock-এর হিসাব ছিল 0.55। ETF options অন্তর্ভুক্ত করলে হিসাবটি দাঁড়ায় 0.94। দিন একই, tape একই, axis-এর শব্দও একই। কিন্তু একজন প্রকাশকের series থেকে নির্ধারিত কোনো threshold অন্য প্রকাশকের series-এ প্রযোজ্য নাও হতে পারে।
তাহলে কোন put/call ratio-কে উচ্চ বলা হয়?
কার্যকর নিয়মটি বেশ সীমিত। কোনো ratio-কে শুধু একই source এবং একই পদ্ধতিতে তৈরি নিজস্ব অতীতের সঙ্গে তুলনা করুন। Percentile এই প্রশ্নের উত্তর দেয়: নির্দিষ্ট series-এর গত এক বছরের মধ্যে আজকের reading কোথায় অবস্থান করছে? 1.00-এ একটি স্থির সীমারেখা তা বলে না, কারণ equity series-এ 1.00 একটি চরম print, কিন্তু index series-এ এটি স্বাভাবিক মাত্রা হতে পারে।
দুটি অভ্যাস তুলনাটিকে নির্ভরযোগ্য রাখে। কোনো level উদ্ধৃত করার আগে construction note পড়ুন, বিশেষ করে ETF কীভাবে অন্তর্ভুক্ত করা হয়েছে তা। পাশাপাশি components-ও total-এর সঙ্গে পড়ুন, কারণ শুধু mix বদলালেও total পরিবর্তিত হতে পারে। উচ্চ put/call ratio bullish কি না এই ব্যাখ্যাকে আরও এগিয়ে নিয়ে যায়, আর put/call ratio কীভাবে গণনা করা হয় ধাপে ধাপে arithmetic দেখায়।
ডেটা নোট এবং bucket-এর সংজ্ঞা
ETF bucket-এ SPY, QQQ, IWM এবং DIA রয়েছে। single-stock bucket-এ AAPL, MSFT, NVDA, AMZN, TSLA, JPM, KO এবং JNJ রয়েছে। উভয় bucket-ই সংশ্লিষ্ট category-র নমুনা, পুরো market নয়। তাই এখানে দেখানো level-গুলো split বোঝায়, কোনো publisher-এর headline number পুনরুৎপাদন করে না।
প্রতিটি panel-এ session-এর contract volume calls এবং puts-এর জন্য আলাদাভাবে যোগ করা হয়, তারপর ভাগ করা হয়। এখানে dollar বা premium weighting নেই।
প্রতিটি window calendar day নয়, recorded volume থাকা সর্বশেষ session থেকে নির্ধারিত হয়। put এবং call side-কে contract type-এর প্রথম অক্ষরের ভিত্তিতে মিলিয়ে নেওয়া হয়। ফলে কোনো feed put এবং call-এর বদলে P এবং C লিখলেও সঠিক bucket তৈরি হয়।
কোনো contract-এর জন্য session-এ volume recorded থাকলেই সেটি গণনায় আসে। এর মধ্যে deep out-of-the-money strike-ও রয়েছে। দূরের strike-গুলো hedging put volume-এর বড় অংশ বহন করে। সেগুলো বাদ দিলে ETF bucket-এর volume কম দেখানো হবে।
Index level-এর options, যেগুলো cash settled এবং European exercise-ভিত্তিক, ETF options থেকে আলাদা product। উপরের bucketing প্রশ্নের জন্য per-underlying panel-গুলো index hedging flow-এর proxy হিসেবে ETF options ব্যবহার করে।
দিনের records যুক্ত হওয়ার সময় সর্বশেষ এক বা দুটি session শুরুতে অনুপস্থিত থাকতে পারে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
ইক্যুইটি অপশনের স্বাভাবিক put/call ratio কত?
একক-শেয়ার অপশনের ক্ষেত্রে অধিকাংশ সময় put/call ratio 1.00-এর নিচে থাকে, কারণ বেশিরভাগ সেশনে কলের ভলিউম বেশি হয়। উপরের trailing-sixty-session প্যানেলে থাকা বারোটি নামের মধ্যে সর্বনিম্ন reading ছিল 0.43। কোনো একটি সিরিজের স্বাভাবিক মাত্রা নির্ধারিত হয় সেই সিরিজের নিজস্ব ইতিহাস দিয়ে, সবার জন্য প্রযোজ্য কোনো অভিন্ন threshold দিয়ে নয়।
সূচকের put/call ratio সাধারণত 1-এর ওপরে থাকে কেন?
সূচকের put হলো পোর্টফোলিও হেজ করার প্রচলিত উপায়। ইতিমধ্যে শেয়ার ধরে রাখা ম্যানেজাররা নির্দিষ্ট সময়সূচি অনুযায়ী এই put কেনেন। হেজিংয়ের ভলিউম একই fraction-এর put পাশে জমা হয়, যে fraction directional trade-এর ক্ষেত্রেও ব্যবহৃত হয়। ফলে পুরো historical record জুড়েই এই সিরিজের মাত্রা তুলনামূলকভাবে বেশি থাকে।
sentiment chart-এ সাধারণত কোন put/call ratio দেখানো হয়?
প্রকাশিত অধিকাংশ chart-এ total series অথবা equity-only series দেখানো হয়। তবে axis label-এ কোনটি দেখানো হচ্ছে, তা খুব কম ক্ষেত্রেই স্পষ্ট থাকে। অন্য কোথাও উদ্ধৃত কোনো threshold-এর সঙ্গে chart-এর reading তুলনা করার আগে construction note পরীক্ষা করুন, কারণ এই সিরিজগুলোর মাত্রা এক নয়।
দুটি ভিন্ন provider-এর put/call ratio কি তুলনা করা যায়?
এক provider-এর level অন্য provider-এর ক্ষেত্রে সরাসরি প্রযোজ্য নয়। ETF কীভাবে গণনা করা হবে এবং কোন কোন exchange-এর ভলিউম অন্তর্ভুক্ত হবে, সে বিষয়ে provider-ভেদে পার্থক্য থাকে। একই provider-এর নিজস্ব সিরিজের মধ্যে direction এবং percentile rank—তুলনার ক্ষেত্রে মূলত এই দুটি বিষয়ই নির্ভরযোগ্য থাকে।
এখানে থাকা প্রতিটি panel-এর সঙ্গে সেটি তৈরির SQL দেওয়া আছে। তাই ভিন্ন universe বা window ব্যবহার করে এই বিভাজনগুলোর যেকোনোটি পুনর্গঠন করা যায়। Strasmore terminal-এ plain English-এ একই প্রশ্ন করুন।