Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

오픈소스 GEX 대시보드 작동 원리와 산출 방식

오픈소스 GEX 대시보드가 감마 익스포저를 계산하는 원리를 설명합니다. 행사가격별 산출 공식과 딜러의 포지션 가정 및 결과값 해석 시 주의해야 할 한계를 상세히 다룹니다.

감마 익스포저(GEX) 대시보드의 작동 원리

오픈소스 GEX 대시보드는 단일 옵션 체인 스냅샷을 감마 익스포저 프로파일로 변환합니다. 이는 기초자산이 1% 변동할 때 옵션 헤징 수요가 얼마나 변화할지를 추정하여 각 행사가격(strike price)별 달러 금액으로 나타낸 것입니다. 이 계산식은 단 한 줄의 코드로 이루어집니다. 이 계산의 기저에는 딜러가 모든 콜옵션을 매수하고 모든 풋옵션을 매도하고 있다는 가정이 깔려 있으나, 옵션 체인 어디에서도 이 가정을 측정하지는 않습니다. 바로 이 간극에서 해당 수치에 대한 대부분의 오독이 발생합니다. 만약 감마 익스포저가 측정하는 것에 대해 읽어보셨다면, 다음 질문은 이 수치가 어떻게 산출되는지에 관한 것입니다.

감마 익스포저(Gamma Exposure)는 어떻게 산출되는가?

단일 계약에서 시작합니다. 감마는 기초자산 가격이 1달러 변동할 때 옵션의 델타가 변화하는 비율이며, 주당 단위로 표시됩니다. 표준 미국 주식 옵션은 100주를 기초로 하므로, 계약 단위의 감마는 표시된 감마에 해당 승수를 곱하여 산출합니다.

대시보드는 이를 달러 단위와 퍼센트 변동 단위로 환산합니다. 행사가격별 수치를 도출하는 데에는 다섯 가지 요소가 사용됩니다.

  • gamma: 계약의 주당 감마로, 옵션 체인 스냅샷에서 확인하거나 내재변동성(implied volatility)을 통해 자체적으로 계산합니다.
  • open_interest: 해당 행사가격 및 만기에 미결제 상태인 계약 수입니다.
  • 100: 계약 승수입니다.
  • spot * spot: 델타 변화량을 현재 기초자산 가격 기준의 달러 명목 가치 변화로 환산합니다.
  • 0.01: 1달러 변동 기준의 수치를 1% 변동 기준으로 재조정합니다.

행사가격별 수치는 gex = gamma * open_interest * 100 * spot * spot * 0.01입니다. 옵션 체인상의 모든 행사가격에 대해 콜옵션은 양수, 풋옵션은 음수로 적용하여 합산하면 최종적인 헤드라인 수치가 도출됩니다. 대시보드에 표시되는 행사가격별 막대 그래프, 누적 프로필, 플립 레벨(flip level), 만기별 분석 등 모든 시각화 자료는 이 하나의 합계를 재구성한 것입니다.

행사가격별 GEX 프로파일은 어떤 모습인가?

아래 패널은 기초자산 종가 기준 1.5% 범위 내에 있는 모든 행사가격에 대해, 30일 이내 만기 도래하는 SPY 계약을 바탕으로 프로파일을 구성한 것입니다.

조회행사가별 SPY 감마 익스포저(Gamma Exposure), 최근 세션, 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

여기서 한 가지 대체가 중요한데, 이는 많은 무료 대시보드에서 언급 없이 사용하는 방식과 동일합니다. 이 패널의 기반 데이터는 미결제약정(open interest)이 아닌 계약별 그리스(greeks)와 거래량을 담고 있으므로, 각 행사가격은 해당 세션의 거래 계약량에 따라 가중치가 부여됩니다. 이 둘은 서로 다른 지표를 측정합니다. 거래량은 당일의 매매를 집계하고, 미결제약정은 장 마감 시점까지 유지되는 포지션을 집계합니다. 곡선의 형태를 파악하는 것이 핵심이며, 실제 미결제약정 수치를 사용하면 절대적인 수준은 달라질 수 있습니다. 이 차이에 대한 자세한 내용은 옵션 거래량과 미결제약정의 차이에서 확인할 수 있습니다.

이 밴드는 23개의 행사가격을 포함하며, $758에서 $780까지 이어지고, 모든 수치는 Aug 6, 2026를 기준으로 측정되었습니다. 가장 낮은 행사가격에서의 순 GEX(signed net)는 1% 변동당 -653.1백만 달러입니다. 가장 높은 행사가격에서는 849.4백만 달러를 기록합니다. 행사가격마다 막대 그래프의 높이가 불균일하다는 점에 주목하십시오. 라운드 넘버(round numbers)와 거래가 활발한 만기일에 물량이 집중되며, 그 사이의 행사가격은 거의 나타나지 않습니다.

