Strasmore Research
Apprendre Matt ConnorPar Matt Connor · Mis à jour le 2026-08-08

Comment calculer le put/call ratio

Découvrez le calcul du put/call ratio avec les formules du volume et de l’open interest, les niveaux plus élevés des indices et la lecture normale en 2026.

Le put/call ratio se calcule en divisant le nombre de contrats put négociés par le nombre de contrats call négociés sur la même période. Si 250 000 puts et 500 000 calls sont échangés au cours d’une séance, le ratio est de 0,50. Toutes les discussions sur l’indicateur, le volume par rapport à l’open interest, ou les actions par rapport aux indices, renvoient à ce qui a été comptabilisé de chaque côté de cette division. Pour la définition simple, commencez par ce qu’est le put/call ratio. Cette page présente le calcul.

La formule du put/call ratio, étape par étape

La formule comporte deux données et une opération : compter les puts négociés, compter les calls négociés, puis diviser le premier nombre par le second. Un put est un contrat qui donne à son détenteur le droit de vendre 100 actions du sous-jacent à un strike fixé, à la date d’expiration ou avant. Un call donne le droit d’acheter au même type de strike. Le volume comptabilise les contrats échangés pendant la séance. Il revient à zéro à la prochaine ouverture.

Aucune pondération n’est appliquée au décompte. Une position d’un contrat sur un weekly très out of the money compte autant qu’une position d’un contrat sur le strike le plus actif du tableau. Ni l’une ni l’autre n’est ajustée en fonction du capital exposé. Le ratio correspond à un décompte de contrats.

Le choix qui modifie le résultat porte sur les contrats pris en compte. Le tableau ci-dessous applique le même calcul à huit valeurs liquides sur un mois complet.

RequêteVolumes de puts et de calls pour huit valeurs connues, juillet 2026
Le SQL exact derrière chaque chiffre
SELECT
    underlying_symbol                 AS symbol,
    sumIf(volume, right_letter = 'P') AS put_volume,
    sumIf(volume, right_letter = 'C') AS call_volume,
    round(toFloat64(sumIf(volume, right_letter = 'P'))
        / toFloat64(sumIf(volume, right_letter = 'C')), 2) AS put_call_ratio
FROM
(
    SELECT
        underlying_symbol,
        volume,
        substring(ticker, length(ticker) - 8, 1) AS right_letter
    FROM global_markets.options_greeks
    WHERE date >= '2026-07-01'
      AND date <  '2026-08-01'
      AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
      AND volume > 0
)
GROUP BY symbol
HAVING call_volume > 0 AND put_volume > 0
ORDER BY put_call_ratio DESC
Run this yourself

Sur l’ensemble de juillet 2026, IWM affichait le ratio le plus élevé des huit, à 3.11 puts par call, tandis que MSFT enregistrait le plus faible, à 0.38. Une seule formule, un seul mois, et un spread entre les deux extrêmes bien plus large que les variations quotidiennes généralement commentées. Un ratio cité sans sa catégorie apporte presque aucune information.

Fondé sur le volume ou sur l’open interest

Deux décomptes différents peuvent servir au numérateur et au dénominateur.

La version fondée sur le volume compte les contrats négociés pendant la période. Il s’agit d’une mesure de flux qui repart de zéro à chaque séance et décrit ce qui s’est passé aujourd’hui. Tous les ratios mis en avant dans la couverture de marché correspondent à cette version.

La version fondée sur l’open interest divise le nombre de puts en cours par le nombre de calls en cours. L’open interest correspond au nombre de contrats ouverts qui n’ont pas encore été clôturés, exercés ou échus. C’est une mesure de stock : elle reflète la position accumulée, et non l’activité de la séance. Elle évolue lentement. Une séance au cours de laquelle 30 000 puts sont échangés entre deux détenteurs existants ajoute 30 000 au volume, mais laisse l’open interest inchangé. Volume des options et open interest détaille cette comptabilisation.

Prenons un titre hypothétique qui termine mardi avec 40 000 puts et 50 000 calls en cours, soit un ratio d’open interest de 0,80. Mercredi, 30 000 puts et 10 000 calls sont négociés, soit un ratio de volume de 3,00. Les deux chiffres décrivent la même chaîne d’options le même jour. Ils diffèrent presque d’un facteur quatre, et ils sont tous deux corrects. Les ratios d’open interest servent également de base au calcul du max pain, qui pondère les strikes selon les contrats en cours, et non selon les contrats négociés.

Les mesures de flux sont instables. Voici le ratio de volume quotidien d’un ETF et d’une action individuelle sur le même mois.

