Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Как работает дашборд GEX с открытым исходным кодом

Узнайте, как рассчитывается гамма-экспозиция в инструментах с открытым кодом. Разбираем формулу для каждого страйка, допущения о позициях дилеров и ограничения итоговых данных.

Как рассчитывается показатель GEX

Инструменты с открытым исходным кодом для анализа GEX преобразуют моментальный снимок опционной цепочки в профиль гамма-экспозиции. Это денежный показатель для каждого страйка, оценивающий изменение спроса на хеджирование при движении базового актива на один процент. Математический расчет умещается в одну строку кода. В основе лежит допущение, что маркет-мейкеры держат длинную позицию по всем call-опционам и короткую по всем put-опционам. Этот параметр нигде в цепочке не измеряется напрямую, и именно здесь кроется причина большинства неверных интерпретаций показателя. Если вы уже ознакомились с тем, что измеряет гамма-экспозиция, следующим логичным вопросом будет механизм формирования этой цифры.

Как рассчитывается гамма-экспозиция?

Начнем с одного контракта. Гамма — это скорость изменения дельты опциона при движении базового актива на один доллар, выраженная в расчете на одну акцию. Стандартный американский опцион на акции покрывает сто акций, поэтому гамма контракта в пересчете на акции равна котируемой гамме, умноженной на этот множитель.

Информационная панель масштабирует этот показатель в долларовом выражении и в процентах движения цены. В расчет показателя для каждого страйка входят пять компонентов:

  • gamma: гамма контракта в расчете на одну акцию, считываемая из снимка опционной доски или вычисляемая локально на основе подразумеваемой волатильности
  • open_interest: количество контрактов, остающихся открытыми по данному страйку и дате экспирации
  • 100: множитель контракта
  • spot * spot: коэффициент, преобразующий изменение дельты в изменение долларовой номинальной стоимости при текущей цене базового актива
  • 0.01: коэффициент, пересчитывающий результат с движения на один доллар на движение на один процент

Показатель для каждого страйка — это gex = gamma * open_interest * 100 * spot * spot * 0.01. Суммируя эти значения по всем страйкам в цепочке (учитывая call-опционы как положительные, а put-опционы как отрицательные), мы получаем итоговый показатель. Все остальные данные, отображаемые на панели — гистограммы по страйкам, кумулятивный профиль, уровень переворота (flip level) и разбивка по датам экспирации — являются производными от этой суммы.

Как выглядит профиль GEX по страйкам?

На графике ниже представлен профиль для SPY по всем страйкам в пределах полутора процентов от цены закрытия базового актива для контрактов со сроком экспирации до тридцати дней.

ЗапросГамма-экспозиция SPY по страйкам, последняя сессия, контракты до 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
Run this yourself

Здесь важна одна замена, которую многие бесплатные панели инструментов делают без предупреждения. Данные в основе этих графиков содержат греки и объём торгов по каждому контракту, а не открытый интерес, поэтому каждый страйк взвешивается по объёму контрактов, проторгованных за сессию. Эти показатели отражают разные вещи: объём учитывает сделки за день, а открытый интерес — позиции, остающиеся открытыми на момент закрытия. Форма кривой важна для понимания динамики, тогда как абсолютные уровни изменились бы при использовании данных по открытому интересу. Различия подробно описаны в разделе объём опционов против открытого интереса.

Диапазон охватывает 23 страйков, от $758 до $780, все данные зафиксированы на Aug 6, 2026. На самом низком страйке в поле зрения чистая знаковая величина составляет -653.1 миллиона долларов на один процент движения. На самом высоком она достигает 849.4 миллионов. Обратите внимание, насколько неравномерны столбцы от одного страйка к другому. Круглые числа и даты с высокой активностью торгов концентрируют основной объём, в то время как промежуточные страйки практически не отражаются на графике.

Измеряется или принимается как допущение конвенция знаков дилера?

В цепочке опционов нет данных о том, кто выступает контрагентом по сделке. Цепочка содержит цены исполнения, сроки экспирации, греки и количество открытых контрактов. Она не сообщает, остался ли маркет-мейкер, выставивший котировки, в длинной или короткой позиции по итогам дня, и ни один публичный поток данных не предоставляет эту информацию.

Стандартная методология заполняет этот пробел с помощью конвенции: предполагается, что дилеры занимают длинную позицию по всем call-опционам и короткую по всем put-опционам. Таким образом, call-опционы учитываются в сумме с положительным знаком, а put-опционы — с отрицательным. Этот выбор определяет знак итогового показателя, и все производные от него значения наследуют эту логику. Если изменить конвенцию, положительное значение гаммы при тех же исходных данных станет отрицательным.