딜러의 부호 관례는 측정되는 것인가, 아니면 가정되는 것인가?

옵션 체인(option chain)의 그 어디에도 계약의 어느 쪽에 누가 위치하는지는 기록되지 않는다. 체인은 행사가격(strike price), 만기일(expiry), 그리스 지표(greeks), 그리고 미결제약정(count of contracts outstanding)만을 보고할 뿐이다. 해당 옵션 가격을 제시한 마켓 메이커(market maker)가 장 마감 시점에 롱(long) 포지션인지 숏(short) 포지션인지에 대해서는 침묵하며, 이를 보완해 주는 공개 데이터 피드(public feed)도 존재하지 않는다.

표준적인 구성 방식은 이러한 정보의 공백을 관례로 메운다. 즉, 딜러는 모든 콜옵션을 매수(long)하고 모든 풋옵션을 매도(short)한 것으로 가정한다. 이에 따라 콜옵션은 합계에 양수(+)로, 풋옵션은 음수(-)로 반영된다. 이 단 하나의 선택이 헤드라인 수치의 부호를 결정하며, 해당 부호를 기반으로 산출된 모든 지표는 이 관례를 그대로 물려받는다. 만약 이 관례를 뒤집으면, 동일한 데이터임에도 불구하고 양수였던 감마(gamma) 수치는 음수로 바뀐다.

이 관례에는 나름의 논리적 근거가 있다. 개인 투자자의 주문 흐름은 커버드콜(covered call)이나 현금 담보 풋옵션(cash secured put) 매도, 그리고 방어 목적의 풋옵션 매수 쪽으로 기우는 경향이 있다. 이는 결과적으로 딜러가 반대편에서 대략적으로 가정된 방향의 포지션을 취하게 만든다. 하지만 이는 소유권에 대한 가정일 뿐이며, 대규모 기관 투자자가 콜옵션을 대량 매수하여 딜러가 숏 포지션을 취하게 된 경우처럼 실제 상황과 다른 경우에도 일률적으로 적용된다. 관례에 대한 명시 없이 수치만을 출력하는 대시보드는 가장 중요한 입력값을 숨기고 있는 셈이다.

만기별 감마(gamma) 분포 현황

만기 필터가 적용되지 않은 GEX 수치는 오늘 오후 만기인 계약과 다음 분기 만기인 계약을 합산하여 하나의 수량으로 처리합니다. 감마는 근월물에 집중되며, 이 근월물은 매 거래일마다 갱신됩니다.

조회만기별 SPY 감마 익스포저, 향후 3주
모든 수치 뒤에 숨겨진 정확한 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

3주 이내의 11개 만기 중 가장 가까운 Aug 7 만기물은 1% 변동당 콜 사이드에서 20.57십억 달러의 감마를 보이며, 순합계(signed net)는 -5.1십억 달러에 달합니다. 반면 원월물은 이보다 훨씬 적은 비중을 차지합니다. 신뢰할 수 있는 대시보드 차트는 차트 자체에 만기 필터를 명시합니다.

흔히 '플립(flip)'이라 불리는 제로 감마 레벨은 합산된 프로파일이 0을 교차하는 기초자산 가격을 의미합니다. 이를 정확하게 산출하려면 가상의 현물 가격 격자(grid)에서 옵션 체인을 재평가하고, 현물 가격 변동에 따라 감마 값 자체가 변화하는 특성을 반영하여 각 계약의 감마를 다시 계산해야 합니다. 많은 프로젝트가 이러한 재평가 과정을 생략하고 현재 행사가격 프로파일에서 교차점을 직접 보간법으로 산출합니다. 이러한 방식은 비용은 저렴하지만, 결과적으로 도출되는 가격에 차이가 발생합니다. 특정 프로젝트의 플립 레벨을 인용하기 전에 해당 프로젝트가 어떤 방식을 구현했는지 확인해야 합니다.

프로파일은 일별로 얼마나 변동하는가?

미결제약정(open interest)은 정지된 주식이 아니다. 매 세션마다 계약이 만기되고, 새로운 행사가격(strike price)이 상장되며, 포지션이 설정되거나 청산된다.

