Strasmore Research
Apprendre Matt ConnorPar Matt Connor

Prix des event contracts et probabilités

Un event contract paie 1 $ ou 0 $, son prix indique donc une probabilité. Découvrez pourquoi Yes plus No dépasse 1 $ et comment retirer le spread.

Le prix d’un event contract correspond à une probabilité à laquelle s’ajoute un spread. Le contrat verse 1,00 $ si l’issue annoncée se réalise et 0,00 $ dans le cas contraire. C’est ce versement fixe qui rend le calcul possible : un prix de 30 cents pour un contrat versant un dollar signifie que le marché évalue la probabilité à environ 30 %. Pour interpréter correctement ce chiffre, il faut tenir compte du spread et des mécanismes qui déterminent le règlement.

Ce que le prix d’un event contract indique sur la probabilité

Tout découle du paiement. Achetez un contrat Yes au prix p et vous percevez 1,00 $ si l’issue est résolue à Yes, et rien si elle est résolue à No. Sur un grand nombre de répétitions, le paiement moyen correspond à la probabilité réelle de Yes. En payant exactement cette probabilité, vous atteignez le point mort. Le prix payé est la probabilité au point mort, d’où le fait qu’un même nombre représente les deux.

Quatre termes, définis une fois pour toutes :

  • Contrat Yes : verse 1,00 $ si l’événement se produit, et 0,00 $ dans le cas contraire.
  • Contrat No : verse 1,00 $ si l’événement ne se produit pas. Yes et No sont les deux faces d’une même pièce.
  • Règlement : moment où le contrat est résolu et où l’une des parties perçoit le dollar.
  • Source de résolution : rapport ou flux nommé sur lequel se fonde le règlement du contrat. Le paiement dépend de ce qu’indique cette source, et non de ce qui s’est effectivement produit.

Les cotations des event contracts ne font pas partie du jeu de données utilisé pour cette page. Chaque panneau ci-dessous mesure le même calcul lorsqu’il peut être mesuré directement, à savoir sur les listed US equity options. Le delta d’un call évolue de 0 à 1 et approxime la probabilité implicite du marché que le contrat arrive à échéance in the money. C’est la même question binaire que celle posée par un event contract : le niveau sera-t-il dépassé à la date de règlement, ou non ? Le delta constitue une approximation de cette probabilité, fondée sur une mesure risk-neutral et non sur une prévision. Ces deux limites apparaissent dans les panneaux. Le guide du delta d’une option présente cette mesure.

Pourquoi les positions Yes et No totalisent-elles plus de 1 $ ?

Une position Yes et sa position No correspondante couvrent l’ensemble des issues possibles, et une seule des deux est gagnante. Dans une chaîne d’options, cette même paire correspond à un call et à un put ayant le même strike et la même échéance : le call finit dans la monnaie au-dessus du strike, et le put finit dans la monnaie en dessous. Leurs probabilités doivent totaliser 100 %. Voici cette paire sur une chaîne SPY, pour une seule séance, regroupée en bandes de 2 % autour du cours au comptant.

RequêteProbabilités Oui et Non sur une chaîne SPY : côté call, côté put et total de la paire
Le SQL exact derrière chaque chiffre
WITH chain AS (
    SELECT strike_price,
           toFloat64(any(underlying_close)) AS spot,
           avgIf(delta, delta > 0) AS call_delta,
           avgIf(-delta, delta < 0) AS put_delta_abs,
           countIf(delta > 0) AS calls,
           countIf(delta < 0) AS puts
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date = toDate('2026-06-30')
      AND expiration_date = toDate('2026-07-31')
      AND iv_converged = 1
      AND volume > 0
    GROUP BY strike_price
    HAVING calls > 0 AND puts > 0
),
banded AS (
    SELECT toInt32(round(100 * (toFloat64(strike_price) / spot - 1) / 2) * 2) AS band,
           call_delta,
           put_delta_abs
    FROM chain
)
SELECT concat(if(band > 0, '+', ''), toString(band), '% vs spot') AS strike_vs_spot,
       round(100 * avg(call_delta), 1) AS yes_prob_pct,
       round(100 * avg(put_delta_abs), 1) AS no_prob_pct,
       round(100 * avg(call_delta + put_delta_abs), 1) AS pair_total_pct,
       count() AS strikes
