Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-09-30

Gamma翻转位是什么?如何计算和验证

了解Gamma翻转位如何由行权价、Gamma和未平仓合约构建,掌握模型假设、零点含义及核查方法,避免误读其对市场波动的指示。

Gamma翻转位是预估的做市商总Gamma穿越零点时的标的价格。在该价格上方,现有期权持仓结构意味着对冲资金流倾向于抑制价格变动。在该价格下方,资金流则倾向于放大价格变动。这个水平是一个模型输出。它基于公开期权数据,并加入了一个重要假设:各方分别持有什么仓位。因此,理解其构建方式更有价值。

Gamma翻转位由哪些因素构成

Gamma是标的价格变动时,期权Delta的变化率,详见什么是期权Gamma。管理对冲组合的交易台会随着Delta漂移买卖标的资产,具体机制见Delta对冲如何运作。Gamma决定标的每变动一个点,对冲仓位需要调整多少。将期权链中每份合约的Gamma相加,并为每份合约赋予符号和权重,就得到Gamma敞口,通常写作GEX。翻转位是该总量的一个特定读数,即总量穿越零点时对应的标的价格。

计算需要四项输入:

  1. 每个行权价和到期日对应的每份合约Gamma,采用Black-Scholes模型计算。
  2. 符号约定。通常假设做市商卖出看涨期权、买入看跌期权,因此看涨期权Gamma以负号计入,看跌期权Gamma以正号计入。
  3. 每份合约的权重。公开发布的水平通常使用未平仓合约数。
  4. 缩放步骤:先乘以每份合约100股的合约乘数,再乘以现货价格的平方和0.01,得到标的每变动1%时Delta的美元总额。

符号约定值得单独说明。假设情况相反,即做市商买入看涨期权、卖出看跌期权,那么总量中的每个数字都会变号。但零点不会移动。改变的只是翻转位哪一侧被定义为正值。

第一步:行权价梯度上的每份合约Gamma

每份合约的Gamma并不会在整条期权链上保持不变。它通常在平值附近达到峰值,并向两侧下降。下方图表固定使用一个过去的交易日,即数据中记录的2026年6月最后一个交易日,并计算收盘价上下6%范围内、到期日为20至45天的期权在各行权价上的平均每份合约Gamma。

查询按行权价划分的每份合约平均伽马,SPY,2026年6月单个锚定交易时段
行权价看涨期权伽马看跌期权伽马
7050.005230.00512
7100.005750.00589
7150.006530.00678
7200.007660.00776
7250.008440.00888
7300.009460.01002
7350.01070.01137
7400.011980.01239
7450.012680.01344
7500.013770.0142
7550.013790.01446
7600.013640.01404
7650.012530.01204
7700.011180.0112
7750.009290.00957
7800.007450.00814
每个数字背后的完整 SQL
SELECT
    toString(toInt32(strike_price))                                                AS strike,
    round(avgIf(toFloat64(gamma), lower(substring(option_type, 1, 1)) = 'c'), 5)   AS call_gamma,
    round(avgIf(toFloat64(gamma), lower(substring(option_type, 1, 1)) = 'p'), 5)   AS put_gamma
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
  AND date = (
        SELECT max(date)
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
          AND date <= '2026-06-30'
      )
  AND iv_converged = 1
  AND volume > 0
  AND days_to_expiry BETWEEN 20 AND 45
  AND modulo(toInt32(strike_price), 5) = 0
  AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.06
GROUP BY strike_price
HAVING countIf(lower(substring(option_type, 1, 1)) = 'c') > 0
   AND countIf(lower(substring(option_type, 1, 1)) = 'p') > 0
ORDER BY strike_price
自己运行这个查询

在该区间的最低行权价处,平均看涨期权Gamma为0.00523;在最高行权价处为0.00745;峰值位于两者之间的16个行权价上。模型中,同一行权价和到期日的看涨期权Gamma与看跌期权Gamma相同,因此图中的两条线彼此重合。区分两者的是符号约定,而不是Gamma本身。

