Qu’est-ce que le niveau de gamma flip ?
Le niveau de gamma flip est le cours où le gamma estimé des dealers passe par zéro. Calcul, strike gamma, open interest et vérification.
Le niveau de gamma flip est le cours du sous-jacent auquel le gamma agrégé estimé des dealers passe par zéro. Au-dessus de ce cours, le book d’options existant implique des flux de couverture qui vont à l’encontre du mouvement. En dessous, les flux l’accompagnent. Ce niveau est produit par un modèle construit à partir de données publiques sur les options et d’une hypothèse majeure sur la détention des positions. L’essentiel est donc de comprendre comment il est calculé.
De quoi se compose un niveau de gamma flip
Le gamma mesure la variation du delta d’une option lorsque le sous-jacent évolue. C’est le sujet de ce qu’est le gamma d’une option. Un desk qui gère un book couvert achète et vend le sous-jacent à mesure que son delta évolue. Le mécanisme est décrit dans le fonctionnement de la couverture en delta. Le gamma détermine l’ampleur de l’ajustement nécessaire de cette couverture pour chaque point de mouvement. En additionnant le gamma de chaque contrat d’une chaîne, avec un signe et un poids pour chacun, on obtient l’exposition au gamma, généralement notée GEX. Le flip est une lecture précise de ce total : le cours du sous-jacent auquel il passe par zéro.
Quatre éléments entrent dans le calcul :
- Le gamma par contrat pour chaque strike et chaque échéance, obtenu par un calcul de Black-Scholes.
- Une convention de signe. Le calcul habituel suppose que les dealers sont short calls et long puts. Le gamma des calls entre donc négativement dans la somme et celui des puts positivement.
- Un poids par contrat. Les niveaux publiés utilisent l’open interest.
- Une étape de mise à l’échelle : le multiplicateur de 100 actions par contrat, puis le carré du spot multiplié par 0,01. Le résultat exprime le total en dollars de delta pour un mouvement de 1 %.
La convention de signe mérite un examen séparé. Supposons l’inverse : des dealers long calls et short puts. Tous les chiffres agrégés changent alors de signe. Le point de passage par zéro ne bouge pas. Ce qui change, c’est le côté du niveau considéré comme positif.
Première étape : le gamma par contrat sur l’échelle des strikes
Le gamma par contrat n’est pas constant sur une chaîne. Il atteint son maximum près du niveau at-the-money et diminue dans les deux directions. Le graphique ci-dessous est calé sur une séance passée précise, la dernière séance de juin 2026 disponible dans ces données. Il présente le gamma moyen par contrat pour les échéances comprises entre 20 et 45 jours, à chaque strike situé dans une bande de 6 % autour de la clôture.
| strike | gamma calls | gamma puts |
|---|---|---|
| 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 |
Le SQL exact derrière chaque chiffre
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_priceAu strike inférieur de cette fenêtre, le gamma moyen des calls s’établit à 0.00523, et à 0.00745 au strike supérieur. Le sommet de la courbe se situe entre les deux, sur 16 strikes. Dans le modèle, le gamma des calls et celui des puts sont identiques pour un même strike et une même échéance. C’est pourquoi les deux séries se superposent sur le graphique. C’est la convention de signe, et non le gamma, qui distingue les deux côtés.
Deuxième étape : signes, poids et point de retournement de la courbe
L’exposition d’un seul contrat est faible. Prenons un strike portant 100 contrats, avec un gamma de 0,02, alors que le sous-jacent cote 600 dollars. En multipliant 0,02 par 100 contrats, par le multiplicateur de 100 actions, par le carré de 600, puis par 0,01, on obtient environ 720 000 dollars de delta pour un mouvement de 1 %. C’est l’unité du graphique suivant, exprimée en millions.
Le graphique parcourt l’échelle des strikes de la même séance de référence, sur toutes les échéances allant jusqu’à 45 jours. La contribution de chaque strike reçoit le signe défini plus haut et est pondérée par le volume de contrats négociés pendant cette séance. La colonne cumulée s’additionne du strike le plus bas vers le haut.
| strike | gamma par strike (M$) | gamma cumulé (M$) |
|---|---|---|
| 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 |
Le SQL exact derrière chaque chiffre
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_numLe strike inférieur de la fenêtre contribue à hauteur de 42.4 millions de dollars de delta pour un mouvement de 1 %, contre -2.5 millions pour le strike supérieur. Sur l’ensemble de la bande de 12 %, le solde atteint -2455.5 millions. Il faut lire la ligne cumulée de gauche à droite. Elle monte tant que les strikes pondérés par les puts dominent, puis se retourne lorsque les strikes pondérés par les calls prennent le dessus. Le cours auquel elle se retourne constitue l’estimation du flip. Chaque étape relève de calculs que le lecteur peut refaire à la main. C’est précisément l’intérêt de cette approche.
Ce que ce niveau ne mesure pas
Cette construction n’observe aucun dealer. L’open interest indique qu’un contrat existe. Il ne dit pas quelle position un market maker détient sur ce contrat. Le projet à l’origine de l’outil GEX open source précise cette limite dans son README. Il décrit le résultat comme une approximation de Black-Scholes calculée à partir de l’open interest et
non comme une mesure des positions réelles des market makers
(README du projet, en septembre 2026)
La couverture des données constitue une deuxième limite. La source gratuite utilisée par cet outil n’expose aucun endpoint de chaîne d’options pour les symboles d’indices cash SPX, XSP, NDX, RUT, DJX et VIX. Ce sont pourtant précisément les symboles sur lesquels les professionnels citent le plus souvent des niveaux de flip. Un niveau publié pour l’un de ces indices a donc été calculé ailleurs, à partir d’une chaîne payante ou d’un proxy ETF. Les options SPX et SPY suivent le même indice avec un ratio notionnel d’environ dix pour un. Un niveau calculé sur l’un doit être recalé avant de décrire l’autre.
La courbe constitue la troisième limite. Un calcul rigoureux du flip réévalue le gamma de chaque contrat à chaque cours possible du sous-jacent, puis recherche le zéro de la fonction obtenue. Le proxy fondé sur l’échelle des strikes ci-dessus ne réévalue rien. Il lit l’équilibre du book tel qu’il se présentait à une clôture donnée. Les graphiques de cette page utilisent aussi le volume négocié plutôt que l’open interest, car le volume constitue le poids par contrat fourni par ces données quotidiennes de greeks. La forme est similaire, mais le poids diffère.
Pourquoi deux fournisseurs publient des niveaux différents pour le même indice
Chaque élément du calcul précédent repose sur un choix, et les fournisseurs ne font pas tous les mêmes. La fenêtre d’échéances est le choix qui produit les écarts les plus visibles. Le graphique ci-dessous recalcule la même estimation sur la même séance, à partir de quatre tranches du calendrier des échéances.
| tranche de DTE | clôture du spot | estimation du flip |
|---|---|---|
| 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 |
Le SQL exact derrière chaque chiffre
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_orderLa tranche de 0 à 1 jour place l’estimation à 745, contre une clôture à 746.3. La tranche de 31 à 90 jours la place à 745. Un seul book, une seule séance, une seule formule, quatre réponses. Un dashboard qui additionne toutes les échéances cotées et un autre qui s’arrête sur le premier mois ne décrivent pas la même grandeur. Aucun des deux n’est nécessairement erroné.
Les autres paramètres produisent le même type d’écart :
- Le poids : open interest à la clôture précédente, open interest actualisé en intraday ou volume négocié.
- La bande de strikes : la distance à laquelle la somme s’étend hors de la monnaie avant d’être tronquée.
- La convention de signe, qui renomme les deux côtés sans déplacer le point de passage.
- L’heure du snapshot.
- Le choix entre un calcul effectué directement sur les options d’indice et un calcul effectué sur un proxy ETF recalé.
Pourquoi le niveau évolue pendant la séance
L’open interest des contrats arrivant à échéance le jour même se constitue et disparaît au cours de la séance. La tranche de 0 à 1 jour est la partie du book qui évolue le plus rapidement. Elle représente désormais une part importante du volume des options sur indices. Ce sujet est traité dans les options 0DTE et leurs risques. Un niveau calculé à 9 h 45 ET et le même niveau calculé à 14 h 00 ET reposent sur des open interests différents pour les strikes les plus proches du spot, là où le gamma par contrat est le plus élevé. Les fournisseurs qui actualisent leurs données en intraday publient un niveau qui se déplace au fil de la séance. Ceux qui prennent un snapshot à la clôture précédente publient un niveau qui reste fixe.
L’estimation évolue-t-elle d’un jour à l’autre ?
Sur les 21 séances de juin 2026, la même estimation fondée sur l’échelle des strikes suit la clôture avec un écart qui varie chaque jour.
| date | libellé de séance | clôture du spot | estimation du flip |
|---|---|---|---|
| 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 |
Le SQL exact derrière chaque chiffre
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 dLe Jun 1, l’estimation s’est établie à 757, contre une clôture à 756.58. Le Jun 30, elle s’est établie à 746, contre 746.3. Les deux séries évoluent ensemble. C’est ce que l’on attend d’une statistique ancrée sur les zones de concentration du volume. L’écart entre les deux séries est l’élément réellement analysé.
Comment vérifier la cohérence d’un niveau de flip publié
- Vérifiez quelles échéances sont incluses et jusqu’à quelle distance hors de la monnaie la somme est calculée avant d’être tronquée.
- Vérifiez le poids utilisé et l’heure à laquelle ce poids a été pris en compte.
- Vérifiez si le calcul porte sur l’indice lui-même ou sur un proxy ETF recalé.
- Reconstituez l’échelle des strikes sur la même séance et vérifiez si votre point de retournement se situe dans la même zone. Deux calculs cohérents qui aboutissent à 30 points d’écart renseignent davantage sur la méthode que sur le marché.
- Examinez la précision affichée. Les échelles de strikes des indices sont espacées de 5 points ou davantage et les greeks sont quotidiens. Un niveau cité au centième est donc plus précis que ne le justifient les données sous-jacentes.
FAQ
Quel est le niveau de gamma flip sur les options ?
Il s’agit du cours du sous-jacent auquel une estimation du gamma total des dealers passe par zéro. L’estimation est construite en attribuant un signe au gamma de chaque contrat, en le pondérant par l’open interest, en appliquant le multiplicateur du contrat, puis en additionnant toute la chaîne. Elle repose sur des données publiques d’options et non sur une observation de l’inventaire des dealers.
Le gamma flip est-il identique au GEX ?
Non. Le GEX est le montant de gamma agrégé lui-même, généralement exprimé en dollars de delta pour un mouvement de 1 %. Le flip est le cours unique du sous-jacent auquel cet agrégat passe par zéro. Le GEX est la courbe ; le flip en est un point.
Pourquoi deux dashboards affichent-ils des niveaux de gamma flip différents pour le même indice ?
Ils utilisent des paramètres différents : la fenêtre d’échéances, la bande de strikes, le poids et l’heure de son snapshot, la convention de signe, ainsi que le choix entre les options d’indice et un proxy ETF recalé. Le graphique des échéances ci-dessus produit quatre estimations différentes à partir d’une seule séance en faisant varier un seul paramètre.
Le niveau de gamma flip change-t-il pendant la séance ?
Oui, pour tout calcul actualisé en intraday. L’open interest des échéances du jour se constitue et disparaît au cours de la séance, et les strikes les plus proches du spot portent le poids de gamma le plus élevé. Un niveau pris une seule fois à la clôture précédente reste inchangé jusqu’au snapshot suivant.
Chaque graphique de cette page comporte la requête SQL exacte en dessous. Reconstituez l’échelle des strikes sur un autre symbole ou une autre séance dans le terminal Strasmore et observez où se situe le retournement.