FROM banded
WHERE abs(band) <= 8
GROUP BY band
ORDER BY band
Run this yourself

À -8% vs spot, le côté call affiche 91.6% et le côté put 7.8%, soit un total de 99.5% pour la paire. À l’extrémité de l’échelle, +6% vs spot, les deux affichent 3.6% et 82.5%, pour un total de 86.2%. Toutes les bandes 8 aboutissent à un total proche de 100 %, après arrondi. Cette ligne horizontale sur le graphique est la contrainte à laquelle est soumis tout marché binaire. Le positionnement agrégé sur les deux côtés est ce que mesure le ratio put/call.

Les valeurs des modèles sont cohérentes. Les cotations, elles, ne le sont pas nécessairement. Supposons qu’un contrat soit coté avec un bid à 62 et un ask à 66, et que sa position No affiche un bid à 36 et un ask à 40. Acheter Yes à 66 et No à 40 revient à payer 1,06 $ pour une position qui rapportera nécessairement 1,00 $. Vendre les deux au bid permet d’encaisser 98 cents contre une obligation de 1,00 $. L’écart de 6 cents entre les deux asks est l’overround, que les parieurs sportifs appellent le vig. C’est la rémunération de la plateforme et du market maker pour assurer cette liquidité. La page consacrée au bid-ask spread explique pourquoi cet écart existe.

Le calcul du retrait de la marge, étape par étape

Deux prix cotés entrent dans le calcul. Deux probabilités théoriques dont la somme vaut un en sortent.

  1. Prenez le mid de chaque côté. Le mid du Oui est de 64 cents et celui du Non de 38 cents.
  2. Additionnez-les. Le carnet totalise 102 cents.
  3. Divisez chaque mid par ce total. 64 / 102 donne 62,7 %. 38 / 102 donne 37,3 %.
  4. Vérifiez la somme. Le total est désormais de 100 %.

C’est tout ce que signifie le retrait de la marge, ou de-vigging. Il s’agit de la même normalisation que celle qu’applique un parieur aux cotes décimales.

Appliquez maintenant le calcul à un marché plus liquide. Le même contrat est coté avec un bid à 63 et un ask à 64, tandis que le Non est à 36 au bid et à 37 à l’ask. Les mids sont de 63,5 et 36,5. Le carnet totalise exactement 100 cents et la probabilité après retrait de la marge est de 63,5 %. Les deux résultats, 62,7 % pour le marché large et 63,5 % pour le marché plus serré, sont séparés de moins d’un point. La fourchette crédible autour de ces résultats ne l’est pas. Toute probabilité comprise entre le bid à 62 cents et l’ask à 66 cents est compatible avec la cotation large. Un spread de 4 cents ne permet donc de cerner la probabilité qu’à environ 4 points près, et pas davantage. Écrire « 62,7 % » à partir d’un marché avec un spread de 4 cents donne trois chiffres de précision que le marché ne contient pas. La largeur du spread détermine la précision.

Does a 30% price mean it happens 30% of the time?

Calibration is the test: gather everything the market priced near 30%, then count how often it happened. Every SPY call contract on file from January 2022, snapshotted about 30 days before expiry, sorted into implied probability buckets, against whether SPY closed above that strike on the expiration date.

