ガンマ・フリップ水準とは?
ガンマ・フリップ水準の意味、行使価格別ガンマと建玉からの計算方法、符号の仮定、モデル出力を確認する具体的な方法を解説します。
ガンマ・フリップ水準とは、ディーラーの推定ガンマ合計がゼロを跨ぐ原資産価格です。その価格を上回ると、既存のオプション・ブックは値動きに逆らうヘッジフローを示します。下回ると、値動きに追随するフローを示します。この水準は、公開オプションデータに、「誰が何を保有しているか」という大きな仮定を一つ加えて組み立てたモデル出力です。したがって、重要なのはその作り方です。
ガンマ・フリップ水準の構成要素
ガンマとは、原資産が動いたときにオプションのデルタが変化する割合です。詳しくはオプション・ガンマとは何かで説明しています。ヘッジ付きブックを運用するデスクは、デルタが変化すると原資産を売買します。その仕組みはデルタヘッジの仕組みで扱っています。ガンマは、原資産が1ポイント動くごとにヘッジをどれだけ変更する必要があるかを決めます。チェーン内の全契約について、符号とウェイトを付けてガンマを合計すると、ガンマ・エクスポージャー(通常はGEXと表記)になります。フリップとは、その合計がゼロを通過する原資産価格という、合計値の特定の読み方です。
必要な入力は四つです。
- 各行使価格・満期における契約当たりのガンマ。Black-Scholes計算から求めます。
- 符号の convention。通常の構築では、ディーラーがコールをショートし、プットをロングしていると仮定します。そのため、コールのガンマは合計にマイナス、プットのガンマはプラスで入ります。
- 契約ごとのウェイト。公表水準では建玉を使います。
- スケーリング。100株の契約乗数を掛け、さらに現物価格の二乗と0.01を掛けます。これにより、1%の値動きに対するデルタの総額をドルで表します。
符号の conventionは、もう一度確認する必要があります。逆に、ディーラーがコールをロングし、プットをショートしていると仮定すると、合計値のすべての数値の符号が反転します。ただし、ゼロを跨ぐ価格は変わりません。変わるのは、その水準のどちら側をプラスと呼ぶかです。
ステップ1:行使価格ごとの契約当たりガンマ
契約当たりのガンマは、チェーン全体で一定ではありません。アット・ザ・マネー付近で最大になり、上下両方向に離れるほど低下します。下のパネルは、特定の過去セッションに固定しています。このデータに収録された2026年6月の最終セッションを対象とし、終値から6%以内にある各行使価格について、20日から45日の満期の契約当たりガンマを平均しています。
| 権利行使価格 | コール・ガンマ | プット・ガンマ |
|---|---|---|
| 705 | 0.00523 | 0.00512 |
| 710 | 0.00575 | 0.00589 |
| 715 | 0.00653 | 0.00678 |
| 720 | 0.00766 | 0.00776 |
| 725 | 0.00844 | 0.00888 |
| 730 | 0.00946 | 0.01002 |
| 735 | 0.0107 | 0.01137 |
| 740 | 0.01198 | 0.01239 |
| 745 | 0.01268 | 0.01344 |
| 750 | 0.01377 | 0.0142 |
| 755 | 0.01379 | 0.01446 |
| 760 | 0.01364 | 0.01404 |
| 765 | 0.01253 | 0.01204 |
| 770 | 0.01118 | 0.0112 |
| 775 | 0.00929 | 0.00957 |
| 780 | 0.00745 | 0.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この範囲の最も低い行使価格では、平均コール・ガンマは0.00523です。最も高い行使価格では0.00745で、16個の行使価格にわたって、その間に山が形成されています。同じ行使価格・満期では、モデル上、コールとプットのガンマは同じ値です。そのため、パネルの二つの系列は重なっています。両者を分けるのはガンマではなく、符号の conventionです。
ステップ2:符号、ウェイト、曲線が転換する位置
一契約のエクスポージャーは小さいものです。原資産が600ドルのとき、ガンマ0.02で100契約ある行使価格を考えます。0.02に100契約、100株の契約乗数、600の二乗、0.01を掛けると、1%の値動きに対するデルタはおよそ72万ドルになります。次のパネルは、この単位を百万ドルで示しています。
このパネルは、同じ固定セッションについて、45日以内の全満期を含めて行使価格の並びを示しています。各行使価格の寄与には、先ほどの conventionに基づく符号を付け、そのセッションの取引契約数量でウェイトを付けています。累積列は、最も低い行使価格から上に向かって積み上げています。
| 権利行使価格 | 権利行使価格別ガンマ(百万ドル) | 累積ガンマ(百万ドル) |
|---|---|---|
| 705 | 42.4 | 42.4 |
| 710 | 130.8 | 173.2 |
| 715 | 41 | 214.2 |
| 720 | 99.8 | 314 |
| 725 | 200.1 | 514.1 |
| 730 | 253.4 | 767.5 |
| 735 | 442.2 | 1209.7 |
| 740 | 1162.1 | 2371.8 |
| 745 | 1536.8 | 3908.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百万ドルです。最も高い行使価格は-2.5百万ドルです。12%の範囲全体では、合計が-2455.5百万ドルになります。累積線を左から右へ読むと、プットのウェイトが付いた行使価格が優勢な間は上昇し、コールのウェイトが付いた行使価格が均衡を逆転させると横ばいに転じます。その転換点の価格がフリップ推定値です。これはすべて、読者が手計算で再現できる帳簿処理です。そこに意味があります。
この水準で分からないこと
この構築方法のどこにも、ディーラーの実際の情報は含まれていません。建玉は契約が存在することを示すだけです。その契約のどちら側をマーケットメーカーが保有しているかは示しません。オープンソースのGEXダッシュボードのプロジェクトは、READMEでこの限界を明記しています。出力について、次のように説明しています。
実際のマーケットメーカーのポジションを測るものではない
(2026年9月時点のプロジェクトREADME)
二つ目の不足はカバレッジです。このダッシュボードの基盤となる無料データソースは、現物指数シンボルであるSPX、XSP、NDX、RUT、DJX、VIXのオプションチェーン・エンドポイントを公開していません。これらは、実務家がフリップ水準を最も頻繁に参照するシンボルです。これらのいずれかについて公表された水準は、別の場所で、有料のチェーンデータまたはETFの代替指標を使って計算されたものです。SPXとSPYのオプションは、おおむね十対一の想定元本比率で同じ指数を追跡します。一方を基にした水準で他方を説明するには、再スケーリングが必要です。
三つ目は曲線そのものです。適切なフリップ計算では、候補となる原資産価格ごとに全契約のガンマを再評価し、その関数がゼロになる点を求めます。上の行使価格ラダーによる proxyは再評価を行いません。一つの終値時点でのブックの需給バランスを読んでいるだけです。ここでのパネルは、建玉ではなく取引数量でウェイトを付けています。この日次ギリシャ指標データが契約ごとのウェイトとして持つのが取引数量だからです。形状は同じでも、ウェイトは異なります。
同じ指数について二つの業者が異なる水準を公表する理由
上記の入力はすべて選択事項であり、業者ごとに設定が異なります。最も大きな違いは満期の範囲です。下のパネルは、同じセッションについて、満期カレンダーを四つの区分に分けて同じ推定値を再計算したものです。
| 満期までの日数区分 | スポット終値 | フリップ推定値 |
|---|---|---|
| 0 to 1 days | 746.3 | 745 |
| 2 to 7 days | 746.3 | 744 |
| 8 to 30 days | 746.3 | 746 |
| 31 to 90 days | 746.3 | 745 |
各数値の背後にある正確な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_order0日から1日の区分では、終値746.3に対して推定値は745です。31日から90日の区分では745です。一つのブック、一つのセッション、一つの計算式から、四つの答えが出ます。上場されているすべての満期を合計するダッシュボードと、期近限月で止めるダッシュボードは、同じ数量を説明していません。どちらも誤りではありません。
その他の設定も同様です。
- ウェイト:前日の清算値時点の建玉、日中に更新した建玉、または取引数量。
- 行使価格の範囲:合計に含める範囲を、アウト・オブ・ザ・マネーのどこまで広げるか。
- 符号の convention。ゼロを跨ぐ位置を動かさず、両側の呼び方だけを変えます。
- スナップショットの時刻。
- 水準を指数オプションから直接算出するか、ETF proxyから再スケーリングして算出するか。
セッション中に水準が動く理由
当日満期の建玉は、セッション中に新たに作られ、消滅します。0日から1日の区分はブックの中で最も速く動く部分です。現在では指数オプション取引数量の大きな割合を占めています。このテーマは0DTEオプションとそのリスクで扱っています。米東部時間午前9時45分に計算した水準と、午後2時に計算した同じ水準は、現物価格に近い行使価格で異なる建玉を基にしています。そこでは契約当たりのガンマが最大になります。日中に更新する業者は、一日を通じて動く水準を公表します。前日の終値時点で一度だけ取得する業者は、次のスナップショットまで動かない水準を公表します。
推定値は日ごとに動くのか
2026年6月の21セッションにわたり、同じ行使価格ラダーによる推定値は、日々変化する距離を保ちながら終値を追跡しています。
| 日付 | セッション名 | スポット終値 | フリップ推定値 |
|---|---|---|---|
| 2026-06-01 | Jun 1 | 756.58 | 757 |
| 2026-06-02 | Jun 2 | 759.63 | 759 |
| 2026-06-03 | Jun 3 | 750.55 | 753 |
| 2026-06-04 | Jun 4 | 754.56 | 756 |
| 2026-06-05 | Jun 5 | 735.36 | 742.5 |
| 2026-06-08 | Jun 8 | 738.72 | 742.5 |
| 2026-06-09 | Jun 9 | 735.7 | 735 |
| 2026-06-10 | Jun 10 | 722.88 | 729 |
| 2026-06-11 | Jun 11 | 739.48 | 730 |
| 2026-06-12 | Jun 12 | 742.45 | 740 |
| 2026-06-15 | Jun 15 | 753.91 | 754 |
| 2026-06-16 | Jun 16 | 750.75 | 751 |
| 2026-06-17 | Jun 17 | 745.6 | 744 |
| 2026-06-18 | Jun 18 | 746.94 | 746 |
| 2026-06-22 | Jun 22 | 743.67 | 745 |
| 2026-06-23 | Jun 23 | 735.02 | 734 |
| 2026-06-24 | Jun 24 | 737.2 | 732 |
| 2026-06-25 | Jun 25 | 732.7 | 735 |
| 2026-06-26 | Jun 26 | 731.2 | 733 |
| 2026-06-29 | Jun 29 | 740.76 | 739 |
各数値の背後にある正確な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 dJun 1には、終値756.58に対して推定値は757でした。Jun 30には、終値746.3に対して746でした。二つの系列が連動するのは、取引数量が集中する位置に連動した統計値であれば自然な動きです。両者の差が、実際に読み取るべき部分です。
公表されたフリップ水準の妥当性を確認する方法
- 含まれる満期と、合計を打ち切るまでにどこまでアウト・オブ・ザ・マネーを含めるかを確認します。
- 使用するウェイトと、そのウェイトを取得した時刻を確認します。
- 指数そのもので計算したのか、ETF proxyで計算して再スケーリングしたのかを確認します。
- 同じセッションについて行使価格ラダーを再構築し、自分の転換点が同じ範囲に入るかを確認します。二つの適切な構築方法で30ポイント離れた結果が出るなら、それは市場ではなく手法の違いを示しています。
- 精度を確認します。指数の行使価格ラダーは5ポイント以上の間隔で設定され、ギリシャ指標は日次です。そのため、セント単位で示された水準は、その基礎データが持つ精度を超えています。
FAQ
オプションにおけるガンマ・フリップ水準とは何ですか?
ディーラーのガンマ合計の推定値がゼロを跨ぐ原資産価格です。各契約のガンマに符号を付け、建玉でウェイトを付け、契約乗数でスケーリングし、チェーン全体を合計して算出します。ディーラーの在庫に関する見解ではなく、公開オプションデータに基づいています。
ガンマ・フリップはGEXと同じものですか?
いいえ。GEXは通常、1%の値動きに対するデルタのドル額で示す、ガンマ合計そのものです。フリップは、その合計値がゼロを通過する単一の原資産価格です。GEXが曲線で、フリップはその曲線上の一点です。
同じ指数について二つのダッシュボードが異なるガンマ・フリップ水準を示すのはなぜですか?
満期の範囲、行使価格の範囲、ウェイトとその取得時刻、符号の convention、指数オプションを使うか再スケーリングしたETF proxyを使うかが異なるためです。上の満期パネルでは、一つの入力だけを変えることで、一つのセッションから四つの異なる推定値が得られています。
ガンマ・フリップ水準は取引時間中に変わりますか?
日中に更新する構築方法であれば、変わります。当日満期の建玉はセッション中に新たに作られ、消滅します。また、現物価格に最も近い行使価格ほどガンマのウェイトが大きくなります。前日の終値時点で一度だけ取得した水準は、次のスナップショットまで維持されます。
このページのすべてのパネルには、その下に完全なSQLを掲載しています。Strasmore terminalで別のシンボルや別のセッションについてラダーを再構築し、転換点がどこに現れるかを確認してください。