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

Coût du trading d'options et bid-ask spread

Les commissions sont souvent nulles, mais le bid-ask spread impacte vos gains. Analyse du coût médian en basis points pour SPY, QQQ, IWM, GLD et TSLA.

Commissions on listed options are zero at most brokerages, but every marketable options order still pays the bid-ask spread — the gap between the best price a buyer will pay and the best price a seller will accept. Options usually trade at far lower dollar prices than the stock they reference, so the same cents-wide gap is a much larger share of the trade. On 2026-07-02, SPY options (every 2026-expiry contract) quoted a median spread of 80.97 basis points during regular hours, while SPY stock itself quoted 0.27 bps — a gap of roughly 299.9×. Every figure below is measured from the consolidated options quote and trade tapes, with the exact SQL behind each number attached.

Pourquoi les spreads sur options diffèrent des spreads sur actions

Considérez une action cotée 745,00 $ bid / 745,02 $ ask. Le spread de deux cents représente environ 0,27 bps du prix de l'action. Un call at-the-money sur cette même action pourrait être coté 7,20 $ bid / 7,30 $ ask — soit un spread de dix cents, ce qui équivaut à environ 138 bps par rapport au midpoint de 7,25 $. Le spread de l'option est plus large en dollars, et des centaines de fois plus large en pourcentage du prix payé. Le faible prix nominal de l'option explique ce phénomène : dix cents représentent un montant faible en valeur absolue, mais un pourcentage élevé pour un contrat à 7,25 $.

L'unité professionnelle pour comparer les coûts entre différents instruments est le basis point (bp) — un centième de pour cent. Un contrat d'option standard porte sur 100 actions de l'underlying ; l'impact financier d'une transaction est donc proportionnel à l'actif sous-jacent, mais le spread est mesuré par rapport au prix coté de l'option elle-même. C'est cette unité qui est utilisée tout au long de cette page.

Options SPY vs. actions SPY : comparaison directe

Le SPY est le produit d'options le plus liquide aux États-Unis, et même sur ce marché, l'écart de coût est important. Le tableau ci-dessous compare les options SPY et les actions SPY sur une même séance : flux de cotations, transactions exécutées et spread médian coté pour chacun.

RequêteOptions SPY vs action SPY sur une séance : nombre de quotes, nombre de trades et median du spread
Le SQL exact derrière chaque chiffre
WITH
    opt_q AS (
        SELECT
            count() AS opt_updates,
            quantileDeterministic(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), cityHash64(ticker, sip_timestamp)) AS opt_median_spread_ratio
        FROM global_markets.cache_options_quotes
        WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
          AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
          AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
    ),
    stock_q AS (
        SELECT
            count() AS stock_updates,
            quantileDeterministic(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), cityHash64(ticker, sip_timestamp)) AS stock_median_spread_ratio
        FROM global_markets.cache_stocks_quotes
        WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
          AND ticker = 'SPY'
          AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
    ),
    opt_t AS (
        SELECT count() AS opt_trades FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
          AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
    ),
    stock_close AS (
        SELECT round(argMax(toFloat64(close), window_start), 2) AS spy_close
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
    )
SELECT
    '2026-07-02' AS session_date,
    opt_q.opt_updates AS spy_opt_updates,
    stock_q.stock_updates AS spy_stock_updates,
    round(opt_q.opt_updates / stock_q.stock_updates, 1) AS opt_to_stock_update_ratio,
    opt_t.opt_trades AS spy_opt_trades,
    round(opt_q.opt_updates / opt_t.opt_trades, 1) AS quotes_per_trade,
    round(opt_q.opt_median_spread_ratio * 10000, 2) AS spy_opt_median_spread_bps,
    round(stock_q.stock_median_spread_ratio * 10000, 2) AS spy_stock_median_spread_bps,
    round(opt_q.opt_median_spread_ratio / stock_q.stock_median_spread_ratio, 1) AS ratio_opt_to_stock_spread,
    stock_close.spy_close AS spy_underlying_close
FROM opt_q CROSS JOIN stock_q CROSS JOIN opt_t CROSS JOIN stock_close

Le spread médian des options SPY de 80.97 bps signifie qu'un ordre de marché aller-retour — achat au bid et revente au ask — entraîne une perte équivalente à la quasi-totalité du spread coté par rapport au midpoint, soit environ la moitié de chaque côté de la transaction. Un même aller-retour sur l'action SPY entraîne une perte d'environ 0.27 bps. Le flux de cotations confirme cette analyse de la liquidité : les market makers ont publié 256.5 mises à jour de cotations d'options SPY pour chaque transaction d'options SPY exécutée, réévaluant tick par tick des milliers de combinaisons de strikes et d'échéances.