RequêteRatio quotidien des volumes put/call, SPY contre AAPL, juillet 2026
Le SQL exact derrière chaque chiffre
SELECT
    toString(d)                                                 AS session_date,
    concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
    round(toFloat64(sumIf(volume, sym = 'SPY' AND right_letter = 'P'))
        / toFloat64(sumIf(volume, sym = 'SPY' AND right_letter = 'C')), 2)  AS spy_put_call_ratio,
    round(toFloat64(sumIf(volume, sym = 'AAPL' AND right_letter = 'P'))
        / toFloat64(sumIf(volume, sym = 'AAPL' AND right_letter = 'C')), 2) AS aapl_put_call_ratio
FROM
(
    SELECT
        date                                     AS d,
        underlying_symbol                        AS sym,
        volume,
        substring(ticker, length(ticker) - 8, 1) AS right_letter
    FROM global_markets.options_greeks
    WHERE date >= '2026-07-01'
      AND date <  '2026-08-01'
      AND underlying_symbol IN ('SPY', 'AAPL')
      AND volume > 0
)
GROUP BY d
HAVING countIf(sym = 'SPY' AND right_letter = 'C') > 0
   AND countIf(sym = 'AAPL' AND right_letter = 'C') > 0
ORDER BY d
Run this yourself

Le Jul 1, SPY a affiché 1.1 contre 0.49 pour AAPL. Au Jul 31, les deux valeurs s’établissaient à 2 et 0.55. Sur 22 séances, les prints quotidiens fluctuent fortement, et les deux séries se situent à des niveaux différents sur le graphique. L’écart de niveau est le plus utile de ces deux éléments.

Actions, indices, ETP et total : les quatre ratios de Cboe

Le chiffre cité comme « ratio put/call » provient des statistiques quotidiennes de marché de Cboe, qui en publie plusieurs. Voici les catégories, selon la nomenclature de Cboe :

  • Ratio put/call sur actions : options sur actions individuelles.
  • Ratio put/call sur indices : options sur indices, notamment SPX et VIX.
  • Ratio put/call sur produits négociés en Bourse : options sur ETF, dont SPY, QQQ et IWM.
  • Ratio put/call total : somme de toutes les catégories.

Le calcul est identique dans chaque cas : total des puts divisé par total des calls dans la catégorie concernée. Les chiffres ne diffèrent donc que par le contenu de chaque catégorie. Ces catégories ne sont pas interchangeables.

Les options sur indices sont l’instrument standard pour couvrir l’ensemble d’un portefeuille en une seule opération. Un fonds détenant un portefeuille diversifié d’actions achète des puts sur indices pour se couvrir. Il n’a aucune raison équivalente d’acheter des calls sur indices. Cette demande est donc unidirectionnelle et se retrouve entièrement au numérateur de la catégorie des indices. Les flux sur actions individuelles présentent le biais inverse : les achats de calls sur des titres particuliers représentent une part importante et persistante des volumes. Les deux catégories se situent structurellement à des niveaux différents. Comparer le chiffre de l’une à un benchmark de l’autre est l’erreur la plus courante avec cet indicateur.

Les ETF couvrant l’ensemble du marché jouent le même rôle de couverture que les options sur indices, mais ils sont comptabilisés dans la catégorie des produits négociés en Bourse. Le graphique ci-dessous suit la médiane mensuelle des deux catégories.

RequêteRatio put/call médian mensuel : ETF de marché broad contre actions individuelles
Le SQL exact derrière chaque chiffre
WITH
    daily AS
    (
        SELECT
            d,
            toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))
                / toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')))     AS etf_ratio,
            toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))
                / toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio
        FROM
        (
            SELECT
                date                                     AS d,
                underlying_symbol                        AS sym,
                volume,
                substring(ticker, length(ticker) - 8, 1) AS right_letter
            FROM global_markets.options_greeks
            WHERE date >= '2025-08-01'
              AND date <  '2026-08-01'
              AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
              AND volume > 0
        )
        GROUP BY d
        HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0
           AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0
    )
SELECT
    toString(toStartOfMonth(d))                AS month,
    formatDateTime(toStartOfMonth(d), '%b %Y') AS month_label,
    round(quantileExact(0.5)(etf_ratio), 2)    AS etf_median_ratio,
    round(quantileExact(0.5)(stock_ratio), 2)  AS stock_median_ratio
FROM daily
GROUP BY month, month_label
ORDER BY month
Run this yourself