第二步:符号、权重与曲线转向位置

单份合约的敞口很小。假设某个行权价有100份合约,Gamma为0.02,而标的价格为600美元。将0.02乘以100份合约、100股的合约乘数、600的平方,再乘以0.01,得到标的每变动1%时约72万美元的Delta。这就是下一张图使用的单位,图中以百万美元表示。

该图沿用同一固定交易日,展示截至45天内所有到期日的行权价梯度。每个行权价的贡献按照上述约定赋予符号,并以该交易日的合约成交量加权;累计列则从最低行权价向上累加。

查询按行权价划分的带符号净伽马及其累计值,每变动1%的Delta(百万美元)
行权价行权价伽马(百万美元)累计伽马(百万美元)
70542.442.4
710130.8173.2
71541214.2
72099.8314
725200.1514.1
730253.4767.5
735442.21209.7
7401162.12371.8
7451536.83908.6
750-4878.8-970.2
755-881.6-1851.8
760-395.7-2247.5
765-115.3-2362.8
770-43.8-2406.6
775-26.8-2433.4
780-14-2447.4
785-5.6-2453
790-2.5-2455.5
每个数字背后的完整 SQL
SELECT
    strike,
    strike_gamma_musd,
    round(sum(strike_gamma_musd) OVER (ORDER BY strike_num), 1) AS running_gamma_musd
FROM
(
    SELECT
        toInt32(strike_price)           AS strike_num,
        toString(toInt32(strike_price)) AS strike,
        round(sum(multiIf(lower(substring(option_type, 1, 1)) = 'c', -1.0, 1.0)
                  * toFloat64(gamma) * volume * 100
                  * pow(toFloat64(underlying_close), 2) * 0.01) / 1e6, 1) AS strike_gamma_musd
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date = (
            SELECT max(date)
            FROM global_markets.options_greeks
            WHERE underlying_symbol = 'SPY'
              AND date <= '2026-06-30'
          )
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry <= 45
      AND modulo(toInt32(strike_price), 5) = 0
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.06
    GROUP BY strike_price
)
ORDER BY strike_num
自己运行这个查询

区间最低行权价贡献标的每变动1%时42.4百万美元的Delta,最高行权价贡献-2.5百万美元。整个12%的区间合计为-2455.5百万美元。从左向右观察累计线:当按看跌期权加权的行权价占主导时,曲线向上攀升;当按看涨期权加权的行权价开始占据平衡时,曲线转向。曲线转向对应的价格就是翻转位估计值。整个过程都是读者可以手动复核的记账计算,这正是重点。

该水平不代表什么

上述构建过程没有观察任何做市商。未平仓合约数只能说明某份合约存在,并不能说明做市商持有哪一边。开源GEX仪表板背后的项目在其README中明确说明了这一限制,并将该输出描述为基于未平仓合约数计算的Black-Scholes近似值:

并非对实际做市商仓位的衡量

(项目README,截至2026年9月)

覆盖范围是第二个缺口。该仪表板背后的免费数据源不提供现金指数代码SPX、XSP、NDX、RUT、DJX和VIX的期权链接口,而市场参与者最常引用这些代码的翻转位。针对其中任何一个代码发布的水平,都是在其他地方计算的,可能基于付费期权链,也可能基于ETF代理。SPX和SPY期权追踪同一指数,名义规模比例约为十比一;基于其中一个构建的水平,必须重新缩放后才能描述另一个。

曲线本身是第三个问题。严格的翻转位计算应在每个候选标的价格下重新评估每份合约的Gamma,并寻找所得函数的零点。上面的梯度代理没有进行任何重新定价,而是读取某一收盘时点的持仓平衡。本页图表还使用成交量而不是未平仓合约数进行加权,因为成交量是这份每日Greeks数据提供的每份合约权重。形状可能相同,但权重不同。