조회순(net) 대비 총 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 세션 동안 두 가지가 두드러진다. 총액(gross) 측면의 규모는 크며, 순액(net)은 그 차이로 결정된다. 패널의 마지막 세션인 Aug 6에는 콜옵션 측이 29.2십억 달러, 풋옵션 측이 -34.53십억 달러로 집계되어 순액은 -5.32십억 달러를 기록했다. 양측 총액 중 어느 한쪽이라도 소폭 변동하면 순액은 크게 움직인다. 또한 이 선은 결코 매끄럽지 않다. 순액은 Jun 9-4.9십억 달러를 기록했으며, 패널은 세션 간에 이 수치가 얼마나 크게 변동하는지를 보여준다. 타임스탬프가 없는 GEX 차트는 장식에 불과하다.

GEX와 맥스 페인(max pain)은 어떻게 다른가?

두 지표는 동일한 옵션 체인을 분석하지만 서로 다른 질문을 던집니다. GEX는 각 행사가격(strike price)에 감마(gamma)를 가중치로 부여하여 기초자산 가격이 1% 변동할 때 어느 정도의 헤지 수요가 발생하는지를 측정합니다. 맥스 페인은 감마를 완전히 배제하고 만기 시점의 결제 문제를 다룹니다. 즉, 만기일에 옵션 보유자에게 지급해야 할 내재가치(in the money value) 총합이 가장 작아지는 가격이 얼마인지를 계산합니다. 아래 패널은 동일한 시점의 데이터를 바탕으로 일주일 이내 만기 도래 계약들을 활용해 해당 곡선을 도출합니다.