Le graphique couvre la période de Aug 2025 à Jul 2026. À ses deux extrémités, la médiane du ratio quotidien du panier d’ETF se situait autour de 1,0 ou au-dessus : 1.52 le premier mois et 1.49 le dernier. Le panier d’actions individuelles est resté sous 1,0 aux deux extrémités, à 0.6 et 0.56, sur l’ensemble des 12 mois représentés. Cet écart persistant explique pourquoi un benchmark doit préciser sa catégorie avant de pouvoir être interprété.

Ce qui constitue un put/call ratio normal

La normalité correspond à une fourchette, et cette fourchette dépend d’une catégorie plutôt que de l’indicateur lui-même. Le tableau ci-dessous prend en compte chaque séance des douze derniers mois et indique le ratio quotidien médian pour chaque panier, avec les bornes des 10e et 90e percentiles autour de cette médiane.

RequêtePosition réelle du ratio quotidien, douze mois de séances
Le SQL exact derrière chaque chiffre
WITH
    daily AS
    (
        SELECT
            d,
            toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))
                / toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')))     AS etf_ratio,
            toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))
                / toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio,
            toFloat64(sumIf(volume, right_letter = 'P'))
                / toFloat64(sumIf(volume, right_letter = 'C'))                                      AS all_ratio
        FROM
        (
            SELECT
                date                                     AS d,
                underlying_symbol                        AS sym,
                volume,
                substring(ticker, length(ticker) - 8, 1) AS right_letter
            FROM global_markets.options_greeks
            WHERE date >= '2025-08-01'
              AND date <  '2026-08-01'
              AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
              AND volume > 0
        )
        GROUP BY d
        HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0
           AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0
    )
SELECT
    p.2                                  AS category,
    round(quantileExact(0.1)(p.3), 2)    AS p10_ratio,
    round(quantileExact(0.5)(p.3), 2)    AS median_ratio,
    round(quantileExact(0.9)(p.3), 2)    AS p90_ratio
FROM
(
    SELECT arrayJoin([
        tuple(1, 'Broad market ETFs', etf_ratio),
        tuple(2, 'Single stocks',     stock_ratio),
        tuple(3, 'All eight names',   all_ratio)
    ]) AS p
    FROM daily
)
GROUP BY p.1, p.2
ORDER BY p.1
Run this yourself

Pour le panier d’actions individuelles, le ratio médian par séance s’est établi à 0.58, avec 0.45 au 10e percentile et 0.76 au 90e. Le panier d’ETF du marché dans son ensemble affichait des niveaux plus élevés sur toute la distribution : une médiane de 1.54, entre 1.25 et 1.86.

Alors, 1,20 est-il élevé ? Par rapport au panier d’actions individuelles, un print à 1,20 se situe au-delà du 90e percentile de 0.76, ce qui le rend inhabituel. Par rapport au panier d’ETF, il est proche des niveaux habituels. Par rapport à la catégorie des indices, où se concentre le flux de couverture décrit plus haut, ce même chiffre doit encore être comparé à une autre série de niveaux. Un seul chiffre, mais c’est la catégorie qui tranche avant même toute interprétation.

Ces fourchettes évoluent elles aussi. Les percentiles calculés sur les douze derniers mois décrivent les douze derniers mois. De même, une fourchette de référence reprise d’un article publié il y a dix ans décrit un marché où la combinaison des contrats était différente et où le trading sur des options arrivant à échéance le jour même était presque inexistant. Recalculer les percentiles sur une fenêtre récente est la seule manière rigoureuse de qualifier une lecture d’élevée ou de faible.

L’interprétation est distincte du calcul. Certains voient dans une lecture élevée un positionnement baissier. Les contrarians y voient une couverture devenue trop consensuelle. L’analyse de la portée haussière d’un put/call ratio élevé permet de départager correctement ces deux lectures.

Pourquoi la moyenne mobile à 21 séances

Le ratio d’une seule séance constitue un échantillon réduit d’une série volatile. La version publiée est donc généralement lissée. La convention courante est une moyenne mobile à 21 séances, soit environ un mois de Bourse : additionner les ratios quotidiens des 21 dernières séances, diviser le résultat par 21, puis avancer la fenêtre d’une séance. Il existe aussi des versions à 10 et 50 séances. La durée retenue détermine la part d’un pic survenu en une seule journée qui subsiste.

Deux points sont à retenir. Faire la moyenne de 21 ratios quotidiens ne revient pas au même que diviser le volume mensuel de puts par le volume mensuel de calls. Dans le premier cas, chaque séance a le même poids. Dans le second, les séances les plus actives pèsent davantage. Par ailleurs, une valeur lissée à un niveau extrême a été calculée sur un mois de séances. Elle s’éloigne donc elle aussi lentement de cet extrême.