RequêteProbabilité implicite vs résultat réalisé : calls SPY à 30 jours de l’échéance, de 2022 à juin 2026
Le SQL exact derrière chaque chiffre
WITH px AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session
),
snap AS (
    SELECT ticker AS contract,
           argMin(delta, abs(days_to_expiry - 30)) AS implied_prob,
           toFloat64(any(strike_price)) AS strike,
           any(expiration_date) AS expiry
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= toDate('2022-01-01')
      AND expiration_date <= toDate('2026-06-30')
      AND days_to_expiry BETWEEN 25 AND 35
      AND iv_converged = 1
      AND volume > 0
      AND delta > 0.02
      AND delta < 0.98
    GROUP BY contract
)
SELECT multiIf(implied_prob < 0.10, '2-10%',
               implied_prob < 0.20, '10-20%',
               implied_prob < 0.30, '20-30%',
               implied_prob < 0.40, '30-40%',
               implied_prob < 0.50, '40-50%',
               implied_prob < 0.60, '50-60%',
               implied_prob < 0.70, '60-70%',
               implied_prob < 0.80, '70-80%',
               implied_prob < 0.90, '80-90%',
                                    '90-98%') AS implied_bucket,
       count() AS contracts,
       round(100 * avg(implied_prob), 1) AS implied_prob_pct,
       round(100 * avg(close_px > strike), 1) AS finished_above_pct
FROM snap
INNER JOIN px ON px.session = snap.expiry
GROUP BY implied_bucket
ORDER BY implied_prob_pct
Run this yourself

The implied column rises across the ladder by construction. The realized column is the part nobody knew in advance. At the bottom, the 2-10% bucket averaged 4.7% implied across 4276 contracts and finished above its strike 4.9% of the time. At the top, 90-98% averaged 94.3% and landed 97.8%. The realized share at the bottom of the ladder sits far below the realized share at the top, which is what calibration looks like when it roughly holds.

Two caveats travel with any table like this. The window matters: a sample covering mostly rising prices lifts the realized column on every call bucket, and a different period moves the same measurement. And delta answers what probability makes the pricing internally consistent, not what any forecaster believes. The same chain prices a whole distribution rather than one threshold (the expected move).

Narrowing to contracts the market called a coin flip, near 50 cents on the dollar, across six household names:

RequêteContrats proches d’un pile ou face : résultat implicite vs réalisé par valeur, de 2023 à juin 2026
Le SQL exact derrière chaque chiffre
WITH px AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2023-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
snap AS (
    SELECT underlying_symbol AS symbol,
           ticker AS contract,
           argMin(delta, abs(days_to_expiry - 30)) AS implied_prob,
           toFloat64(any(strike_price)) AS strike,
           any(expiration_date) AS expiry
    FROM global_markets.options_greeks
    WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
      AND date >= toDate('2023-01-01')
      AND expiration_date <= toDate('2026-06-30')
      AND days_to_expiry BETWEEN 25 AND 35
      AND iv_converged = 1
      AND volume > 0
      AND delta BETWEEN 0.40 AND 0.60
    GROUP BY symbol, contract
)
SELECT snap.symbol AS symbol,
       count() AS contracts,
       round(100 * avg(implied_prob), 1) AS implied_prob_pct,
       round(100 * avg(close_px > strike), 1) AS finished_above_pct
FROM snap
INNER JOIN px ON px.ticker = snap.symbol AND px.session = snap.expiry
GROUP BY symbol
ORDER BY finished_above_pct DESC
Run this yourself

Implied probability sits near 50% in every row by construction. The realized column spreads out: SPY finished above its strike 68.4% of the time across 4785 contracts, against 49.9% for XOM. 6 names, one shared implied probability, and a wide range of what actually happened. A price near 50 cents describes the market's odds. Any single contract still settles at $1.00 or $0.00.

Quel est le seuil de rentabilité d’un contrat à 0,70 $ ?

Un contrat acheté à 70 centimes verse 1,00 $ si l’issue Yes se réalise et rien si l’issue No se réalise. Le gain est de 30 centimes, la perte de 70 centimes et la probabilité d’équilibre correspond exactement au prix. À une probabilité réelle de 70 %, la position revient à jouer à pile ou face, avec quelques étapes supplémentaires. Au-dessus de 70 %, l’arithmétique devient favorable à l’acheteur ; en dessous, elle lui est défavorable, avant même de prendre en compte les coûts.