조회동일 옵션 체인, 다른 관점: 결제 가격별 내가격(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
Run this yourself

이 곡선은 23개의 후보 결제 가격을 포함합니다. $758에서 내재가치 총합은 0.86십억 달러이며, $780에서는 0.7십억 달러에 달합니다. 곡선의 최저점이 바로 맥스 페인 행사가격입니다. 이는 동일한 시점의 데이터에서 가장 큰 감마 익스포저(gamma exposure)를 가진 행사가격과 수 달러 이상 차이가 날 수 있으며, 두 지점 모두 기초자산이 최종적으로 어디에서 결제될지를 예측하는 지표는 아닙니다.

오픈소스 GEX 대시보드를 실행하려면 무엇이 필요한가?

대부분의 프로젝트는 플로팅(plotting) 계층이 추가된 소규모 파이썬(Python) 패키지입니다. 프로젝트 실행을 위해 필요한 요소는 다음과 같습니다.

  • 행사가격(strike), 만기일(expiry), 옵션 유형, 미결제약정(open interest), 그리고 이를 계산하기 위한 벤더 감마(vendor gamma) 또는 내재변동성(implied volatility)이 포함된 체인 스냅샷
  • 체인과 동일한 시점에 포착된 기초자산의 현물 가격(spot price)
  • 추정치가 아닌 출력물과 함께 저장된 타임스탬프
  • 사용자가 직접 선택한 만기 필터
  • 시장 데이터 키

기본 브랜치보다는 태그가 지정된 릴리스에서 설치하십시오. git clone --branch <tag> --depth 1 <repo-url>는 누군가 검증을 마친 빌드를 제공하는 반면, main은 오늘 아침에 푸시된 모든 내용을 포함합니다. 가상 환경 내에서 작업하십시오. python3 -m venv .venv를 실행하고 활성화한 뒤 pip install -r requirements.txt를 수행하십시오. 먼저 프로젝트의 pyproject.toml에 있는 requires-python 라인을 읽어보십시오. 이전 인터프리터에 고정된 패키지는 최신 인터프리터에서 이해하기 어려운 오류를 발생시킵니다.

시장 데이터는 무료로 제공되는 경우가 거의 없습니다. 2026년 8월 기준, 체인상의 모든 계약에 대해 미결제약정과 그리스(greeks)를 모두 포함하는 스냅샷은 대부분의 벤더에서 유료로 제공하는 권한입니다. 무료 엔드포인트는 미결제약정이 없거나 다음 날 아침에 게시된 미결제약정 데이터를 반환하는 경향이 있습니다. 어제의 미결제약정을 기반으로 구축된 프로필은 계산이 가장 민감하게 반응해야 하는 지점에서 데이터가 이미 경과된 상태입니다.

GEX 대시보드가 파악할 수 없는 것들

실제 마켓 메이커의 포지션은 공개되지 않습니다. 금융기관은 포지션을 합산하여 지연 공시하며, 행사가격별 세부 정보는 공공 데이터 피드에 전혀 나타나지 않습니다. GEX 대시보드는 특정 소유권 가정을 전제로 헤징 수요를 모델링하는 것이며, 산술적으로 정밀해 보이더라도 이는 어디까지나 모델에 불과합니다.

옵션 체인 기반의 모델이 파악할 수 없는 네 가지 요소는 다음과 같습니다.

  • 각 행사가격의 양쪽 포지션을 실제로 누가 보유하고 있는지
  • 상장 시장 밖에서 체결된 포지션
  • 지속적인 헤징이 아닌 특정 일정에 따라 헤징하는 데스크를 포함한 각 트레이딩 데스크의 헤징 정책
  • 특정 미결제약정(open interest) 수치가 신규 진입인지 청산 거래에서 비롯된 것인지 여부

그렇다고 해서 해당 수치가 무의미한 것은 아닙니다. 다만 그 수치에는 명시된 가정이 포함되어 있으며, 차트 옆에는 반드시 해당 가정을 함께 기재해야 합니다. 이러한 원칙은 포트폴리오 수준의 그리스(greek) 분석에서도 동일하게 적용되는데, 포트폴리오 델타의 베타 가중치 산출은 집계 이면에 숨겨진 가정을 명확히 드러내는 방식입니다.

이 패널들이 계산된 방식

각 패널은 가장 최근 거래일의 SPY 계약별 그리스 값을 읽어오며, 수렴된 내재변동성(implied volatility) 적합도와 실제 거래된 계약으로 필터링합니다. 본 데이터 세트에는 미결제약정이 포함되어 있지 않으므로, 모든 행사가격은 해당 세션의 계약 거래량을 기준으로 가중치를 부여합니다. 감마 달러(Gamma dollars)는 위에서 제시된 공식을 사용하며, 기초자산의 종가를 현물 가격(spot)으로 적용합니다. 맥스 페인(max pain) 패널은 그리스 값을 완전히 배제하고 행사가격, 포지션 방향, 계약 수만을 사용합니다.

자주 묻는 질문(FAQ)

옵션 거래에서 GEX란 무엇입니까?

GEX(Gamma Exposure, 감마 익스포저)는 기초자산 가격이 1% 변동할 때 옵션 헤지 수요가 얼마나 변화하는지를 추정한 수치입니다. 각 계약의 감마(gamma)에 미결제약정(open interest), 100주 승수, 그리고 현물 가격의 제곱을 곱한 뒤, 콜옵션과 풋옵션에 각각의 부호를 적용하여 행사가격별로 합산합니다.

GEX를 계산하려면 미결제약정이 필요합니까?

표준적인 산출 방식은 미결제약정을 사용하며, 이는 현재 유지되고 있는 포지션을 의미합니다. 일부 대시보드에서는 미결제약정을 이용할 수 없거나 지연될 경우 거래량(traded volume)으로 대체하기도 하지만, 두 지표를 서로 바꾸면 프로파일의 수준이 달라집니다.

제로 감마(zero gamma) 또는 감마 플립(gamma flip) 레벨이란 무엇입니까?

합산된 감마 익스포저 프로파일이 0을 통과하는 기초자산 가격을 의미합니다. 정교한 구현을 위해서는 현재 행사가격 프로파일에서 보간법을 사용하는 대신, 현물 가격이 변함에 따라 감마도 함께 변하므로 각 후보 현물 가격에서 모든 계약의 감마를 재계산해야 합니다.

GEX 수치가 양수이면 강세장입니까?

부호는 결과값이 아닌 가정된 헤지 포지션을 나타내며, 이는 전적으로 콜옵션과 풋옵션을 누가 보유하고 있는지에 대한 관례에 달려 있습니다. 이 관례를 뒤집으면 동일한 데이터라도 부호가 반대로 바뀌므로, 해당 수치는 방향성이 아닌 모델링된 포지션을 설명합니다.

유료 데이터 피드 없이 GEX 대시보드를 구축할 수 있습니까?

지연되거나 부분적인 데이터를 포함하여 모든 옵션 체인 스냅샷에서 계산을 구축하고 테스트할 수 있습니다. 다만 현재의 프로파일을 생성하려면 일반적으로 전체 체인에 대한 미결제약정과 그리스(greeks) 지표를 함께 제공하는 피드가 필요하며, 2026년 8월 기준으로 대부분의 공급업체가 이에 대해 비용을 청구하고 있습니다.


여기에 포함된 모든 패널은 그 아래에 정확한 SQL을 제공합니다. 패널을 열어 티커(ticker)나 만기 범위를 변경한 뒤, Strasmore 터미널에서 직접 동일한 계산을 실행해 보십시오.

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