نحوه محاسبه گاما اکسپوژر در داشبورد متنباز GEX
این مقاله به بررسی سازوکار محاسباتی داشبورد GEX، فرمولبندی گاما در هر استرایک، قراردادهای بازارگردانها و محدودیتهای تحلیل ریسک در بازارهای مالی میپردازد.
داشبورد GEX متنباز، یک اسنپشات از زنجیره اختیار را به پروفایل ریسک گاما تبدیل میکند: رقمی دلاری در هر استرایک که برآورد میکند تقاضای پوشش ریسک (hedging) برای یک حرکت یک درصدی در دارایی پایه چقدر تغییر میکند. محاسبات این مدل تنها در یک خط کد خلاصه میشود. فرض زیربنایی این مدل، یعنی اینکه بازارگردانها (dealers) تمام موقعیتهای خرید (long) در اختیار خرید و تمام موقعیتهای فروش (short) در اختیار فروش را در اختیار دارند، در هیچ کجای زنجیره اندازهگیری نمیشود و همین شکاف، منشأ اصلی اکثر برداشتهای نادرست از این عدد است. اگر آنچه گاما اکسپوژر اندازهگیری میکند را مطالعه کردهاید، پرسش بعدی این است که این رقم چگونه تولید میشود.
نحوه محاسبه Gamma Exposure چگونه است؟
با یک قرارداد واحد شروع کنید. گاما (Gamma) نرخی است که دلتای یک اختیار معامله به ازای هر 1 دلار تغییر در قیمت دارایی پایه، به ازای هر سهم تغییر میکند. یک اختیار معامله استاندارد سهام در ایالات متحده، 100 سهم را پوشش میدهد؛ بنابراین گامای قرارداد بر حسب سهم، حاصلضرب گامای نقلشده در این ضریب است.
یک داشبورد معاملاتی این مقدار را به دلار و درصد تغییر مقیاسبندی میکند. پنج مؤلفه در محاسبه رقم مربوط به هر Strike دخیل هستند:
gamma: گامای هر سهم برای قرارداد، که از اسنپشات زنجیره اختیارها خوانده شده یا بهصورت محلی از نوسان ضمنی (implied volatility) محاسبه میشود.open_interest: تعداد قراردادهای باز (outstanding) در آن Strike و تاریخ انقضا.100: ضریب قرارداد.spot * spot: تغییر دلتا را به تغییر ارزش اسمی (notional) به دلار در قیمت فعلی دارایی پایه تبدیل میکند.0.01: پاسخ را از تغییر 1 دلاری به تغییر 1 درصدی مقیاسبندی مجدد میکند.
رقم مربوط به هر Strike برابر است با gex = gamma * open_interest * 100 * spot * spot * 0.01. این مقدار را برای تمامی Strikeهای موجود در زنجیره جمع بزنید؛ بدین صورت که Callها را مثبت و Putها را منفی لحاظ کنید. مجموع نهایی، همان عدد اصلی (headline number) است. سایر نمودارهایی که داشبورد ترسیم میکند، از جمله میلههای مربوط به هر Strike، پروفایل تجمعی، سطح چرخش (flip level) و تفکیک بر اساس تاریخ انقضا، همگی بازآرایی همان یک مجموع واحد هستند.
پروفایل GEX به تفکیک هر استرایک (Strike) چگونه است؟
پنل زیر پروفایل SPY را برای تمامی استرایکهای موجود در محدوده 1.5 درصد قیمت پایانی دارایی پایه، برای قراردادهایی که طی 30 روز آینده منقضی میشوند، ترسیم میکند.
کد دقیق SQL پشت هر عدد
SELECT
concat('$', toString(round(k))) AS strike,
round(sumIf(gex, side = 'call') / 1e6, 1) AS call_gex_musd,
round(-sumIf(gex, side = 'put') / 1e6, 1) AS put_gex_musd,
round((sumIf(gex, side = 'call') - sumIf(gex, side = 'put')) / 1e6, 1) AS net_gex_musd,
any(snapshot_label) AS snapshot_label
FROM
(
SELECT
toFloat64(strike_price) AS k,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
toFloat64(gamma) * toFloat64(volume) * 100
* pow(toFloat64(underlying_close), 2) * 0.01 AS gex,
formatDateTime(date, '%b %e, %Y') AS snapshot_label
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = (SELECT max(date) FROM global_markets.options_greeks WHERE underlying_symbol = 'SPY')
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 30
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.015
)
GROUP BY k
ORDER BY kدر اینجا یک جایگزینی حائز اهمیت است؛ همان جایگزینی که بسیاری از داشبوردهای رایگان بدون ذکر آن انجام میدهند. دادههای پشتیبان این پنلها شامل یونانیها (Greeks) و حجم معاملات هر قرارداد است، نه سود باز (Open Interest)؛ بنابراین وزن هر استرایک بر اساس حجم قراردادهای معاملهشده در همان جلسه تعیین میشود. این دو شاخص موارد متفاوتی را اندازهگیری میکنند: حجم، تعداد معاملات روزانه را میشمارد و سود باز، تعداد موقعیتهای معاملاتی باقیمانده در پایان روز را نشان میدهد. شکل منحنی، نکته اصلی است و سطح آن با استفاده از ستون واقعی سود باز تغییر خواهد کرد. مطالعه کامل تفاوت این دو در حجم معاملات اختیار در برابر سود باز توصیه میشود.
این بازه شامل 23 استرایک است که از $758 تا $780 امتداد یافته و همگی در تاریخ Aug 6, 2026 اندازهگیری شدهاند. در پایینترین استرایکِ قابل مشاهده، خالصِ علامتدار (signed net) به -653.1 میلیون دلار به ازای هر 1 درصد حرکت میرسد. در بالاترین استرایک، این رقم 849.4 میلیون دلار است. توجه کنید که چگونه میلهها از یک استرایک به استرایک دیگر ناهمگون هستند. اعداد رُند و تاریخهای انقضای پرمعامله انباشته میشوند، در حالی که استرایکهای میان آنها بهسختی قابل مشاهده هستند.
آیا قرارداد علامتگذاری معاملهگر اندازهگیری میشود یا فرضشده؟
در زنجیره اختیار معامله هیچ دادهای ثبت نمیشود که نشان دهد چه کسی در کدام سمت قرارداد قرار دارد. این زنجیره تنها قیمتهای اعمال (strike)، تاریخهای انقضا، یونانیها و تعداد قراردادهای باز را گزارش میکند. زنجیره در مورد اینکه آیا بازارسازی که قیمتها را اعلام کرده در پایان روز در موقعیت خرید (long) بوده یا فروش (short)، سکوت میکند و هیچ منبع عمومی نیز این اطلاعات را تکمیل نمیکند.
ساختار استاندارد، این خلأ را با یک قرارداد (convention) پوشش میدهد: فرض بر این است که معاملهگران (dealers) در تمام اختیار خریدها (call) در موقعیت خرید و در تمام اختیار فروشها (put) در موقعیت فروش هستند. بنابراین، اختیار خریدها با علامت مثبت و اختیار فروشها با علامت منفی در محاسبات وارد میشوند. همین انتخاب واحد، علامت عدد نهایی را تعیین میکند و هر خوانشی که بر اساس این علامت ساخته شود، از آن تبعیت میکند. اگر این قرارداد را معکوس کنید، یک عدد گامای مثبت با دادههای یکسان، به عددی منفی تبدیل میشود.
این قرارداد منطقی دارد. جریان معاملات خرد معمولاً به سمت فروش اختیار خرید پوششدادهشده (covered call) و اختیار فروش با پشتوانه نقدی (cash-secured put) و همچنین خرید اختیار فروش بهعنوان پوشش ریسک متمایل است که معاملهگر را در سمت مقابل و تقریباً در همان جهتِ فرضشده قرار میدهد. با این حال، این همچنان یک فرض درباره مالکیت است که بهطور یکسان برای تمام قیمتهای اعمال اعمال میشود، حتی در مواردی که این فرض نادرست است؛ از جمله قیمت اعمالی که یک خریدار بزرگ نهادی بهتازگی در آن معاملهای انجام داده است. داشبوردی که این عدد را بدون ذکر قراردادِ مبنا چاپ میکند، مهمترین ورودی خود را پنهان کرده است.
گاما در سررسیدهای مختلف چگونه توزیع میشود؟
شاخص GEX بدون فیلتر سررسید، قراردادهایی که همین امروز منقضی میشوند را با قراردادهای سهماهه جمع کرده و مجموع آنها را بهعنوان یک کمیت واحد در نظر میگیرد. گاما در سررسیدهای نزدیک متمرکز است و این سررسیدها در هر جلسه معاملاتی تغییر میکنند.
کد دقیق SQL پشت هر عدد
SELECT
formatDateTime(expiry_date, '%b %e') AS expiry,
round(sumIf(gex, side = 'call') / 1e9, 2) AS call_gex_bn,
round(-sumIf(gex, side = 'put') / 1e9, 2) AS put_gex_bn,
round((sumIf(gex, side = 'call') - sumIf(gex, side = 'put')) / 1e9, 2) AS net_gex_bn
FROM
(
SELECT
expiration_date AS expiry_date,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
toFloat64(gamma) * toFloat64(volume) * 100
* pow(toFloat64(underlying_close), 2) * 0.01 AS gex
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = (SELECT max(date) FROM global_markets.options_greeks WHERE underlying_symbol = 'SPY')
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 21
)
GROUP BY expiry_date
ORDER BY expiry_dateدر میان سررسیدهای 11 که در بازه سه هفته آینده قرار دارند، نزدیکترین آنها یعنی Aug 7، دارای سمت اختیار خرید (call) به ارزش 20.57 میلیارد دلار به ازای هر 1٪ تغییر قیمت و خالص علامتدار -5.1 میلیارد دلار است. در انتهای دیگر این طیف، ارقام بسیار ناچیز هستند. یک نمودار داشبورد معتبر باید فیلتر سررسید خود را مستقیماً روی نمودار درج کند.
سطح گامای صفر که اغلب «نقطه چرخش» (flip) نامیده میشود، قیمت دارایی پایه است که در آن پروفایل مجموع، از صفر عبور میکند. محاسبه دقیق این سطح مستلزم قیمتگذاری مجدد زنجیره اختیارها در شبکهای از قیمتهای فرضی لحظهای (spot) و محاسبه مجدد گامای هر قرارداد در هر نقطه است، چرا که گاما با حرکت قیمت لحظهای تغییر میکند. بسیاری از پروژهها از قیمتگذاری مجدد صرفنظر کرده و نقطه عبور را مستقیماً از پروفایل فعلی قیمتهای اعمال (strike) درونیابی میکنند. این میانبر ارزانتر است اما به قیمت متفاوتی منجر میشود. پیش از استناد به سطح flip، بررسی کنید که پروژه مورد نظر از کدام روش استفاده میکند.
پروفایل روزانه چقدر تغییر میکند؟
سود باز (Open interest) یک دارایی ایستا نیست. قراردادها منقضی میشوند، strike priceهای جدید فهرست میشوند و موقعیتها در هر جلسه معاملاتی باز و بسته میشوند.
کد دقیق SQL پشت هر عدد
SELECT
toString(d) AS session_date,
formatDateTime(d, '%b %e') AS session_label,
round(sumIf(gex, side = 'call') / 1e9, 2) AS call_gex_bn,
round(-sumIf(gex, side = 'put') / 1e9, 2) AS put_gex_bn,
round((sumIf(gex, side = 'call') - sumIf(gex, side = 'put')) / 1e9, 2) AS net_gex_bn
FROM
(
SELECT
date AS d,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
toFloat64(gamma) * toFloat64(volume) * 100
* pow(toFloat64(underlying_close), 2) * 0.01 AS gex
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= today() - 60
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 45
)
GROUP BY d
ORDER BY dدو نکته در طول 41 جلسه معاملاتی مورد بررسی، برجسته است. ارقام ناخالص بزرگ هستند و خالص، تفاوت میان آنهاست: در Aug 6، آخرین جلسه در پنل، سمت اختیار خرید (call) معادل 29.2 میلیارد دلار در برابر سمت اختیار فروش (put) به ارزش -34.53 میلیارد دلار بود که رقمی خالص معادل -5.32 میلیارد دلار را نشان میدهد. تغییری کوچک در هر یک از طرفین ناخالص، رقم خالص را بهشدت جابهجا میکند. این نمودار بههیچوجه هموار نیست. رقم خالص در Jun 9 معادل -4.9 میلیارد دلار ثبت شد و پنل نشان میدهد که این رقم بین جلسات معاملاتی چه نوساناتی دارد. نمودار GEX بدون برچسب زمانی، صرفاً جنبه تزئینی دارد.
تفاوت GEX با max pain چیست؟
هر دو عدد از یک زنجیره اختیار معامله استفاده میکنند اما پرسشهای متفاوتی را مطرح میسازند. GEX هر قیمت اعمال (strike) را با گاما وزندهی میکند و میپرسد که یک حرکت یک درصدی، چه میزان تقاضا برای پوشش ریسک (hedging) ایجاد خواهد کرد. Max pain گاما را بهطور کامل نادیده میگیرد و یک پرسش تسویه را مطرح میکند: در چه قیمتی، مجموع ارزش در سود (in the money) که باید به دارندگان اختیار پرداخت شود، در زمان سررسید به حداقل میرسد. نمودار زیر، این منحنی را از همان دادههای لحظهای و برای قراردادهایی که در کمتر از یک هفته منقضی میشوند، ترسیم میکند.
کد دقیق SQL پشت هر عدد
WITH chain AS
(
SELECT
toFloat64(strike_price) AS k,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
sum(toFloat64(volume)) AS contracts,
min(abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1)) AS moneyness
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = (SELECT max(date) FROM global_markets.options_greeks WHERE underlying_symbol = 'SPY')
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 7
GROUP BY k, side
)
SELECT
concat('$', toString(round(sk))) AS settle_price,
round(sum(multiIf(
side = 'call' AND sk > k, (sk - k) * contracts * 100,
side = 'put' AND sk < k, (k - sk) * contracts * 100,
0)) / 1e9, 2) AS itm_value_bn
FROM (SELECT DISTINCT k AS sk FROM chain WHERE moneyness <= 0.015) AS grid
CROSS JOIN chain
GROUP BY sk
ORDER BY skاین منحنی 23 قیمت تسویه احتمالی را پوشش میدهد. در $758 مجموع ارزش در سود به 0.86 میلیارد دلار میرسد و در $780 این رقم 0.7 میلیارد دلار است. پایینترین نقطه این منحنی، قیمت اعمال max pain است. این نقطه میتواند چندین دلار با قیمت اعمالی که بیشترین گاما را در همان لحظه دارد فاصله داشته باشد و هیچکدام از این دو نقطه، پیشبینیکننده قیمت تسویه نهایی دارایی پایه نیستند.
برای اجرای یک داشبورد GEX متنباز به چه چیزی نیاز دارید؟
بیشتر این پروژهها بستههای کوچک پایتون هستند که یک لایه ترسیم نمودار بر روی آنها قرار دارد. آنچه آنها از شما نیاز دارند، کوتاه است:
- یک اسنپشات از زنجیره اختیارها (option chain) شامل قیمت اعمال (strike)، تاریخ انقضا، نوع اختیار، سود باز (open interest) و یا گامای ارائهشده توسط فروشنده (vendor gamma) و یا نوسان ضمنی (implied volatility) برای محاسبه آن.
- قیمت لحظهای (spot price) دارایی پایه که دقیقاً در همان لحظه ثبت زنجیره، ضبط شده باشد.
- یک برچسب زمانی (timestamp) که بهجای فرضشدن، در کنار خروجی ذخیره شده باشد.
- یک فیلتر انقضا که آگاهانه انتخاب کردهاید.
- یک کلید دسترسی به دادههای بازار.
نصب را از یک نسخه تگشده (tagged release) انجام دهید، نه از شاخه پیشفرض. git clone --branch <tag> --depth 1 <repo-url> نسخهای را در اختیار شما میگذارد که توسط شخصی تأیید شده است، در حالی که main هر چیزی را که همین امروز صبح بارگذاری شده است، به شما میدهد. در یک محیط مجازی (virtual environment) کار کنید: python3 -m venv .venv، آن را فعال کنید و سپس pip install -r requirements.txt. ابتدا خط requires-python را در فایل pyproject.toml پروژه بخوانید. بستهای که به یک مفسر قدیمی وابسته است، در نسخههای جدیدتر به شیوههای گیجکنندهای دچار خطا میشود.
دادههای بازار بخشی است که بهندرت رایگان است. اسنپشاتی که شامل سود باز و یونانیها (greeks) برای هر قرارداد در یک زنجیره باشد، تا اوت 2026 در اکثر فروشندگان داده، یک امتیاز پولی محسوب میشود. نقاط پایانی (endpoints) رایگان معمولاً قیمتها را بدون سود باز ارائه میدهند، یا سود باز را صبح روز بعد منتشر میکنند. پروفایلی که بر اساس سود بازِ دیروز ساخته شده باشد، دقیقاً در همان نقطهای که محاسبات بیشترین حساسیت را دارند، فاقد اعتبار (stale) است.
آنچه داشبورد GEX قادر به تشخیص آن نیست
موجودی واقعی معاملهگران (Dealer) منتشر نمیشود. شرکتها موقعیتهای خود را بهصورت تجمیعی و با تأخیر گزارش میدهند و جزئیات مربوط به سطح Strike هرگز در هیچ منبع عمومی نمایش داده نمیشود. داشبورد GEX تقاضای پوشش ریسک (Hedging) را بر اساس فرضیاتی درباره مالکیت مدلسازی میکند و با وجود دقت محاسباتی، همچنان یک مدل باقی میماند.
چهار عامل وجود دارد که از دید هرگونه ساختار مبتنی بر زنجیره اختیار (Option chain) پنهان است:
- چه کسی در واقعیت طرف دیگر هر قرارداد در هر Strike را در اختیار دارد
- موقعیتهایی که خارج از بازار رسمی (OTC) ایجاد شدهاند
- سیاست پوشش ریسک هر Trading desk، از جمله میزهایی که بهجای پوشش مستمر، طبق یک زمانبندی مشخص اقدام به این کار میکنند
- اینکه آیا یک رقم ثبتشده در Open interest ناشی از معاملات بازکننده (Opening) بوده یا معاملات بستهکننده (Closing)
هیچکدام از این موارد، ارقام GEX را بیفایده نمیکند. اما به این معناست که این ارقام بر پایه فرضیات مشخصی استوارند و این فرضیات باید در کنار نمودار ذکر شوند. همین انضباط در تحلیل یونانیهای (Greeks) سطح پورتفوی نیز دیده میشود، جایی که وزندهی بتا به دلتای پورتفوی، فرضیات پشت یک عدد تجمیعی را بهجای پنهان کردن، شفاف میسازد.
نحوه محاسبه این پنلها
هر پنل، یونانیهای روزانه هر قرارداد برای SPY را در آخرین جلسه معاملاتی موجود میخواند که بر اساس برازش نوسانپذیری ضمنی (Implied volatility) همگرا و قراردادهایی که معامله شدهاند، فیلتر شده است. هر Strike بر اساس حجم معاملات همان جلسه وزندهی میشود، چرا که این مجموعه داده فاقد اطلاعات Open interest است. Gamma dollars با استفاده از فرمول ارائهشده در بالا و با در نظر گرفتن قیمت پایانی دارایی پایه بهعنوان Spot محاسبه میشود. پنل Max pain یونانیها را بهطور کامل کنار میگذارد و تنها از Strikeها، سمت قرارداد (خرید/فروش) و تعداد قراردادها استفاده میکند.
پرسشهای متداول
GEX در معاملات اختیار معامله چیست؟
GEX یا همان Gamma Exposure، برآوردی از میزان تغییر تقاضا برای پوشش ریسک (Hedging) در ازای یک درصد تغییر در قیمت دارایی پایه است. این شاخص، گامای هر قرارداد را در سود باز (Open Interest)، ضریب 100 سهم و مجذور قیمت لحظهای (Spot) ضرب کرده و با در نظر گرفتن علامت قراردادی برای اختیار خرید (Call) و اختیار فروش (Put)، مجموع آنها را در تمام قیمتهای اعمال (Strike) محاسبه میکند.
آیا برای محاسبه GEX به سود باز (Open Interest) نیاز است؟
ساختار استاندارد این شاخص از سود باز استفاده میکند که نشاندهنده موقعیتهای باز و تسویهنشده است. برخی داشبوردها در صورت عدم دسترسی یا تأخیر در دادههای سود باز، از حجم معاملات استفاده میکنند؛ جایگزینی این دو معیار، سطح پروفایل نهایی را تغییر میدهد.
سطح گامای صفر یا Gamma Flip چیست؟
این سطح، قیمت دارایی پایه است که در آن پروفایل مجموع گاما از صفر عبور میکند. در پیادهسازی دقیق، گامای هر قرارداد در هر قیمت لحظهایِ فرضی مجدداً محاسبه میشود، نه اینکه صرفاً از پروفایل قیمت اعمال فعلی درونیابی شود؛ چرا که با حرکت قیمت لحظهای، مقدار گاما نیز تغییر میکند.
آیا عدد GEX مثبت به معنای صعودی بودن بازار است؟
علامت این شاخص، یک وضعیت پوشش ریسک فرضی را توصیف میکند، نه یک نتیجه قطعی؛ و کاملاً به قراردادهای انتخابشده برای طرفین خریدار اختیار خرید و فروش بستگی دارد. تغییر این قراردادها باعث تغییر علامت در دادههای یکسان میشود؛ بنابراین این عدد، یک موقعیت مدلسازیشده را نشان میدهد، نه جهت حرکت بازار.
آیا میتوانم بدون خرید اشتراک داده، داشبورد GEX بسازم؟
شما میتوانید محاسبات را بر روی هر اسنپشات از زنجیره اختیار معامله، از جمله دادههای با تأخیر یا ناقص، پیادهسازی و آزمایش کنید. تولید یک پروفایل بهروز، معمولاً نیازمند دسترسی به فید دادهای است که سود باز و یونانیها (Greeks) را بهصورت یکپارچه برای کل زنجیره ارائه دهد؛ خدماتی که اکثر فروشندگان داده تا اوت 2026 برای آن هزینه دریافت میکنند.
هر پنل در اینجا به همراه کد SQL دقیق آن ارائه شده است. یکی را باز کنید، تیکر (Ticker) یا بازه زمانی انقضا را تغییر دهید و همان محاسبات را شخصاً در ترمینال Strasmore اجرا کنید.