为什么不同数据商会为同一指数发布不同的水平

上述每一项输入都涉及选择,不同数据商的设定也不同。到期日窗口是差异最明显的一项。下图使用同一交易日的四个到期日区间,重新计算同一估计值。

查询按到期窗口划分的梯级翻转估算,2026年6月单个锚定交易时段
到期天数区间现货收盘价翻转估算值
0 to 1 days746.3745
2 to 7 days746.3744
8 to 30 days746.3746
31 to 90 days746.3745
每个数字背后的完整 SQL
SELECT
    dte_bucket,
    round(any(spot), 2)               AS spot_close,
    round(argMax(strike, running), 2) AS flip_estimate
FROM
(
    SELECT
        dte_bucket,
        bucket_order,
        spot,
        strike,
        sum(net_gamma) OVER (PARTITION BY dte_bucket ORDER BY strike) AS running
    FROM
    (
        SELECT
            multiIf(days_to_expiry <= 1,  '0 to 1 days',
                    days_to_expiry <= 7,  '2 to 7 days',
                    days_to_expiry <= 30, '8 to 30 days',
                                          '31 to 90 days')  AS dte_bucket,
            multiIf(days_to_expiry <= 1, 1,
                    days_to_expiry <= 7, 2,
                    days_to_expiry <= 30, 3, 4)             AS bucket_order,
            toFloat64(strike_price)                         AS strike,
            any(toFloat64(underlying_close))                AS spot,
            sum(multiIf(lower(substring(option_type, 1, 1)) = 'c', -1.0, 1.0)
                * toFloat64(gamma) * volume * 100)          AS net_gamma
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
          AND date = (
                SELECT max(date)
                FROM global_markets.options_greeks
                WHERE underlying_symbol = 'SPY'
                  AND date <= '2026-06-30'
              )
          AND iv_converged = 1
          AND volume > 0
          AND days_to_expiry <= 90
          AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.15
        GROUP BY dte_bucket, bucket_order, strike
    )
)
GROUP BY dte_bucket, bucket_order
ORDER BY bucket_order
自己运行这个查询

零至一天的区间将估计值置于745,而收盘价为746.3。三十一至九十天的区间将估计值置于745。同一套持仓、同一个交易日、同一个公式,却得到四个答案。将所有挂牌到期日相加的仪表板,与只计算最近月合约的仪表板,并未描述同一个量,但两者都不一定错误。

其他参数也同样会产生差异:

  • 权重:前一结算价时的未平仓合约数、盘中更新的未平仓合约数,或成交量。
  • 行权价区间:在截断之前,计算范围延伸到多深的虚值期权。
  • 符号约定:它会重新标记两侧,但不会移动交叉点。
  • 快照时间。
  • 水平是直接基于指数期权计算,还是基于重新缩放后的ETF代理计算。

为什么该水平会在交易时段内移动

当日到期的未平仓合约会在交易时段内产生和注销。零日到期(0DTE)区间是持仓变化最快的部分,目前占指数期权成交量的较大份额,相关内容见0DTE期权及其风险。上午9:45 ET计算的水平,与下午2:00 ET计算的同一水平,所依据的是现货价格附近行权价的不同未平仓合约数;而这些行权价的每份合约Gamma最大。盘中更新数据的数据商会发布一个全天移动的水平。只在前一收盘时点进行快照的数据商,则会发布一个保持不变的水平。

该估计值是否会逐日变化

在2026年6月的21个交易日中,同一梯度估计值与收盘价之间的距离每天都在变化。