Les coûts déplacent ce seuil de manière inégale. Ajoutez un centime de coût aller-retour à un contrat de 70 centimes : le seuil de rentabilité passe d’environ 70 % à 71 %, soit une différence négligeable à l’échelle de la position. Ajoutez le même centime à un contrat de 5 centimes : le seuil passe de 5 % à 6 %, ce qui absorbe un cinquième de l’avantage théorique. Les frais fixes pénalisent surtout les paris à long terme les moins chers, car ils représentent la part la plus importante du prix payé. Le type d’ordre fonctionne de la même manière : franchir le spread implique de payer l’intégralité de l’ask, tandis qu’un ordre à cours limité en attente reste au prix que vous avez fixé et peut ne jamais être exécuté (ordre au marché contre ordre à cours limité).

Pourquoi un résultat quasi certain se négocie-t-il à 0,97 $ ?

Même un résultat que personne ne conteste se négocie rarement à 1,00 $. Quatre éléments sont intégrés dans ces trois derniers centimes :

  • La valeur temps de l’argent. Le dollar est versé au règlement. Payer 0,97 $ aujourd’hui pour recevoir 1,00 $ dans trois mois constitue un rendement du capital, alors que ces liquidités peuvent avoir d’autres usages (placer des liquidités inutilisées).
  • Le risque lié à la source du règlement. Le contrat est réglé selon les données publiées par la source désignée, suivant le calendrier qu’elle applique. Les révisions, les retards et les formulations ambiguës restent possibles, même lorsque le résultat fait consensus.
  • Le spread lui-même. Un marché coté à 96 à l’achat et 98 à la vente affiche un point médian à 97 cents, sans qu’aucune transaction ne soit exécutée à 97. En pourcentage, le carnet est souvent le plus large précisément aux extrêmes.
  • La queue de distribution. « Certain » est un terme souvent employé de manière approximative. Les contrats sont réglés selon la définition prévue par le rulebook.

La convergence est mesurable. Prenons des calls sur SPY dont le prix correspond à peu près à un pile ou face un mois avant l’échéance. Répartissons-les selon le résultat final, puis observons la probabilité implicite moyenne à six points de contrôle.

RequêteRésolution d’un quasi pile ou face : probabilité implicite moyenne par point de contrôle, ventilée par résultat
Le SQL exact derrière chaque chiffre
WITH px AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-06-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session
),
coin_flips AS (
    SELECT ticker AS contract
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= toDate('2025-06-01')
      AND expiration_date <= toDate('2026-06-30')
      AND days_to_expiry BETWEEN 28 AND 32
      AND iv_converged = 1
      AND volume > 0
      AND delta > 0
    GROUP BY contract
    HAVING avg(delta) BETWEEN 0.35 AND 0.65
),
obs AS (
    SELECT g.days_to_expiry AS dte,
           g.delta AS implied_prob,
           if(px.close_px > toFloat64(g.strike_price), 1, 0) AS finished_above
    FROM global_markets.options_greeks AS g
    INNER JOIN coin_flips AS c ON g.ticker = c.contract
    INNER JOIN px ON px.session = g.expiration_date
    WHERE g.underlying_symbol = 'SPY'
      AND g.date >= toDate('2025-06-01')
      AND g.expiration_date <= toDate('2026-06-30')
      AND g.iv_converged = 1
      AND g.volume > 0
      AND g.delta > 0
      AND (g.days_to_expiry BETWEEN 28 AND 32
        OR g.days_to_expiry BETWEEN 19 AND 23
        OR g.days_to_expiry BETWEEN 12 AND 16
        OR g.days_to_expiry BETWEEN 6 AND 8
        OR g.days_to_expiry BETWEEN 3 AND 4
        OR g.days_to_expiry <= 1)
)
SELECT multiIf(dte >= 28, '30 days out',
               dte >= 19, '21 days out',
               dte >= 12, '14 days out',
               dte >= 6, '7 days out',
               dte >= 3, '3 days out',
                         '1 day out') AS checkpoint,
       round(100 * avgIf(implied_prob, finished_above = 1), 1) AS eventual_yes_pct,
       round(100 * avgIf(implied_prob, finished_above = 0), 1) AS eventual_no_pct,
       count() AS contract_days