У этой конвенции есть обоснование. Розничные потоки тяготеют к продаже covered calls и cash-secured puts, а также к покупке put-опционов для хеджирования, что оставляет дилера по другую сторону сделки примерно в том направлении, которое принято в допущении. Тем не менее, это остается предположением о структуре владения, которое применяется единообразно ко всем страйкам, даже там, где оно часто ошибочно — например, на страйке, который только что заполнил крупный институциональный покупатель call-опционов. Информационная панель, которая выводит число без указания используемой конвенции, скрывает свой самый важный входной параметр.

Где концентрируется гамма по разным срокам экспирации?

Показатель GEX без фильтра по датам экспирации суммирует контракты, истекающие сегодня, с контрактами, истекающими в следующем квартале, и учитывает их как единый объем. Гамма концентрируется в ближайших сериях, которые обновляются каждую сессию.

ЗапросНаправленная гамма-экспозиция SPY по экспирациям, ближайшие три недели
Точный 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
Run this yourself

Среди 11 экспираций в пределах трех недель ближайшая из них, Aug 7, несет объем call-опционов в размере 20.57 миллиардов долларов на каждый один процент движения цены при чистом значении -5.1 миллиардов долларов. На дальнем конце панели этот показатель составляет лишь малую часть. Качественный график на панели мониторинга должен содержать указание фильтра экспирации непосредственно на самом графике.

Уровень нулевой гаммы, который часто называют «флип» (flip), — это цена базового актива, при которой суммарный профиль пересекает нулевую отметку. Корректный расчет требует переоценки цепочки опционов по сетке гипотетических спотовых цен и пересчета гаммы каждого контракта для каждой из них, поскольку сама гамма меняется при движении спота. Многие проекты пропускают этап переоценки и интерполируют точку пересечения непосредственно из текущего профиля страйков. Этот упрощенный метод дешевле, но он дает другой ценовой уровень. Прежде чем ссылаться на уровень «флипа», уточните, какой именно метод использует проект.

Насколько сильно меняется профиль день ото дня?

Открытый интерес — это не статичный показатель. Контракты истекают, добавляются новые страйки, а позиции открываются и закрываются в течение каждой торговой сессии.

ЗапросВаловая гамма колл- и пут-опционов SPY относительно нетто-позиции, последние 60 календарных дней
Точный 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
Run this yourself

За 41 сессий, представленных на графике, выделяются два момента. Валовые показатели по обеим сторонам велики, а нетто-значение представляет собой разницу между ними: Aug 6, в последний день на графике, объем call-опционов составил 29.2 млрд долларов против -34.53 млрд долларов по put-опционам, что дает нетто-значение в -5.32 млрд долларов. Небольшое изменение любого из валовых показателей существенно меняет нетто-значение. Линия на графике также далека от плавности. Нетто-значение составляло -4.9 млрд долларов Jun 9, и график наглядно демонстрирует амплитуду колебаний между сессиями. График GEX без временной метки не несет практической пользы.

В чем разница между GEX и max pain?

Оба показателя используют одну и ту же цепочку опционов, но отвечают на разные вопросы. GEX взвешивает каждый страйк по гамме и оценивает, какой объем хеджирования потребуется при изменении цены базового актива на один процент. Max pain полностью игнорирует гамму и решает задачу экспирации: при какой цене совокупная стоимость опционов «в деньгах» (in the money) будет минимальной на момент исполнения. На графике ниже эта кривая построена на основе того же снимка данных для контрактов с экспирацией в течение недели.

ЗапросТа же цепочка, другой ракурс: стоимость ITM-опционов в зависимости от цены исполнения
Точный 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
Run this yourself

Кривая охватывает 23 возможных цен исполнения. При $758 совокупная стоимость опционов «в деньгах» составляет 0.86 миллиарда долларов, а при $7800.7 миллиарда долларов. Нижняя точка кривой соответствует страйку max pain. Она может находиться на расстоянии нескольких долларов от страйка с наибольшим показателем гамма-экспозиции на тот же момент времени, и ни одна из этих точек не является прогнозом цены, по которой закроется базовый актив.

Что требуется для запуска дашборда GEX с открытым исходным кодом?

Большинство таких проектов представляют собой небольшие пакеты на Python с надстройкой для визуализации. От вас требуется немногое:

  • снимок цепочки опционов с указанием цены исполнения (strike), даты экспирации, типа опциона, открытого интереса (open interest), а также либо готового значения гаммы от поставщика, либо подразумеваемой волатильности для её самостоятельного расчета;
  • спотовая цена базового актива, зафиксированная в тот же момент, что и цепочка;
  • временная метка, которая должна сохраняться вместе с результатами, а не подразумеваться;
  • фильтр по дате экспирации, выбранный вами осознанно;
  • ключ доступа к рыночным данным.