查询相对于收盘价的每日梯级翻转估算,SPY,2026年6月
21 rows (showing 20)
日期交易时段标签现货收盘价翻转估算值
2026-06-01Jun 1756.58757
2026-06-02Jun 2759.63759
2026-06-03Jun 3750.55753
2026-06-04Jun 4754.56756
2026-06-05Jun 5735.36742.5
2026-06-08Jun 8738.72742.5
2026-06-09Jun 9735.7735
2026-06-10Jun 10722.88729
2026-06-11Jun 11739.48730
2026-06-12Jun 12742.45740
2026-06-15Jun 15753.91754
2026-06-16Jun 16750.75751
2026-06-17Jun 17745.6744
2026-06-18Jun 18746.94746
2026-06-22Jun 22743.67745
2026-06-23Jun 23735.02734
2026-06-24Jun 24737.2732
2026-06-25Jun 25732.7735
2026-06-26Jun 26731.2733
2026-06-29Jun 29740.76739
每个数字背后的完整 SQL
SELECT
    toString(d)                       AS date,
    formatDateTime(d, '%b %e')        AS session_label,
    round(any(spot), 2)               AS spot_close,
    round(argMax(strike, running), 2) AS flip_estimate
FROM
(
    SELECT
        d,
        spot,
        strike,
        sum(net_gamma) OVER (PARTITION BY d ORDER BY strike) AS running
    FROM
    (
        SELECT
            date                              AS d,
            toFloat64(strike_price)           AS strike,
            any(toFloat64(underlying_close))  AS spot,
            sum(multiIf(lower(substring(option_type, 1, 1)) = 'c', -1.0, 1.0)
                * toFloat64(gamma) * volume * 100) AS net_gamma
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
          AND date BETWEEN '2026-06-01' AND '2026-06-30'
          AND iv_converged = 1
          AND volume > 0
          AND days_to_expiry <= 45
          AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.15
        GROUP BY d, strike
    )
)
GROUP BY d
ORDER BY d
自己运行这个查询

在Jun 1,估计值为757,收盘价为756.58。在Jun 30,估计值为746,而收盘价为746.3。两条线同步变化,这是以成交量集中位置为锚的统计量应有的表现。真正需要观察的是两者之间的差距。

如何检验已发布的翻转位是否合理

  • 确认包含哪些到期日,以及在截断前计算范围延伸到多深的虚值期权。
  • 确认使用何种权重,以及该权重对应的快照时间。
  • 确认计算基于指数本身,还是基于重新缩放后的ETF代理。
  • 在同一交易日重建行权价梯度,观察自己的转向位置是否落在相近区域。两个严谨的构建结果相差30点,说明差异来自方法,而不是市场。
  • 注意精度。指数行权价梯度通常以5点或更大的间距排列,Greeks数据按日提供,因此精确到美分的水平,比其基础数据所支持的精度更高。

常见问题

期权中的Gamma翻转位是什么?

它是总做市商Gamma的估计值穿越零点时对应的标的价格。计算时,为每份合约的Gamma赋予符号,以未平仓合约数加权,再乘以合约乘数并汇总整条期权链。该估计基于公开期权数据,并不反映做市商库存的实际情况。

Gamma翻转位与GEX是同一个概念吗?

不是。GEX是总Gamma数值本身,通常表示为标的每变动1%时Delta对应的美元金额。翻转位则是该总量穿越零点时对应的单一标的价格。GEX是一条曲线,翻转位是曲线上的一个点。

为什么不同仪表板显示的同一指数Gamma翻转位不同?

因为它们采用了不同的输入:到期日窗口、行权价区间、权重及其快照时间、符号约定,以及水平是基于指数期权还是重新缩放后的ETF代理。上面的到期日图表仅改变一项输入,就从同一交易日得出四个不同的估计值。

Gamma翻转位会在交易日内变化吗?

对于会进行盘中更新的构建方式,会变化。当日到期合约的未平仓合约数会在交易时段内产生和注销,而最接近现货价格的行权价具有最大的Gamma权重。只在前一收盘时点进行快照的水平,会保持不变,直到下一次快照。


本页每张图表下方都附有完整且精确的SQL。您可以在Strasmore终端上换用其他代码或交易日重建该梯度,观察转向位置落在哪里。

#gamma#gex#dealer hedging#期权#spx