RequêteRatio put/call quotidien des actions individuelles contre sa moyenne sur 21 séances
Le SQL exact derrière chaque chiffre
WITH
    daily AS
    (
        SELECT
            d,
            toFloat64(sumIf(volume, right_letter = 'P'))
                / toFloat64(sumIf(volume, right_letter = 'C')) AS raw_ratio
        FROM
        (
            SELECT
                date                                     AS d,
                volume,
                substring(ticker, length(ticker) - 8, 1) AS right_letter
            FROM global_markets.options_greeks
            WHERE date >= '2026-01-02'
              AND date <  '2026-08-01'
              AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
              AND volume > 0
        )
        GROUP BY d
        HAVING countIf(right_letter = 'C') > 0
    )
SELECT
    session_date,
    day_label,
    daily_ratio,
    ma21_ratio
FROM
(
    SELECT
        d,
        toString(d)                                                 AS session_date,
        concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
        round(raw_ratio, 2)                                         AS daily_ratio,
        round(avg(raw_ratio) OVER (ORDER BY d ROWS BETWEEN 20 PRECEDING AND CURRENT ROW), 2) AS ma21_ratio
    FROM daily
)
WHERE d >= '2026-04-01'
ORDER BY d
Run this yourself

La ligne en dents de scie représente le ratio quotidien du panier d’actions individuelles. La ligne lisse représente sa moyenne à 21 séances. Lors de la première séance affichée, Apr 1, le print quotidien s’établissait à 1.04, contre 0.81 pour la valeur lissée. Le Jul 31, les deux valeurs étaient respectivement de 0.56 et 0.58. Sur 84 séances, la moyenne parcourt une fraction de la distance couverte par la série brute. C’est précisément l’intérêt de publier le nombre lissé.

Comment ces graphiques sont calculés

Le type de contrat provient directement du symbole de l’option : la lettre placée devant le code de strike à huit chiffres est C pour un call et P pour un put. Seuls les contrats dont le volume a été publié pour la séance sont comptabilisés. Un strike qui n’a fait l’objet d’aucune transaction ne contribue donc à aucun des deux côtés. Le premier graphique divise, pour chaque valeur, le volume total mensuel de puts par le volume total mensuel de calls. Les graphiques suivants calculent d’abord un ratio pour chaque séance, puis synthétisent ces séances, conformément à la méthode de construction d’une moyenne mobile publiée. Paniers : SPY, QQQ et IWM pour le marché dans son ensemble ; AAPL, MSFT, NVDA, TSLA et KO pour les valeurs individuelles. Chaque graphique contient la requête SQL exacte qui a servi à le produire.

FAQ

Comment calcule-t-on le put/call ratio ?

Divisez le nombre de contrats put par le nombre de contrats call sur la même période. Les versions publiées utilisent généralement le volume de la séance. Une valeur de 0,65 signifie donc que 65 puts ont été négociés pour 100 calls. La version fondée sur l’open interest utilise les contrats en circulation, et répond à une autre question.

Un put/call ratio supérieur à 1 est-il élevé ?

Cela dépend de la catégorie. Pour le panier d’actions individuelles présenté dans les graphiques ci-dessus, le 90e percentile des valeurs quotidiennes se situe à 0.76. Les prints supérieurs à ce niveau sont donc rares. Pour les ETF de marché large et les options sur indices, où la couverture des portefeuilles se concentre sur les puts, des valeurs proches de 1 ou supérieures à 1 sont courantes.

Quelle est la différence entre le put/call ratio fondé sur le volume et celui fondé sur l’open interest ?

Le volume comptabilise les contrats négociés pendant la séance et repart de zéro chaque matin. L’open interest comptabilise les contrats qui restent ouverts et se reporte d’un jour à l’autre. La version fondée sur le volume peut doubler au cours d’une même séance, tandis que l’open interest ne varie que de quelques pour cent. Les deux indicateurs peuvent donc évoluer en sens opposé le même jour.

Quel put/call ratio la presse financière cite-t-elle ?

Il s’agit généralement du put/call ratio actions du Cboe ou du put/call ratio total. La presse le présente le plus souvent sous la forme d’une moyenne mobile sur 21 séances, plutôt que comme un print quotidien brut. Les quatre catégories du Cboe évoluent à des niveaux différents. Un chiffre cité sans catégorie ne peut donc pas être comparé à un benchmark.


Chaque graphique de cette page est accompagné du SQL qui l’a produit. Chaque décompte peut ainsi être vérifié ligne par ligne. Pour appliquer le même calcul à une autre valeur ou sur une période plus longue, formulez votre demande en anglais courant dans le terminal Strasmore.

#put call ratio#options#sentiment#cboe#options volume