FROM obs
GROUP BY checkpoint
HAVING countIf(finished_above = 1) > 0 AND countIf(finished_above = 0) > 0
ORDER BY avg(dte) DESC
Run this yourself

À 30 days out, les contrats qui ont finalement terminé au-dessus de leur strike affichaient une probabilité implicite moyenne de 52.6%, contre 47.8% pour ceux qui ne l’ont pas fait. À 1 day out, les deux mêmes groupes affichaient respectivement 79.8% et 14.4%. Cette distinction repose sur une lecture a posteriori. Au premier point de contrôle, personne ne pouvait distinguer les deux groupes en lisant la chaîne d’options. C’est précisément la situation d’un contrat événementiel en temps réel. La certitude n’arrive qu’à la date de règlement, et le prix converge progressivement vers ce niveau. Les règles de règlement fixent le moment exact : options réglées selon le matin ou l’après-midi montre l’importance que peut avoir ce détail de calendrier, tandis que volatilité implicite est la réponse de la même chaîne d’options à la question de l’ampleur, et non à celle de la direction.

Notes et limites des données

Le delta sert d’approximation au prix d’un événement « Oui », mais ce n’est pas le même objet. Il approxime la probabilité neutre au risque d’expirer dans la monnaie et diffère légèrement de la probabilité issue du modèle pour le même événement. Les résultats présentés ici comparent le cours de clôture de la séance régulière à la date d’expiration avec le strike. Cette approche approxime le règlement sans reproduire une valeur officielle de règlement. Chaque panneau consacré aux options filtre les contrats dont la volatilité implicite est convergente et dont le volume est non nul à cette date ; les contrats peu actifs sont donc exclus de l’échantillon. Chaque contrat est intégré une seule fois aux panneaux de calibration, à l’observation la plus proche de 30 jours avant l’échéance.

FAQ sur la tarification des event contracts

Le prix d’un event contract correspond-il à une probabilité ?

Il s’agit d’une probabilité à laquelle s’appliquent deux ajustements. La cotation inclut le spread facturé par la plateforme et les market makers. Elle valorise aussi un dollar reçu au règlement, et non aujourd’hui. Une fois ces deux éléments neutralisés, il reste l’estimation par le marché de la probabilité d’occurrence.

Que fait le de-vigging d’un marché à deux issues ?

Il remet à l’échelle les deux milieux de cotation pour que leur somme soit égale à 100 %. Additionnez le mid du Yes et celui du No, puis divisez chacun par ce total. Un Yes à 64 cents et un No à 38 cents totalisent 102 cents ; après de-vigging, ils correspondent à 62,7 % et 37,3 %.

Pourquoi les prix du Yes et du No totalisent-ils plus d’un dollar ?

L’un des deux contrats versera nécessairement 1,00 $. Une paire sans friction coûterait donc exactement 1,00 $ au total. Les cents supplémentaires du côté ask constituent l’overround, c’est-à-dire le revenu de spread intégré à un marché à deux issues. Vendre les deux côtés vous laisse au contraire avec moins d’un dollar, selon le même écart en sens inverse.

Un contrat coté à 90 cents échoue-t-il une fois sur dix ?

Environ, si le marché est bien calibré sur un grand nombre de contrats comparables. Dans le panneau SPY ci-dessus, le compartiment 90-98% affichait une probabilité implicite moyenne de 94.3% et a clôturé au-dessus de son strike dans 97.8% des cas. Un contrat donné se règle toujours à un dollar ou à zéro.

Dans quelle mesure un spread large modifie-t-il la probabilité implicite ?

À peu près à hauteur de la largeur du spread. Un marché avec un spread de 1 cent encadre la probabilité à un point près. Un marché avec un spread de 4 cents laisse une fourchette de 4 points ; toute probabilité située dans cette fourchette est compatible avec la cotation.


Tous les chiffres ci-dessus proviennent d’une requête enregistrée sur les données des contrats cotés. Le SQL de chaque panneau est accessible en un clic. Reproduisez le même calcul de-vig sur une chaîne en direct dans le terminal Strasmore.

#prediction markets#event contracts#probability#market mechanics#options