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

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 :

  1. Le gamma par contrat pour chaque strike et chaque échéance, obtenu par un calcul de Black-Scholes.
  2. 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.
  3. Un poids par contrat. Les niveaux publiés utilisent l’open interest.
  4. 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.

RequêteGamma moyen par contrat selon le strike, SPY, une séance de juin 2026 avec cours ancré
strikegamma callsgamma puts
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
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_price
Essayez cette requête

Au 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.

RequêteGamma net signé par strike et cumul, delta en $mm par mouvement de 1 %
strikegamma par strike (M$)gamma cumulé (M$)
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
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_num
Essayez cette requête

Le 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.

RequêteEstimation du flip du ladder par fenêtre d’échéance, une séance de juin 2026 avec cours ancré
tranche de DTEclôture du spotestimation du flip
0 to 1 days746.3745
2 to 7 days746.3744
8 to 30 days746.3746
31 to 90 days746.3745
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_order
Essayez cette requête

La 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.

RequêteEstimation quotidienne du flip du ladder par rapport à la clôture, SPY, juin 2026
21 rows (showing 20)
datelibellé de séanceclôture du spotestimation du flip
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
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 d
Essayez cette requête

Le 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.

#gamma#gex#dealer hedging#options#spx