Qu’est-ce que le niveau de gamma flip ?
Le gamma flip est le cours où le gamma estimé des dealers passe par zéro. Calcul, strike gamma, open interest et vérification du niveau.
Le niveau de gamma flip est le cours du sous-jacent auquel le gamma agrégé estimé des dealers franchit 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 vont dans le même sens que le mouvement. Ce niveau est un résultat de modèle construit à partir de données publiques sur les options et d’une hypothèse majeure sur la répartition 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 présenté dans le fonctionnement de la couverture en delta. Le gamma détermine l’ampleur de l’ajustement de cette couverture pour chaque point de variation. 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 correspond à une lecture précise de ce total : le cours du sous-jacent auquel il franchit zéro.
Quatre éléments entrent dans le calcul :
- Le gamma par contrat à chaque strike et chaque échéance, calculé avec Black-Scholes.
- Une convention de signe. Le calcul standard 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 spot au carré multiplié par 0,01. Le résultat exprime le montant total en dollars de delta pour un mouvement de 1 %.
La convention de signe mérite un examen séparé. Si l’on retient l’hypothèse inverse, avec des dealers long calls et short puts, tous les chiffres agrégés changent de signe. Le point de franchissement de zéro ne bouge pas. Ce qui change, c’est le côté du niveau qualifié de 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 un maximum près du cours du sous-jacent et diminue dans les deux directions. Le panneau ci-dessous est fixé sur une séance passée donnée, 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 de 20 à 45 jours, à chaque strike situé dans une fourchette de 6 % autour de la clôture.
| strike | gamma des calls | gamma des 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 ressort à 0.00523, et au strike supérieur à 0.00745. Le sommet se situe entre les deux, sur 16 strikes. Dans le modèle, le gamma des calls et des puts au même strike et à la même échéance est identique. C’est pourquoi les deux séries du panneau se superposent. 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 associé à 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 600 au carré, puis par 0,01, on obtient environ 720 000 dollars de delta pour un mouvement de 1 %. C’est l’unité du panneau suivant, exprimée en millions de dollars.
Le panneau 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 est affectée d’un signe selon la convention ci-dessus et pondérée par le volume de contrats négociés lors de cette séance. La colonne cumulée additionne les contributions depuis le strike le plus bas.
| strike | gamma par strike (M$) | gamma cumulée (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 %. Le strike supérieur contribue à hauteur de -2.5 millions. Sur l’ensemble de la bande de 12 %, l’échelle produit un solde de -2455.5 millions. Lisez la courbe cumulée de gauche à droite : elle monte lorsque 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 d’un calcul que le lecteur peut refaire à la main. C’est précisément l’objectif.
Ce que ce niveau ne mesure pas
Aucun élément de ce calcul n’observe directement un dealer. L’open interest indique qu’un contrat existe. Il ne précise pas quel côté du contrat détient un market maker. Le projet à l’origine de l’outil GEX open source indique 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 de données gratuite utilisée par cet outil ne fournit aucun endpoint de chaîne d’options pour les symboles des indices cash SPX, XSP, NDX, RUT, DJX et VIX. Ce sont pourtant précisément les symboles pour lesquels les professionnels citent le plus souvent des niveaux de flip. Un niveau publié pour l’un de ces indices a été calculé ailleurs, à partir d’une chaîne payante ou d’un proxy ETF. Les options SPX et SPY suivent le même indice selon un ratio notionnel d’environ dix pour un. Un niveau calculé sur l’un doit être redimensionné avant de pouvoir 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 candidat 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 était à une clôture donnée. Les panneaux utilisent également le volume négocié plutôt que l’open interest, car le volume est le poids par contrat fourni par ces données quotidiennes de greeks. La forme est similaire, mais le poids est différent.
Pourquoi deux fournisseurs publient des niveaux différents pour le même indice
Chaque donnée d’entrée ci-dessus correspond à un choix, et les fournisseurs ne font pas les mêmes choix. La fenêtre d’échéances est le plus visible. Le panneau ci-dessous recalcule la même estimation, sur la même séance, à partir de quatre segments 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 même book, une même séance, une même formule, quatre réponses. Un dashboard qui additionne toutes les échéances cotées et un autre qui s’arrête au premier mois ne décrivent pas la même grandeur. Aucun des deux n’est nécessairement faux.
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 dans le hors-la-monnaie jusqu’à laquelle la somme est calculée avant d’être tronquée.
- La convention de signe, qui renomme les deux côtés sans déplacer le point de franchissement.
- L’heure du snapshot.
- La source du niveau : options sur l’indice directement ou proxy ETF redimensionné.
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 un open interest différent aux 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 évolue au fil de la séance. Ceux qui prennent un snapshot à la clôture précédente publient un niveau qui reste stable.
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 une distance 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, comme le fait une statistique ancrée sur les zones où le volume se concentre. L’écart entre les deux constitue l’information réellement analysée.
Comment vérifier la cohérence d’un niveau de gamma flip publié
- Demandez quelles échéances sont incluses et jusqu’à quelle distance dans le hors-la-monnaie la somme est calculée avant d’être tronquée.
- Demandez quel poids est utilisé et à quelle heure ce poids a été relevé.
- Vérifiez si le calcul porte directement sur l’indice ou sur un proxy ETF redimensionné.
- Reconstruisez 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 vous renseignent sur la méthode, pas sur le marché.
- Tenez compte du niveau de précision. Les échelles de strikes des indices sont espacées de 5 points ou davantage et les greeks sont quotidiens. Un niveau affiché au centième est donc plus précis que les données qui le sous-tendent.
FAQ
Qu’est-ce que le niveau de gamma flip sur les options ?
Il s’agit du cours du sous-jacent auquel une estimation du gamma total des dealers franchit zéro. L’estimation est obtenue en affectant un signe au gamma de chaque contrat, en le pondérant par l’open interest, en appliquant le multiplicateur du contrat, puis en additionnant la chaîne. Elle provient de données publiques sur les options et non d’une observation de l’inventaire des dealers.
Le gamma flip est-il la même chose que le GEX ?
Non. Le GEX est le montant agrégé de gamma 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 franchit 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 la source du niveau, options sur l’indice ou proxy ETF redimensionné. Le panneau consacré aux échéances ci-dessus produit quatre estimations différentes à partir d’une même séance, en faisant varier un seul paramètre.
Le niveau de gamma flip change-t-il pendant la séance ?
Pour tout calcul actualisé en intraday, oui. L’open interest des échéances du jour se constitue et disparaît pendant la séance, tandis que les strikes les plus proches du spot portent le poids de gamma le plus important. Un niveau relevé une seule fois à la clôture précédente reste inchangé jusqu’au snapshot suivant.
Chaque panneau de cette page affiche la requête SQL exacte utilisée en dessous. Reconstruisez l’échelle des strikes sur un autre symbole ou une autre séance dans le terminal Strasmore et observez où se situe le retournement.