असामान्य options activity: पिछला ट्रेडिंग सत्र
असामान्य options activity की विस्तृत रिपोर्ट देखें। हम उन स्टॉक्स की पहचान करते हैं जिनका वॉल्यूम उनके बीस सत्रों के औसत से अधिक रहा और कॉल तथा पुट का विभाजन कैसे हुआ।
7.4
असामान्य options activity का अर्थ है कि किसी underlying में एक सत्र के दौरान उसके हालिया सामान्य स्तर की तुलना में कहीं अधिक option contracts का ट्रेड होना। यह बोर्ड पिछले पूर्ण हुए options सत्र के लिए इसे रैंक करता है, Sep 3: कुल ट्रेड किए गए contracts की तुलना पिछले बीस सत्रों के औसत से की गई है। Options tape, equity tape के बाद सेटल होता है, इसलिए यहाँ नामित सत्र हमारे डेटा में आज के बजाय सबसे नया पूर्ण सत्र है।
तालिका से पहले एक बात स्पष्ट करना आवश्यक है: यह एक volume स्क्रीन है। प्रकाशित होने वाले अधिकांश असामान्य-options अलर्ट दिन के volume की तुलना open interest से करते हैं, जो कि क्लोजिंग के बाद बकाया contracts की संख्या है। हमारे द्वारा स्टोर किए गए options tape में ट्रेड्स होते हैं, न कि पोजीशन्स, और इसमें open interest का कोई फील्ड नहीं होता है। नीचे दिया गया प्रत्येक अनुपात एक underlying के volume की तुलना उसके अपने volume इतिहास से करता है। Options volume बनाम open interest इस बात को कवर करता है कि प्रत्येक माप क्या उत्तर देता है।
असामान्य ऑप्शंस गतिविधि: पिछला पूर्ण सत्र
| टिकर | वॉल्यूम अनुपात | सत्र वॉल्यूम (k) | बेसलाइन वॉल्यूम (k) | पूर्व उच्च वॉल्यूम (k) | सत्र लेबल | सत्र ID | बेसलाइन सत्र संख्या |
|---|---|---|---|---|---|---|---|
| DPRO | 27.9 | 204.9 | 7.4 | 96.4 | Sep 3 | 20260903 | 20 |
| IOT | 9.1 | 45.9 | 5 | 16.6 | Sep 3 | 20260903 | 20 |
| ZS | 7.5 | 123.7 | 16.5 | 29.6 | Sep 3 | 20260903 | 20 |
| DOCU | 7 | 59 | 8.4 | 21.2 | Sep 3 | 20260903 | 20 |
| SNOW | 7 | 274.5 | 39 | 184.7 | Sep 3 | 20260903 | 20 |
| VFC | 6.3 | 48.9 | 7.8 | 16.2 | Sep 3 | 20260903 | 20 |
| CPB | 5.9 | 47.2 | 8 | 48.7 | Sep 3 | 20260903 | 20 |
| LULU | 5.4 | 153.1 | 28.3 | 47 | Sep 3 | 20260903 | 20 |
| PL | 5.1 | 92.8 | 18.2 | 35.9 | Sep 3 | 20260903 | 20 |
| HPE | 4.6 | 254.4 | 55.2 | 213.3 | Sep 3 | 20260903 | 20 |
हर आंकड़े के पीछे का पूरा SQL
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
day_root AS (
SELECT substring(ticker, 3, length(ticker) - 17) AS root,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY root, d
),
scored AS (
SELECT r.root AS root,
sumIf(r.vol, c.rn = 1) AS last_vol,
avgIf(r.vol, c.rn BETWEEN 2 AND 21) AS base_vol,
maxIf(r.vol, c.rn BETWEEN 2 AND 21) AS prior_high,
countIf(c.rn BETWEEN 2 AND 21) AS root_sessions,
max(c.baseline_sessions) AS baseline_session_count,
maxIf(toYYYYMMDD(c.d), c.rn = 1) AS session_id,
maxIf(formatDateTime(c.d, '%b %e'), c.rn = 1) AS session_label
FROM day_root r INNER JOIN cal c ON r.d = c.d
WHERE c.rn <= 21
AND r.root NOT IN ('SPCX')
AND r.root NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
GROUP BY r.root
HAVING last_vol >= 25000 AND base_vol >= 5000 AND root_sessions >= 18
)
SELECT root AS ticker,
round(last_vol / base_vol, 1) AS vol_ratio,
round(last_vol / 1000, 1) AS session_volume_k,
round(base_vol / 1000, 1) AS baseline_volume_k,
round(prior_high / 1000, 1) AS prior_high_volume_k,
session_label,
session_id,
baseline_session_count
FROM scored
ORDER BY vol_ratio DESC, ticker ASC
LIMIT 10तीन कॉलम इस रीडिंग को दर्शाते हैं। अनुपात यह बताता है कि अंतर्निहित एसेट (underlying) ने अपने सामान्य स्तर से कितना अधिक ट्रेड किया। बेसलाइन यह बताती है कि सामान्य स्तर क्या था, और एक कम वॉल्यूम वाली चेन पर बड़ा मल्टीपल, एक व्यस्त चेन पर मामूली मल्टीपल की तुलना में छोटा इवेंट होता है। 20-सत्र का उच्च स्तर यह बताता है कि क्या सत्र ने पिछले महीने के किसी भी आंकड़े को पीछे छोड़ा है। अंतिम तीन कॉलम ऑडिट ट्रेल हैं: वह सत्र जिससे बोर्ड तैयार किया गया है, जिसे एक लेबल और एक साधारण संख्या के रूप में प्रिंट किया गया है, साथ ही बेसलाइन के पीछे खड़े पात्र सत्रों की संख्या, जिसे प्रकाशित होने के लिए बीस तक पहुंचना आवश्यक है।
DPRO बोर्ड में शीर्ष पर है, जो अपने औसत के 27.9 गुना पर है: 204.9 हजार कॉन्ट्रैक्ट्स, जबकि बेसलाइन 7.4 हजार की है, और पिछला 20-सत्र का उच्च स्तर 96.4 हजार था।
- IOT 9.1 गुना पर: 45.9 हजार कॉन्ट्रैक्ट्स, जबकि बेसलाइन 5 हजार की है।
- ZS 7.5 गुना पर, 123.7 हजार कॉन्ट्रैक्ट्स, 16.5 हजार की बेसलाइन पर।
- DOCU 7 गुना पर, 59 हजार कॉन्ट्रैक्ट्स, जबकि 20-सत्र का उच्च स्तर 21.2 हजार था।
- SNOW 7 गुना पर, 274.5 हजार कॉन्ट्रैक्ट्स के साथ।
बोर्ड की अंतिम पंक्ति, HPE, ने अभी भी अपने औसत के 4.6 गुना ट्रेड किया। मल्टीपल और आकार अलग-अलग रीडिंग हैं, इसीलिए दोनों बोर्ड पर मौजूद हैं। इसी विचार का शेयर-बाजार संस्करण इस सप्ताह असामान्य वॉल्यूम वाले स्टॉक्स पर उपलब्ध है, और गणना की प्रक्रिया सापेक्ष वॉल्यूम में समझाई गई है।
कॉल या पुट: टेप का पक्ष
कॉल और पुट वॉल्यूम के बीच का विभाजन ही वह मुख्य बिंदु है जिसकी ओर कोई अलर्ट संकेत करता है। एक ही बोर्ड, एक ही सत्र, कॉल शेयर के आधार पर क्रमबद्ध:
| टिकर | कॉल वॉल्यूम (k) | पुट वॉल्यूम (k) | कॉल शेयर (%) | सत्र ID |
|---|---|---|---|---|
| DPRO | 201.1 | 3.8 | 98 | 20260903 |
| IOT | 36 | 9.9 | 78 | 20260903 |
| HPE | 182.3 | 72.1 | 72 | 20260903 |
| PL | 57.3 | 35.5 | 62 | 20260903 |
| SNOW | 163.6 | 110.9 | 60 | 20260903 |
| ZS | 73.7 | 49.9 | 60 | 20260903 |
| CPB | 25.8 | 21.4 | 55 | 20260903 |
| DOCU | 31 | 28 | 53 | 20260903 |
| LULU | 72.7 | 80.4 | 47 | 20260903 |
| VFC | 5.5 | 43.4 | 11 | 20260903 |
हर आंकड़े के पीछे का पूरा SQL
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
day_root AS (
SELECT substring(ticker, 3, length(ticker) - 17) AS root,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C') AS calls,
sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P') AS puts
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY root, d
),
scored AS (
SELECT r.root AS root,
round(sumIf(r.vol, c.rn = 1) / avgIf(r.vol, c.rn BETWEEN 2 AND 21), 1) AS vol_ratio,
sumIf(r.calls, c.rn = 1) AS calls,
sumIf(r.puts, c.rn = 1) AS puts,
maxIf(toYYYYMMDD(c.d), c.rn = 1) AS session_id
FROM day_root r INNER JOIN cal c ON r.d = c.d
WHERE c.rn <= 21
AND r.root NOT IN ('SPCX')
AND r.root NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
GROUP BY r.root
HAVING sumIf(r.vol, c.rn = 1) >= 25000
AND avgIf(r.vol, c.rn BETWEEN 2 AND 21) >= 5000
AND countIf(c.rn BETWEEN 2 AND 21) >= 18
),
board AS (
SELECT root, vol_ratio, calls, puts, session_id
FROM scored
ORDER BY vol_ratio DESC, root ASC
LIMIT 10
)
SELECT root AS ticker,
round(calls / 1000, 1) AS call_volume_k,
round(puts / 1000, 1) AS put_volume_k,
round(100.0 * calls / (calls + puts), 0) AS call_share_pct,
session_id
FROM board
WHERE calls + puts > 0
ORDER BY call_share_pct DESC, ticker ASCकॉल-प्रधान छोर पर, DPRO ने अपने 98% अनुबंध कॉल में रखे: 201.1 हजार कॉल बनाम 3.8 हजार पुट। उसी तालिका के दूसरे छोर पर, VFC ने 11% कॉल चलाए, 5.5 हजार कॉल बनाम 43.4 हजार पुट।
यह विभाजन पढ़ने योग्य है और इसे जरूरत से ज्यादा महत्व देना आसान है। प्रत्येक निष्पादित अनुबंध में एक खरीदार और एक विक्रेता होता है, और टेप यह दर्ज नहीं करता कि किस पक्ष ने शुरुआत की। भारी कॉल वॉल्यूम एक स्पष्ट लॉन्ग पोजीशन हो सकता है या फिर पहले से स्वामित्व वाले शेयरों के विरुद्ध लिखा गया कवर्ड कॉल। कॉल ऑप्शन खरीदना और बेचना इस बात का विवरण देता है कि ट्रेड का प्रत्येक पक्ष क्या जोखिम उठाता है। जहाँ टेप में हलचल अधिक होती है, वहाँ ऑप्शन की कीमतें भी आमतौर पर अधिक होती हैं, जो उच्चतम इंप्लाइड वोलैटिलिटी वाले स्टॉक बोर्ड का विषय है।
सत्र के कॉन्ट्रैक्ट्स की संरचना
| DTE बकेट | अनुबंध (m) | वॉल्यूम का % | सत्र ID |
|---|---|---|---|
| same day | 18 | 25 | 20260903 |
| 1 to 7 days | 22.59 | 31.4 | 20260903 |
| 8 to 30 days | 17.1 | 23.7 | 20260903 |
| 31 to 90 days | 7.52 | 10.4 | 20260903 |
| 91 to 365 days | 5.51 | 7.7 | 20260903 |
| over a year | 1.29 | 1.8 | 20260903 |
हर आंकड़े के पीछे का पूरा SQL
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
bars AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toFloat64(volume) AS v,
toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-',
substring(ticker, length(ticker) - 12, 2), '-',
substring(ticker, length(ticker) - 10, 2))) AS expiry
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 12, 'America/New_York')
AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM cal WHERE rn = 1)
),
scored AS (
SELECT multiIf(expiry - d <= 0, 1, expiry - d <= 7, 2, expiry - d <= 30, 3,
expiry - d <= 90, 4, expiry - d <= 365, 5, 6) AS bk,
v, d
FROM bars
)
SELECT arrayElement(['same day', '1 to 7 days', '8 to 30 days', '31 to 90 days', '91 to 365 days', 'over a year'], bk) AS dte_bucket,
round(sum(v) / 1e6, 2) AS contracts_m,
round(100.0 * sum(v) / sum(sum(v)) OVER (), 1) AS pct_of_volume,
toYYYYMMDD(max(d)) AS session_id
FROM scored
GROUP BY bk
ORDER BY bk ASCसमान-दिवसीय (same-day) एक्सपायरी वाले कॉन्ट्रैक्ट्स का हिस्सा पूरे सत्र का 25% रहा, जो 18 मिलियन कॉन्ट्रैक्ट्स के बराबर है। अन्य 31.4% कॉन्ट्रैक्ट्स एक सप्ताह के भीतर समाप्त हो गए। दूसरी ओर, एक वर्ष से अधिक की अवधि वाले कॉन्ट्रैक्ट्स का हिस्सा 1.8% रहा।
यह मिश्रण इस बात को बदल देता है कि असामान्य गतिविधि (unusual-activity) की हेडलाइन को कैसे पढ़ा जाना चाहिए। इस तरह के बोर्ड पर अधिकांश वॉल्यूम अल्पकालिक (short-dated) होता है, और समान-दिवसीय कॉन्ट्रैक्ट क्लोजिंग बेल तक सेटल हो जाते हैं, न कि उन्हें आगे ले जाया जाता है। 0DTE options चेन के उस हिस्से को कवर करते हैं।
क्या यह एक एक्सपायरी सत्र था?
मासिक एक्सपायरी के दिन पूरे बाजार में options का वॉल्यूम बढ़ जाता है, क्योंकि उस समय सूचीबद्ध कॉन्ट्रैक्ट्स का सबसे बड़ा हिस्सा एक साथ समाप्त होता है। एक्सपायरी के दिन चलाया गया रेशियो स्क्रीन बाजार के आधे हिस्से को चिह्नित करता है, इसलिए नीचे दिया गया पैनल विंडो में प्रत्येक सत्र को लेबल करता है।
| सत्र | अनुबंध (m) | सत्र प्रकार | मासिक समाप्ति (m) | सत्र ID |
|---|---|---|---|---|
| Jul 31 | 75.5 | ordinary | 75.1 | 20260731 |
| Aug 3 | 72.7 | ordinary | 75.1 | 20260803 |
| Aug 4 | 78.9 | ordinary | 75.1 | 20260804 |
| Aug 5 | 69.5 | ordinary | 75.1 | 20260805 |
| Aug 6 | 63.2 | ordinary | 75.1 | 20260806 |
| Aug 7 | 73.2 | ordinary | 75.1 | 20260807 |
| Aug 10 | 61.4 | ordinary | 75.1 | 20260810 |
| Aug 11 | 54.6 | ordinary | 75.1 | 20260811 |
| Aug 12 | 55.4 | ordinary | 75.1 | 20260812 |
| Aug 13 | 66.6 | ordinary | 75.1 | 20260813 |
| Aug 14 | 66 | ordinary | 75.1 | 20260814 |
| Aug 17 | 60.9 | ordinary | 75.1 | 20260817 |
| Aug 18 | 56.9 | ordinary | 75.1 | 20260818 |
| Aug 19 | 67.2 | ordinary | 75.1 | 20260819 |
| Aug 20 | 64.9 | ordinary | 75.1 | 20260820 |
| Aug 21 | 75.1 | monthly expiration | 75.1 | 20260821 |
| Aug 24 | 61 | ordinary | 75.1 | 20260824 |
| Aug 25 | 52.8 | ordinary | 75.1 | 20260825 |
| Aug 26 | 49.4 | ordinary | 75.1 | 20260826 |
| Aug 27 | 66.1 | ordinary | 75.1 | 20260827 |
हर आंकड़े के पीछे का पूरा SQL
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
w AS (
SELECT d, vol,
toStartOfMonth(d) + toIntervalDay(((5 - toDayOfWeek(toStartOfMonth(d)) + 7) % 7) + 14) AS third_friday
FROM cal
WHERE rn <= 25
),
marked AS (
SELECT d, vol,
(d = max(if(d <= third_friday, d, toDate('1970-01-01'))) OVER (PARTITION BY toStartOfMonth(d)))
AND (third_friday <= max(d) OVER ()) AS is_expiry
FROM w
),
latest AS (
SELECT d, vol, is_expiry,
max(if(is_expiry, d, toDate('1970-01-01'))) OVER () AS last_expiry_d
FROM marked
)
SELECT formatDateTime(d, '%b %e') AS session,
round(vol / 1e6, 1) AS contracts_m,
multiIf(is_expiry, 'monthly expiration', 'ordinary') AS session_type,
round(max(if(d = last_expiry_d, vol, 0)) OVER () / 1e6, 1) AS monthly_expiry_m,
toYYYYMMDD(d) AS session_id
FROM latest
ORDER BY d ASCइस पैनल में सबसे नया सत्र वह है जिसे बोर्ड रिपोर्ट करता है, जो दोनों तालिकाओं में समान तारीख है, और इसका लेबल ordinary है। इसने पूरे US टेप पर 72 मिलियन कॉन्ट्रैक्ट्स प्रिंट किए। उसी विंडो के भीतर सबसे हालिया मासिक एक्सपायरी ने 75.1 मिलियन प्रिंट किए। बोर्ड पर प्रत्येक रेशियो के पीछे के बीस-सत्रीय बेसलाइन में सामान्यतः ठीक एक मासिक एक्सपायरी शामिल होती है, इसलिए हर सत्र में हर (denominator) में वही भारी वॉल्यूम शामिल रहता है। एक्सपायरी एक स्ट्राइक-स्तर का प्रश्न भी उठाती है जिसका उत्तर यह वॉल्यूम स्क्रीन नहीं दे सकती: मैक्स पेन यह पता लगाता है कि कॉन्ट्रैक्ट्स के सेटल होने पर कौन सी स्ट्राइक ऑप्शन धारकों को सबसे कम लाभ देती है, और इसकी गणना यहां मापे गए ट्रेडेड वॉल्यूम के बजाय ओपन इंटरेस्ट से की जाती है।
क्या असामान्य options गतिविधि स्टॉक की दिशा तय करती है?
यह प्रश्न महत्वपूर्ण है कि क्या भारी options सत्र के बाद अंतर्निहित स्टॉक में बड़ी हलचल होती है। पिछले दो सौ दिनों के आंकड़ों का विश्लेषण किया गया: प्रत्येक नाम-सत्र जिसने समान वॉल्यूम सीमा को पार किया, उसे उसके अनुपात के अनुसार वर्गीकृत किया गया और अगले सत्र में अंतर्निहित स्टॉक के क्लोजिंग मूल्य में हुए पूर्ण परिवर्तन के साथ मिलान किया गया। विशिष्ट कॉलम प्रत्येक नाम का उस समयावधि में अपना माध्य दैनिक परिवर्तन है, ताकि प्रत्येक बकेट की तुलना स्वयं से की जा सके।
| RVol बकेट | इवेंट संख्या | माध्य अगला मूव (%) | माध्य सामान्य मूव (%) | गैप (pp) | माध्य अगला हस्ताक्षरित (%) |
|---|---|---|---|---|---|
| 5x or more | 624 | 2.51 | 1.96 | 0.55 | -0.16 |
| 3x to 5x | 1212 | 2.35 | 2.15 | 0.2 | -0.21 |
| 2x to 3x | 1852 | 2.28 | 2.21 | 0.07 | -0.22 |
| 1x to 2x | 8380 | 1.98 | 2.23 | -0.25 | -0.05 |
| below 1x | 11559 | 1.89 | 2.06 | -0.17 | -0.01 |
हर आंकड़े के पीछे का पूरा SQL
WITH daily AS (
SELECT underlying_symbol AS sym,
date AS d,
sum(volume) AS vol,
max(underlying_close) AS px
FROM global_markets.options_greeks
WHERE date >= today() - 200
AND underlying_close > 0
AND underlying_symbol NOT IN ('SPCX')
AND underlying_symbol NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
AND underlying_symbol NOT IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date BETWEEN today() - 230 AND today())
GROUP BY sym, d
),
seq AS (
SELECT sym, d, vol, px,
avg(vol) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS base,
count() OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS base_n,
any(px) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_px,
any(px) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
FROM daily
),
moves AS (
SELECT sym, vol, base, base_n,
if(next_px > 0, 100 * abs(next_px / px - 1), -1) AS next_abs,
if(next_px > 0, 100 * (next_px / px - 1), -999) AS next_signed,
if(prev_px > 0, 100 * abs(px / prev_px - 1), -1) AS own_abs
FROM seq
),
typical AS (
SELECT sym, quantileExact(0.5)(own_abs) AS typ
FROM moves
WHERE own_abs >= 0
GROUP BY sym
)
SELECT arrayElement(['5x or more', '3x to 5x', '2x to 3x', '1x to 2x', 'below 1x'], bk) AS rvol_bucket,
count() AS event_count,
round(quantileExact(0.5)(next_abs), 2) AS median_next_move_pct,
round(quantileExact(0.5)(typ), 2) AS median_typical_move_pct,
round(quantileExact(0.5)(next_abs) - quantileExact(0.5)(typ), 2) AS gap_pp,
round(quantileExact(0.5)(next_signed), 2) AS median_next_signed_pct
FROM (
SELECT m.sym AS sym,
multiIf(m.vol / m.base >= 5, 1, m.vol / m.base >= 3, 2, m.vol / m.base >= 2, 3,
m.vol / m.base >= 1, 4, 5) AS bk,
m.next_abs AS next_abs,
m.next_signed AS next_signed,
t.typ AS typ
FROM moves m INNER JOIN typical t ON m.sym = t.sym
WHERE m.base_n = 20 AND m.base >= 5000 AND m.vol >= 25000 AND m.next_abs >= 0
)
GROUP BY bk
ORDER BY bk ASCअपने स्वयं के बेसलाइन से पांच गुना या अधिक के सत्र के बाद, अगले सत्र में माध्य पूर्ण परिवर्तन 2.51% था, जबकि सामान्य दिनों में उन्हीं नामों के लिए यह 1.96% था, जो कि 0.55 प्रतिशत अंकों का अंतर है। तालिका के शांत छोर पर, दोनों कॉलम 1.89% और 2.06% दर्शाते हैं, जो कि -0.17 अंकों का अंतर है।
इसका स्पष्ट उत्तर यह है कि प्रभाव छोटा है, और यह दिशा के बजाय आकार के बारे में अधिक है। भारी options सत्रों के बाद पूर्ण रूप से थोड़ी बड़ी हलचल होती है, और माध्य पर यह अंतर एक प्रतिशत के एक अंश के बराबर है। पांच गुना वाले दिन के बाद सत्र में माध्य हस्ताक्षरित परिवर्तन -0.16% था, और बेसलाइन से नीचे वाले दिन के बाद यह -0.01% था। यह हलचल वैसी नहीं है जैसा कि कोई चेतावनीपूर्ण हेडलाइन संकेत देती है। दुर्लभता को भी ध्यान में रखना आवश्यक है: अध्ययन की अवधि के दौरान 624 नाम-सत्रों ने अपनी बेसलाइन से पांच गुना अधिक वॉल्यूम दर्ज किया, जबकि 11559 सत्रों में ट्रेडिंग इससे नीचे रही।
इस स्क्रीन का मापन कैसे किया जाता है
एक स्क्रीन जिसमें छिपे हुए नियम डेटा के रूप में पढ़ाए जाते हैं, वास्तव में एक राय है, इसलिए प्रत्येक नियम यहाँ दिया गया है।
- स्रोत। पूर्ण US ऑप्शंस मिनट टेप। अंतर्निहित (underlying) को प्रत्येक कॉन्ट्रैक्ट के OCC सिंबल से अलग किया जाता है, इसलिए इंडेक्स ऑप्शन रूट्स और उसी दिन समाप्त होने वाली एक्सपायरी, दोनों को सामान्य स्टॉक और फंड चेन के साथ शामिल किया जाता है।
- अनुपात। पिछले पूर्ण सत्र का कुल कॉन्ट्रैक्ट वॉल्यूम, उसी अंतर्निहित के पिछले बीस पात्र सत्रों के औसत से विभाजित। उन बीस में से कम से कम अठारह सत्रों में वॉल्यूम होना आवश्यक है। बोर्ड विंडो की लंबाई को अपने स्वयं के कॉलम में प्रिंट करता है, और जो विंडो बीस से कम होती है, वह बीस-सत्र लेबल के तहत छोटा औसत प्रकाशित करने के बजाय पेज को होल्ड पर रखती है।
- न्यूनतम सीमा (Floors)। सत्र पर पच्चीस हजार कॉन्ट्रैक्ट और पांच हजार कॉन्ट्रैक्ट का बेसलाइन। इनके बिना, बोर्ड उन चेन्स से भर जाएगा जहाँ एक ऑर्डर दस गुना रीडिंग वाला होता है।
- सत्र पात्रता। इस पेज का प्रत्येक पैनल अपने सत्रों को उसी टेप की एक पैंतालीस-दिवसीय विंडो से पढ़ता है, एक नियम के तहत: एक सत्र तब गिना जाता है जब उसका बाजार-व्यापी वॉल्यूम उस विंडो के पुराने सत्रों के माध्यिका (median) का पचहत्तर प्रतिशत तक पहुँच जाता है। सबसे नए दिन को उस माध्यिका से बाहर रखा जाता है जिसे उसे पार करना है, ताकि आंशिक रूप से लोड हुआ दिन अपने स्वयं के बार को नीचे न खींच सके। टेप टुकड़ों में सामने आता है, और एक दिन जिसमें सामान्य सत्र का तीन-चौथाई से कम वॉल्यूम होता है, वह भरने तक बोर्ड से बाहर रहता है। प्रत्येक पैनल उस सत्र को प्रिंट करता है जिस पर वह आधारित है, ताकि चारों की तुलना एक-दूसरे से की जा सके।
- अपवर्जन (Exclusions)। लीवरेज्ड और इनवर्स फंड्स को नाम से हटा दिया जाता है: एक तीन गुना उत्पाद की चेन अपने मल्टीप्लायर के साथ चलती है और हर हफ्ते सूची में भीड़ बढ़ा देगी। एक पुन: उपयोग किए गए टिकर सिंबल को भी बाहर रखा गया है, क्योंकि वेंडर हिस्ट्री इसके तहत दो कंपनियों को जोड़ती है।
- कोई ओपन इंटरेस्ट नहीं। वेयरहाउस में कोई ओपन-इंटरेस्ट फील्ड नहीं है, इसलिए इस पेज पर कुछ भी वॉल्यूम की तुलना बकाया पोजीशन से नहीं करता है। जहाँ किसी प्रतियोगी की स्क्रीन कहती है कि वॉल्यूम ने ओपन इंटरेस्ट को पीछे छोड़ दिया, हमारी स्क्रीन कहती है कि वॉल्यूम ने अपने स्वयं के बीस-सत्र के औसत को पीछे छोड़ दिया है।
- एक्सपायरी के दिन। मासिक एक्सपायरी बाजार-व्यापी ऑप्शंस वॉल्यूम को बढ़ाती है। सत्र पैनल इस स्थिति को लेबल करता है, और एक्सपायरी सत्र पर निर्मित बोर्ड को अन्य एक्सपायरी सत्रों के मुकाबले पढ़ा जाना चाहिए।
फॉलो-थ्रू अध्ययन एक दूसरी तालिका का उपयोग करता है, जो दैनिक ऑप्शंस ग्रीक्स फाइल है, जिसमें एक स्पष्ट अंतर्निहित सिंबल और अंतर्निहित का क्लोजिंग मूल्य होता है। यह उसी दिन की एक्सपायरी और इंडेक्स ऑप्शंस को बाहर करता है और मिनट टेप की तुलना में कुछ सत्र बाद सेटल होता है, इसलिए इसका दायरा बोर्ड की तुलना में संकरा है। अध्ययन विंडो के भीतर स्टॉक स्प्लिट वाले नामों को हटा दिया जाता है, क्योंकि स्प्लिट एक बड़ी चाल का भ्रम पैदा करता है।
अक्सर पूछे जाने वाले प्रश्न
असामान्य options activity क्या है?
जब किसी underlying में एक सत्र के दौरान उसके हालिया औसत की तुलना में कहीं अधिक option contracts का कारोबार होता है। इस पेज पर, यह सीमा गणितीय है, न कि संपादकीय: सत्र का contract volume, उसी underlying के पिछले बीस सत्रों के औसत से विभाजित किया जाता है। इसके लिए सत्र में न्यूनतम पच्चीस हजार contracts और आधार रेखा (baseline) पर पांच हजार contracts की शर्त अनिवार्य है।
क्या असामान्य options activity शेयर की चाल का पूर्वानुमान लगाती है?
बहुत कम, और वह भी किसी निश्चित दिशा में नहीं। हमारे डेटा के पिछले दो सौ दिनों में, जिन सत्रों में volume अपनी baseline से पांच गुना अधिक था, उनमें अगले सत्र में शेयर की औसत निरपेक्ष चाल (median absolute move) 2.51% रही, जबकि सामान्य दिनों में यह 1.96% थी। उस अगले सत्र में median signed change -0.16% था, जिसका अर्थ है कि volume ने यह तो बताया कि शेयर में कितनी हलचल हुई, लेकिन यह बहुत कम संकेत दिया कि वह किस दिशा में गया।
options volume डेटा किस समय अपडेट किया जाता है?
सत्र के दौरान contract volume के prints consolidated options tape पर लाइव दिखाई देते हैं। इस पेज के पीछे का संग्रहित डेटा (stored tape) कुछ देरी के साथ अपडेट होता है, इसलिए यह बोर्ड चल रहे सत्र के बजाय सबसे हालिया पूर्ण सत्र की रिपोर्ट देता है और उस पर तारीख अंकित करता है। यहाँ कुछ भी real-time feed नहीं है।
यह असामान्य options activity स्कैनर open interest का उपयोग क्यों नहीं करता है?
Open interest का प्रकाशन clearinghouse द्वारा बाजार बंद होने के बाद किया जाता है, और हमारे पास मौजूद डेटा में open interest का कोई field नहीं है। किसी सत्र के volume की तुलना उसी underlying के अपने volume इतिहास से करना सीधे tape से मापा जा सकता है, और यह एक समान प्रश्न का उत्तर देता है: क्या यह chain सामान्य से अधिक व्यस्त है?
ऊपर दी गई प्रत्येक संख्या एक संग्रहित और versioned query है। माप का ऑडिट करने के लिए किसी भी पैनल के नीचे SQL खोलें, या Strasmore टर्मिनल पर अपनी पसंद की किसी भी विंडो पर यही स्क्रीन चलाएं।