La distribution du spread des options SPY : ce n'est pas un chiffre unique

La médiane est utile, mais le spread payé par un trader individuel dépend du contrat. Les options SPY near-the-money et proches de l'expiration ont tendance à avoir les spreads les plus serrés. Les contrats far out-of-the-money et à échéance lointaine peuvent présenter des spreads beaucoup plus larges. Le tableau ci-dessous présente la distribution complète des cotations SPY bid-ask valides durant la séance.

RequêteDistribution du quoted-spread des options SPY : percentiles en points de base
Le SQL exact derrière chaque chiffre
WITH opts AS (
    SELECT
        (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps,
        cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
)
SELECT
    round(quantileDeterministic(0.10)(spread_bps, det), 2) AS p10_bps,
    round(quantileDeterministic(0.25)(spread_bps, det), 2) AS p25_bps,
    round(quantileDeterministic(0.50)(spread_bps, det), 2) AS median_bps,
    round(quantileDeterministic(0.75)(spread_bps, det), 2) AS p75_bps,
    round(quantileDeterministic(0.90)(spread_bps, det), 2) AS p90_bps,
    count() AS valid_two_sided_quotes
FROM opts

La moitié centrale des cotations d'options SPY se situait entre 49.65 bps et 147.12 bps. Une cotation sur dix était plus serrée que 35.51 bps, et une sur dix était plus large que 316.51 bps. La queue de distribution large correspond aux strikes illiquides et aux échéances lointaines — précisément les contrats sur lesquels un acheteur occasionnel est le plus susceptible de tomber.

Variation des coûts selon les produits populaires

Le SPY est l'indice de référence, mais tous les produits d'options n'affichent pas des spreads aussi serrés. Le tableau ci-dessous mesure le spread médian coté pendant les heures de session régulières, en points de base, pour cinq sous-jacrants d'options très échangés : trois ETF indiciels (SPY, QQQ, IWM), un ETF or (GLD) et une action à forte liquidité d'options (TSLA). Chaque sous-jacent est filtré sur sa plage de tickers à échéance 2026 afin que la requête optimise l'index (ticker, sip_timestamp). Les lignes sont classées par ordre alphabétique pour maintenir une position fixe pour chaque produit.

RequêteBid-ask spreads des options par produit : median en points de base, 2 juillet 2026 (hours régulières)
Le SQL exact derrière chaque chiffre
SELECT
    root,
    round(count() / 1e6, 1) AS quote_updates_millions,
    round(quantileDeterministic(0.5)(spread_bps, det), 2) AS median_spread_bps,
    round(quantileDeterministic(0.5)(width_cents, det), 2) AS median_width_cents
FROM (
    SELECT 'SPY' AS root, (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps, (toFloat64(ask_price) - toFloat64(bid_price)) * 100 AS width_cents, cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
    UNION ALL
    SELECT 'QQQ' AS root, (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps, (toFloat64(ask_price) - toFloat64(bid_price)) * 100 AS width_cents, cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:QQQ26' AND ticker < 'O:QQQ27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
    UNION ALL
    SELECT 'IWM' AS root, (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps, (toFloat64(ask_price) - toFloat64(bid_price)) * 100 AS width_cents, cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:IWM26' AND ticker < 'O:IWM27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
    UNION ALL
    SELECT 'GLD' AS root, (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps, (toFloat64(ask_price) - toFloat64(bid_price)) * 100 AS width_cents, cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:GLD26' AND ticker < 'O:GLD27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
    UNION ALL
    SELECT 'TSLA' AS root, (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps, (toFloat64(ask_price) - toFloat64(bid_price)) * 100 AS width_cents, cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:TSLA26' AND ticker < 'O:TSLA27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
)
GROUP BY root
ORDER BY root ASC

Les ETF indiciels présentent les coûts les plus faibles : le spread médian du SPY est de 80.97 bps, celui du QQQ est de 123.71 bps et celui de l'IWM est de 130.72 bps. À l'opposé, les options sur TSLA affichent un spread de 309.93 bps et celles sur GLD de 786.75 bps — un régime de coûts totalement différent. La colonne des mises à jour de cotations (en millions) confirme cette tendance : les produits les plus cotés présentent les spreads les plus serrés.

L'effet 0DTE et hebdomadaire : durée de vie réduite, spread élargi

Les contrats dont l'échéance est proche se négocient généralement à des prix inférieurs en dollars. Cela augmente mécaniquement le spread en points de base, même si l'écart en cents reste faible. Le tableau ci-dessous regroupe les cotations d'options SPY near-the-money (strikes 730–760) par date d'expiration — chaque échéance 2026 ayant enregistré au moins un million de mises à jour de cotation durant la session, par ordre chronologique.

RequêteMedian du spread des options SPY par date d'expiration, strikes near-the-money uniquement
Le SQL exact derrière chaque chiffre
WITH opts AS (
    SELECT
        toFloat64(ask_price) - toFloat64(bid_price) AS width,
        (toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,
        substring(ticker, -15, 6) AS expiry_code,
        toUInt32OrZero(substring(ticker, -8)) / 1000 AS strike,
        cityHash64(ticker, sip_timestamp) AS det
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
      AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
      AND strike BETWEEN 730 AND 760
)
SELECT
    expiry_code,
    round(count() / 1e6, 1) AS quote_updates_millions,
    round(quantileDeterministic(0.5)(width / mid * 10000, det), 2) AS median_spread_bps,
    round(quantileDeterministic(0.5)(width * 100, det), 2) AS median_width_cents
FROM opts
GROUP BY expiry_code
HAVING count() >= 1000000
ORDER BY expiry_code ASC

Le contrat à échéance du jour — code d'expiration 260702, le 0DTE — présentait un spread médian de 113.64 bps pour une largeur médiane de seulement 2 cents. L'échéance la plus lointaine du graphique, 261231, affichait un écart plus large en cents (11) mais était nettement plus serrée en points de base, à 37.16 bps. C'est la leçon fondamentale concernant les coûts de transaction sur les options : un spread de un ou deux cents n'est pas automatiquement avantageux lorsque l'option elle-même se négocie pour quelques dollars seulement. Qu'est-ce que les options 0DTE explique le fonctionnement des contrats à échéance le jour même.

Ce que les données sur la taille des transactions révèlent sur l'origine de ces coûts

Le trading d'options s'effectue en contrats, et un contrat standard couvre 100 actions. La médiane des transactions d'options exécutées sur 2026-07-02 était de seulement 1 contrat ; même le 90e percentile n'était que de 10 contrats. La plupart des transactions d'options sont de petite taille. Le trader retail est donc le plus exposé au spread affiché — une grosse commande institutionnelle peut souvent négocier une amélioration du prix ou être fractionnée dans le temps.

RequêteDistribution de la taille des trades d'options le 2 juillet 2026 (contrats tape complets par print)
Le SQL exact derrière chaque chiffre
WITH trades AS (
    SELECT toFloat64(size) AS size FROM global_markets.options_trades
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
)
SELECT
    round(quantileExact(0.50)(size), 0) AS median_contracts,
    round(quantileExact(0.90)(size), 0) AS p90_contracts,
    round(avg(size), 1) AS avg_contracts,
    count() AS total_prints
FROM trades

FAQ

Le trading d'options est-il plus coûteux que celui des actions ?

Généralement oui, si l'on mesure le coût en proportion du prix échangé. Un ETF très liquide comme le SPY présente un spread inférieur à un point de base sur l'action elle-même ; les options sur le même sous-jacent affichent couramment des dizaines de points de base. Le montant en dollars dépend du prix de l'option et du nombre de contrats, mais le spread en pourcentage de la valeur de l'option est presque toujours plus élevé que celui de l'action.

Pourquoi les spreads des options 0DTE sont-ils si élevés en points de base ?

Les options à échéance intra-journalière ou hebdomadaire s'échangent souvent à des prix unitaires faibles — parfois moins de 1,00 $ — en fin de vie. Un spread de un ou deux cents sur une option à 0,50 $ représente 2 à 4 % du prix, soit 200 à 400 bps. La valeur en cents semble faible, mais le coût en pourcentage est élevé. C'est pourquoi les traders comparent les spreads en points de base, et non en cents.

Les commissions sont-elles plus importantes que le spread ?

Pour une transaction retail sur un seul lot, le spread est généralement le facteur dominant. Une cotation à 1,00 $ / 1,05 $ coûte 5,00 $ par contrat pour un aller-retour complet (100 actions par contrat) avant toute commission. Sur les produits à faible prix ou à spread large, le spread peut à lui seul excéder toute commission plausible.

Puis-je éviter le spread en utilisant des ordres limit ?

Un ordre limit placé à l'intérieur du spread peut être exécuté pour un coût inférieur au spread total, mais l'exécution n'est pas garantie. Un ordre au marché paie le spread par définition. Le spread est le prix de l'immédiateté, et non une commission prélevée par votre broker.

Quels produits d'options présentent les spreads les plus serrés ?

D'après les mesures de cette page, les grands ETF indiciels — SPY, QQQ, IWM — présentent les médianes les plus serrées et concentrent également le plus gros volume de cotations. Les ETF matières premières (GLD) et les options sur actions individuelles peuvent présenter des spreads bien plus larges. Le spread varie selon le contrat — même sous-jacent, mais strike et échéance différents — une seule médiane masque donc une grande variabilité.

Notes sur les données

Tous les horodatages sont enregistrés en UTC ; les heures régulières du 2 juillet 2026 sont filtrées selon sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00' (9h30–16h00 ET). Les statistiques sur le spread utilisent uniquement les cotations bid-ask valides (bid_price > 0, ask_price > 0, ask_price > bid_price), convertissent les prix Decimal en Float64 avant la division, et utilisent des estimateurs de médiane déterministes (quantileDeterministic, indexés par un hash du ticker et de l'horodatage) pour garantir des résultats identiques lors d'une régénération. Le recensement ci-dessous compte chaque enregistrement d'options SPY dans la fenêtre temporelle et indique la proportion de cotations bid-ask valides par rapport au flux de données brut.

Recensement de la qualité des cotations et méthodologie complète
RequêteQualité des quotes des options SPY : records valides, one-sided, et locked/crossed
Le SQL exact derrière chaque chiffre
WITH opts AS (
    SELECT
        bid_price,
        ask_price
    FROM global_markets.cache_options_quotes
    WHERE sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
      AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
)
SELECT
    count() AS total_updates,
    countIf(bid_price > 0 AND ask_price > 0 AND ask_price > bid_price) AS valid_two_sided,
    round(100.0 * countIf(bid_price > 0 AND ask_price > 0 AND ask_price > bid_price) / count(), 2) AS valid_pct,
    countIf(bid_price = 0 OR ask_price = 0) AS one_sided,
    round(100.0 * countIf(bid_price = 0 OR ask_price = 0) / count(), 2) AS one_sided_pct,
    countIf(bid_price > 0 AND ask_price > 0 AND ask_price <= bid_price) AS locked_or_crossed,
    round(100.0 * countIf(bid_price > 0 AND ask_price > 0 AND ask_price <= bid_price) / count(), 2) AS locked_or_crossed_pct
FROM opts

Plus de 99.94% des enregistrements de cotations d'options SPY de la session étaient des cotations bid-ask valides ; les enregistrements unidirectionnels représentaient 0.06% du flux, et les enregistrements bloqués ou croisés étaient négligeables. Chaque valeur de spread ci-dessus est calculée sur le sous-ensemble des cotations bid-ask valides — le coût qu'un trader pourrait réellement observer dans le NBBO.

  • Source des données de marché : ruban de cotations d'options consolidé de type OPRA (global_markets.cache_options_quotes), le ruban de cotations d'actions correspondant, et le ruban de transactions d'options consolidé (global_markets.options_trades ; le panneau de taille de transaction couvre délibérément l'ensemble du ruban, pas seulement SPY).
  • Format du ticker OCC : O: + racine + expiration à six chiffres (YYMMDD) + C/P + strike à sept chiffres ×1000. Le panneau 0DTE extrait l'expiration et le strike à partir du ticker ; les calculs de spread agrègent les calls et les puts. Le filtre de chaque racine couvre sa plage d'expiration 2026 (O:SPY26..O:SPY27 et équivalents), ce qui permet de maintenir chaque scan optimisé sur l'index (ticker, sip_timestamp).
  • Définition du spread : (ask − bid) / midpoint × 10,000, en points de base, uniquement sur les cotations bid-ask valides.
  • Médianes et percentiles : estimateurs de réservoir quantileDeterministic indexés par cityHash64(ticker, sip_timestamp) — mémoire limitée et résultats identiques à chaque régénération.
  • Clôture de l'underlying : dernière bougie d'une minute en heures régulières à partir de delayed_stocks_minute_aggs.
  • Fenêtre de session : 13h30–20h00 UTC, vérifiée par rapport aux bougies d'une minute observées sur SPY plutôt que par calcul calendaire.
  • Session fixée : 2 juillet 2026 — une session complète terminée, située bien avant le délai d'ingestion de 1 à 2 jours du warehouse au moment de la rédaction (9 juillet 2026). Les dates sont fixes, la régénération reproduit donc les mêmes chiffres.

Vous souhaitez connaître le coût d'un contrat spécifique ? Chaque panneau ci-dessus est une requête stockée — exécutez-les, ou vos propres variantes, sur le terminal Strasmore. Pour plus d'informations sur les mécanismes, consultez le coût de transaction des actions, la définition du bid-ask spread, les options 0DTE, la taille du flux de cotations d'options, et volume d'options vs open interest.