האם יחס put/call גבוה הוא שורי?
הגישה המנוגדת רואה ביחס put/call גבוה איתות שורי. בדקו את טווחי האחוזונים באופציות על מניות ומדדים, ומה קרה בפועל לאחר קריאות קיצוניות.
יחס put/call גבוה הוא האיתות השורי הקלאסי של הגישה המנוגדת: רכישות חריגות בהיקפן של אופציות put נתפסות כסימן לכך שהמשקיעים כבר נערכו לירידות. עם זאת, פעולה על סמך האיתות הזה נתקלת בבעיה אחת. ל״גבוה״ אין ערך קבוע, וקריאה של 1.15 על המסך יכולה להיות קיצונית באופציות על מניה בודדת, אך שגרתית במוצרי מדדים.
לשאלה הזו נדרשת התפלגות ייחוס. דף זה מציג התפלגות כזו עבור שני המאגרים, ולאחר מכן מודד מה קרה בעקבות הקריאות הגבוהות. המדריך ל־יחס put/call מסביר כיצד היחס מחושב, וכל האמור להלן מבוסס על הגדרה זו.
שתי הערות בנוגע למדידה. כל יחס כאן סופר את מספר החוזים שנסחרו באותו יום, ולכן מדובר ביחס מחזור; open interest סופר פוזיציות שעדיין פתוחות ונמצא ברמה אחרת (מחזור לעומת open interest מפריד בין השניים). הנתונים מגיעים גם מסל קבוע, הכולל עשר מניות מוכרות ושלוש קרנות סל ETF רחבות־שוק, ולא מכלל פעילות המסחר בשוק. לכן יש להתמקד בצורה של ההתפלגות ולא בספרה העשרונית האחרונה.
מה נחשב ליחס put/call גבוה?
אחוזון עונה על שאלה שרמה יחידה אינה יכולה לענות עליה. העקומה שלהלן כוללת את כל ימי המסחר מינואר 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
)בסל המניות הבודדות, יום המסחר החציוני הסתכם ב־0.67 אופציות put לכל אופציית call. העשירון העליון של ימי המסחר התחיל ב־0.89, והאחוזון הקיצוני ביותר חצה את 1.34. גם הקצה השקט של ההתפלגות שימושי לכיול: יום מסחר אחד מכל עשרים הסתיים ברמה של 0.48 או פחות.
עמודת ה־ETF מציגה התפלגות שונה בכל נקודה על העקומה. בקריאה החציונית שלה נרשם 1.45, מעל קו היחס של one-to-one שהחציון של סל המניות הבודדות נמצא הרבה מתחתיו, והעשירון העליון שלה התחיל ב־1.77. יחס שמוצג בלי לציין לאיזה ספר הוא מתייחס כמעט חסר משמעות. אותה עסקה שבוצעה ביחס של 1.15 משקפת שני דברים שונים, בהתאם לעמודה שבה היא מופיעה.
מדוע יחס של מדד מעל one הוא תקין, ואילו יחס של מניה מעל one אינו תקין
פיצול אותו היקף מסחר לפי נכס הבסיס מפריד בין הרמות באופן ברור.
ה-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בשבעת החודשים הראשונים של 2026, IWM ניצב בראש הטבלה עם 2.73 אופציות Put לכל אופציית Call, וסיים מעל one ב-98.6% מתוך 144 ימי המסחר שלו. בתחתית, XOM נסחר ביחס של 0.38, שהיה מעל one ב-2.8% מימי המסחר.
הפער מבני. אופציות על ETF של שוק רחב הן המקום שבו מתבצע גידור התיקים: מנהל המחזיק two hundred פוזיציות רוכש אופציות Put על המדד, במקום לרכוש אופציות Put על כל אחת מההחזקות. לתזרים הזה אין עסקת Call מקבילה לצדו. היקף המסחר באופציות על מניות בודדות נוטה לכיוון ההפוך: רכישת אופציות Call לצורך חשיפה לעלייה, וכתיבת אופציות Call כנגד מניות שכבר מוחזקות. יחס “כולל” משלב את שני ספרי הפקודות, ולכן הוא נמצא ביניהם ומשתנה לפי תמהיל המוצרים באותו יום לא פחות מאשר לפי סנטימנט השוק.
חשוב להכיר שינוי נוסף ברמות היחס. חלק גדול מהמסחר במדדים וב-ETF מתבצע כיום באופציות הפוקעות באותו יום (אופציות 0DTE), קטגוריה שלא נסחרה בהיקפים דומים בתקופה שבה נקבעו ספי הייחוס המוכרים. אי אפשר להחיל את הרמות הישנות על שוק בעל הרכב שונה.
האם יחס put/call גבוה הוא סימן חיובי? מה קרה לאחר קריאות קיצוניות
הטענה המנוגדת ניתנת לבדיקה. מחלקים כל יום מסחר לחמישונים לפי יחס המניות של אותו יום, ואז מודדים כיצד מדד המעקב אחר S&P 500 השתנה במהלך חמשת ימי המסחר ו-20 ימי המסחר הבאים.
ה-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החמישון הרגוע ביותר של ימי המסחר מתחיל ב-0.34, והחמישון העמוס ביותר מתחיל ב-0.81. לכן, הרצועה העליונה כוללת כל קריאה שסוחר הפועל בגישה מנוגדת היה מגדיר כקיצונית. במהלך 226 ימי המסחר האלה, השינוי החציוני לאורך 20 ימי מסחר היה 3%, לעומת 0.91% לאחר החמישון הרגוע ביותר. לאחר חמישה ימי מסחר, שתי הרצועות האלה הציגו 0.82% ו-0.3%.
החציונים מסתירים את החלק החשוב. בתוך החמישון העליון, המחצית האמצעית של התוצאות לאורך 20 ימי מסחר נעה בין -1.82% ל-5.71%. בתוך החמישון הרגוע ביותר, המחצית האמצעית נעה בין -0.83% ל-2.67%. שני הטווחים חופפים במידה רבה. הרצועה שאליה משתייך יום מסחר מזיזה את מרכז ההתפלגות, אך כמעט שאינה מצמצמת את הטווח סביב המרכז הזה. זהו החלק שכלל אצבע משמיט.
הסתייגות אחת נוגעת למשקל התצפיות. התקופה מינואר 2022 עד יולי 2026 כוללת שוק דובי אחד ואת ההתאוששות שבאה אחריו, ובערך 226 ימי מסחר בכל רצועה. זהו מדגם ממשי, אך הוא מייצג פרק זמן אחד בלבד בתולדות השוק.
האם קריאות קיצוניות מתקבצות בשפל השוק?
הן מתקבצות בחודשים יורדים, וזו טענה שונה. קבצו כל חודש מאז 2022 לפי האופן שבו המדד נע בתוכו, ואז ספרו כמה מקריאות ה-put/call בעשירון העליון נפלו בכל קבוצה.
ה-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בחודשים שבהם המדד סיים בירידה של 3% או יותר נרשמו בממוצע 4.2 קריאות בעשירון העליון בכל חודש, לעומת 1.9 בחודשים שבהם עלה ב-3% או יותר. החציון של הקריאות היומיות בכל קבוצה מופיע בעמודה האחרונה: 0.75 בקבוצה הגרועה ביותר ו-0.62 בקבוצה הטובה ביותר. בשני קצות הטבלה נמצאים 12 ו-22 חודשים.
קריאות put/call קיצוניות ומחירים יורדים מופיעים יחד. זו הופעה משותפת, והנתונים העתידיים בחלק הקודם הם המדד לערכה. היחס הוא מדידה של נתוני המסחר באותו יום, ולכן השיאים שלו מופיעים בתוך ירידות ולא לפניהן. השפל הוא תווית שמוצמדת בדיעבד.
קריאת רמה ביחס להתפלגות
שתי מסקנות נובעות מהנתונים לעיל.
ראשית, יש להשוות בין נתונים בני-השוואה. נתון מקבל משמעות רק ביחס להיסטוריה של אותו מדד עצמו ובחלון זמן דומה. בדיוק לכך משמשת טבלת אחוזונים, בניגוד לסף שנזכר בעל-פה.
שנית, יש לעקוב אחר המכנה. היחס יורד כאשר מחזור המסחר באופציות Call מזנק, גם אם היקף רכישות אופציות Put אינו משתנה. ירידה ביחס וזינוק בו יכולים לנבוע כל אחד מתנועה של צד אחד בלבד בשבר. לכן, קריאה נפרדת של היקף אופציות Put ושל היקף אופציות Call משאירה את החישוב גלוי.
אותה משמעת נדרשת ביחס לכל מדד סנטימנט שמוצג כמספר בודד. ה-VIX ו-נתון של 30% בתנודתיות הגלומה אינם ניתנים לפרשנות ללא ההתפלגויות שלהם, ו-כללי סנטימנט קונטרריאניים עומדים במבחן הנתונים רק כאשר רמת הייחוס נמדדת ולא מונחת מראש.
שאלות נפוצות
האם יחס put/call גבוה הוא סימן חיובי?
הפרשנות הקונטרריאנית רואה ברכישות בהיקף גדול של אופציות put עדות לכך שהציבור כבר ממוקם לירידות. בהשוואה לסל המניות הבודדות שלעיל, ימים שהיו בחמישון העליון של המדידות שלהם היו אחריהם תנועה חציונית של 3% במשך 20 ימי מסחר ב- S&P 500 tracker, לעומת 0.91% לאחר החמישון הרגוע ביותר. מחצית התוצאות המרכזית בחמישון העליון נעה בין -1.82% ל-5.71%.
מהו יחס put/call רגיל?
הדבר תלוי לחלוטין באילו אופציות נכללות בחישוב. בסל של עשר מניות מוכרות, היחס החציוני בכל יום מסחר בין 2022 ליולי 2026 עמד על 0.67 אופציות put לכל אופציית call. בשלוש קרנות ETF רחבות על השוק, באותם ימי מסחר, היחס החציוני עמד על 1.45.
מדוע יחס put/call במדד גבוה מיחס put/call במניות?
אופציות על מדדים רחבים ועל ETF הן כלי מקובל לגידור תיקי השקעות. משקיע שמבצע גידור באמצעות רכישת אופציות put על מדד אינו מבצע לצדה עסקת call תואמת. במחזורי המסחר במניות בודדות יש משקל גדול יותר לרכישת אופציות call לצורך חשיפה לעליות ולמכירת אופציות call כנגד מניות שכבר מוחזקות. לכן היחס בספר זה נמוך יותר.
האם יחס put/call מתאים לתזמון השוק?
המדידה שלעיל מציגה את התפלגות התוצאות לאחר כל חמישון של מדידות. הפערים בתוך כל אחת מהרצועות רחבים בהרבה מהמרחק בין החציונים של הרצועות. מדידות בחמישון העליון מרוכזות גם בחודשים שבהם המדד סיים בירידה, בשיעור של 4.2 לחודש בקבוצה הגרועה ביותר.
מה ההבדל בין יחס put/call לפי מחזור מסחר לבין יחס לפי open interest?
יחס לפי מחזור מסחר סופר את החוזים שנסחרו במהלך יום המסחר. לכן הוא מתאפס מדי יום ומגיב במהירות. יחס לפי open interest סופר את הפוזיציות שעדיין פתוחות. נתון זה משתנה באיטיות ונמצא ברמה משלו. שני היחסים אינם ניתנים להחלפה, וסף שנלקח מאחד מהם עלול להוביל לפרשנות שגויה של האחר.
כיצד מחושבים הנתונים האלה
- מקור הנתונים: שורה אחת לכל חוזה אופציות בכל יום מסחר, הכוללת את מחזור המסחר של החוזה באותו יום. אופציות put ואופציות call מופרדות לפי קוד החוזה של OCC: שמונת התווים האחרונים הם מחיר המימוש, והתווית שלפניהם היא C עבור אופציית call ו-P עבור אופציית put. מתחת לכל חלונית אפשר לפתוח את שאילתת SQL ולראות את הטבלה ואת המסננים המדויקים.
- כל יחס בעמוד זה הוא יחס לפי מחזור מסחר. open interest אינו נכלל בחישוב, ולכן אף אחד מהנתונים כאן אינו יחס לפי open interest.
- לא הוחל מסנן איכות לפי סטיית תקן גלומה. חוזים נכללים לפי מחזור המסחר בלבד, משום שהחלוניות האלה סופרות פעילות מסחר ולא מודדות תנודתיות.
- הסל כולל את AAPL, MSFT, NVDA, AMZN, META, TSLA, GOOGL, JPM, KO ו-XOM בסל המניות הבודדות, וכן את SPY, QQQ ו-IWM בסל המדדים וה-ETF. יחסים שמפרסמות הבורסות מכסים את השוק כולו וכוללים מוצרי מדדים כגון SPX, ולכן הרמות שלהם שונות.
- מחירי המדד הם מחיר העסקה האחרון בשעות המסחר הרגילות בכל יום עבור המוצר העוקב אחר S&P 500. תשואות קדימה אינן כוללות את 20 ימי המסחר האחרונים במדגם, משום שעדיין אין עבורם תקופת עתיד של 20 ימי מסחר. התנועות החודשיות מחושבות משער הסגירה של יום המסחר הראשון לשער הסגירה של יום המסחר האחרון בכל חודש.
כל חלונית שלעיל נפתחת ומציגה את שאילתת ה-SQL שמאחוריה. אותן שאילתות אחוזונים פועלות מול כל נכס בסיס שאחריו אתם עוקבים בטרמינל של Strasmore.