Устанавливайте пакеты из помеченных релизов, а не из ветки по умолчанию. git clone --branch <tag> --depth 1 <repo-url> предоставляет сборку, которую кто-то проверил и одобрил, тогда как main выдаст вам всё, что было загружено сегодня утром. Работайте внутри виртуальной среды: python3 -m venv .venv, активируйте её, затем pip install -r requirements.txt. Сначала прочитайте строку requires-python в файле pyproject.toml проекта. Пакет, привязанный к старой версии интерпретатора, может выдавать непонятные ошибки при работе на новой.

Рыночные данные — это то, что редко бывает бесплатным. По состоянию на август две тысячи двадцать шестого года снимок, содержащий одновременно открытый интерес и греки для каждого контракта в цепочке, является платной услугой у большинства поставщиков. Бесплатные конечные точки обычно предоставляют котировки без открытого интереса или публикуют данные по открытому интересу только на следующее утро. Профиль, построенный на вчерашнем открытом интересе, будет неактуален именно в тех параметрах, к которым расчет наиболее чувствителен.

Чего не может знать GEX-дашборд

Реальные позиции дилеров не публикуются. Фирмы отчитываются о совокупных позициях с задержкой, а детализация по страйкам никогда не появляется в публичных лентах. GEX-дашборд моделирует спрос на хеджирование исходя из предположений о структуре владения, и это остается моделью, какой бы точной ни казалась арифметика.

Четыре фактора остаются вне поля зрения любой модели, построенной на цепочке опционов:

  • кто именно выступает контрагентом по каждой стороне каждого страйка;
  • позиции, открытые вне биржевого рынка;
  • политика хеджирования каждого торгового подразделения, включая те, что хеджируются по графику, а не непрерывно;
  • является ли конкретный объем открытого интереса результатом открытия новых позиций или закрытия существующих.

Это не делает показатель бесполезным. Однако это означает, что показатель опирается на определенное допущение, и это допущение должно быть указано рядом с графиком. Аналогичная дисциплина применяется при расчете «греков» на уровне портфеля, где бета-взвешивание дельты портфеля делает допущение, лежащее в основе совокупного показателя, явным, а не скрытым.

Как рассчитывались эти панели

Каждая панель использует ежедневные значения «греков» по контрактам на SPY за последнюю доступную сессию, отфильтрованные по сходящимся значениям подразумеваемой волатильности и по контрактам, по которым прошли сделки. Каждый страйк взвешивается по объему торгов контрактами за эту сессию вместо открытого интереса, который отсутствует в данном наборе данных. Гамма-доллары рассчитываются по приведенной выше формуле, где ценой спот является цена закрытия базового актива. Панель «максимальной боли» (max pain) полностью исключает «греки» и использует только страйки, стороны и количество контрактов.

Часто задаваемые вопросы

Что такое GEX в торговле опционами?

GEX, или гамма-экспозиция, оценивает изменение спроса на хеджирование при движении базового актива на один процент. Показатель рассчитывается путем умножения гаммы каждого контракта на открытый интерес, множитель сто акций и квадрат спотовой цены, с последующим суммированием по страйкам с учетом знака для call- и put-опционов.

Нужен ли открытый интерес для расчета GEX?

Стандартная методика использует открытый интерес, который учитывает неисполненные позиции. Некоторые аналитические панели используют торговый объем, если данные по открытому интересу недоступны или задерживаются; замена одного показателя другим меняет профиль экспозиции.

Что такое уровень нулевой гаммы или «гамма-флип»?

Это цена базового актива, при которой суммарный профиль гамма-экспозиции пересекает нулевую отметку. Корректный расчет требует пересчета гаммы каждого контракта при каждой потенциальной спотовой цене, а не интерполяции на основе текущего профиля страйков, так как гамма меняется вместе с движением спота.

Является ли положительное значение GEX «бычьим» сигналом?

Знак показателя описывает предполагаемую стратегию хеджирования, а не результат, и полностью зависит от принятой конвенции о том, кто выступает держателем call- и put-опционов. Изменение этой конвенции меняет знак при тех же данных, поэтому показатель описывает модель позиции, а не направление рынка.

Можно ли создать панель GEX без платного потока данных?

Вы можете построить и протестировать расчет на любом снимке опционной цепочки, включая задержанные или неполные данные. Для создания актуального профиля обычно требуется поток, содержащий открытый интерес и греки по всей цепочке, доступ к которому у большинства поставщиков по состоянию на август две тысячи двадцать шестого года является платным.


Каждая панель здесь содержит соответствующий SQL-запрос. Откройте любую из них, измените тикер или окно экспирации и выполните расчет самостоятельно в терминале Strasmore.

#gamma exposure#options#open source#dealer positioning#tools