Coût réel du trading d'actions et bid-ask spread
Les commissions sont nulles mais le bid-ask spread reste un coût réel. Découvrez l'impact en points de base pour 12 actions et ETF majeurs.
Le coût de transaction des actions n'est pas tombé à zéro malgré la baisse des commissions. Chaque ordre exécutable subit toujours le bid-ask spread — l'écart entre le prix d'achat maximal et le prix de vente minimal — dont la moitié est captée par l'acheteur et l'autre moitié par le vendeur. Cette page mesure ce coût en points de base pour douze actions et ETF domestiques, à partir de données de cotation au tick près, avec le code SQL exact associé à chaque chiffre.
Les commissions sont passées à zéro — pas le spread
Une action n'a jamais un seul prix, mais deux. Le bid est la meilleure offre d'achat en cours ; l'ask est la meilleure offre de vente en cours. Trader actuellement revient à franchir cet écart : un achat au marché s'exécute à l'ask, une vente au marché au bid, et la différence revient à celui qui a publié la cotation — le plus souvent un market maker professionnel cotant les deux côtés durant toute la session. Comprendre le bid-ask spread explique l'intégralité de ce mécanisme ; cette page en évalue le coût.
Un exemple hypothétique permet de clarifier le calcul. Une action cotée 20,00 $ bid / 20,05 $ ask a un midpoint de 20,025 $ — la référence habituelle pour sa juste valeur à cet instant. Un achat au marché coûte 20,05 $, soit 2,5 cents au-dessus du midpoint : la moitié de l'écart coté. Une vente au marché rapporte 20,00 $, perdant l'autre moitié. En effectuant les deux — un aller-retour — les cinq cents complets sont perdus sur chaque action, sans aucune ligne de commission.
L'unité professionnelle pour ce coût est le basis point (bp) — un centième de pour cent. Exprimer le spread en proportion du midpoint permet de comparer un ETF à un prix unitaire faible et un ETF à plusieurs centaines de dollars sur une même échelle ; les différences révélées sont plus importantes que ce que la plupart des traders sans commission anticipent.
L'échelle des coûts de transaction : douze titres analysés
Voici douze actions et ETF largement détenus, classés par le spread médian coté en pourcentage du midpoint. Les données correspondent à chaque mise à jour du NBBO — le meilleur bid et ask consolidé sur l'ensemble des bourses américaines, la cotation affichée par une application de courtage — calculées sur un créneau horaire fixe (13:30–19:59 UTC). Ce créneau correspond à la séance régulière de 9h30 à 16h00 (heure de l'Est) durant l'heure d'été. Ce créneau couvre les sessions les plus récentes de nos données et s'arrête délibérément quelques jours avant la date du jour, afin d'exclure les journées incomplètes des calculs de médianes. Les mises à jour présentant un côté manquant, ou un ask égal ou inférieur au bid, sont exclues des médianes et comptabilisées dans la dernière colonne plutôt que d'être simplement ignorées.
Le SQL exact derrière chaque chiffre
SELECT ticker,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS typical_spread_bps,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price > bid_price) * 100, 1) AS typical_spread_cents,
round(count() / 1e6, 1) AS quote_updates_m,
round(100 * countIf(bid_price <= 0 OR ask_price <= 0 OR ask_price <= bid_price) / count(), 2) AS pct_updates_excluded
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMD', 'TSLA', 'KO', 'DIS', 'F', 'SOXS')
AND sip_timestamp >= toDateTime(today() - 10)
AND sip_timestamp < toDateTime(today() - 3)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY ticker
ORDER BY typical_spread_bpsEn tête de liste se trouve SPY à 0.27 bps — une fraction de point de base — avec une médiane basée sur 14.9 millions de mises à jour de cotations. Au quatrième rang, NVDA affiche 0.99 bps. Le dernier rang, SOXS, mesure 23.17 bps — et sa colonne en cents illustre la leçon principale du tableau : l'écart coté est de 1¢, un écart de l'ordre du centime associé au coût en pourcentage le plus élevé du tableau. Les cents masquent la faible volatilité des actions peu chères ; les points de base reflètent leur coût réel.
One basis point is one dollar per $10,000
The bps column converts to money with fixed arithmetic: on a $10,000 order, one basis point equals one dollar (10,000 × 0.0001 = 1). Read the ladder as a round-trip price list per $10,000 traded: the top rung's 0.27 bps is about $0.27; the bottom rung's 23.17 bps is about $23.17. Crossing once — only buying, or only selling — runs half of each figure.
Frequency scales the toll. A hypothetical 20 bp spread crossed round-trip once a week on the same $10,000 adds up to roughly $1,040 over 52 weeks (20 × $1 × 52) — about one percent of the account, at zero commission. The same habit on a hypothetical 1 bp spread totals about $52 a year. Which rung a name sits on matters more than any commission line ever did.
Une mega-cap face à un ETF inverse à effet de levier
Le bas de l'échelle mérite d'être nommé, tout comme une mega-cap située dans le tiers supérieur. NVIDIA (NVDA) est une action mega-cap du secteur des semi-conducteurs. SOXS est le Direxion Daily Semiconductor Bear 3X shares — un ETF inverse à effet de levier conçu pour évoluer trois fois à l'opposé d'un indice de semi-conducteurs chaque jour, avec un réajustement quotidien. Les deux ont été mesurés sur la même période, selon la même méthode :
Le SQL exact derrière chaque chiffre
WITH per_day AS (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS et_date,
quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'NVDA' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS nvda_bps,
quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'SOXS' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS soxs_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('NVDA', 'SOXS')
AND sip_timestamp >= toDateTime(today() - 10)
AND sip_timestamp < toDateTime(today() - 3)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY et_date
),
whole AS (
SELECT quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'NVDA' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS nvda_bps,
quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'SOXS' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS soxs_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('NVDA', 'SOXS')
AND sip_timestamp >= toDateTime(today() - 10)
AND sip_timestamp < toDateTime(today() - 3)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
)
SELECT round((SELECT nvda_bps FROM whole), 2) AS nvda_spread_bps,
round((SELECT soxs_bps FROM whole), 2) AS soxs_spread_bps,
round((SELECT soxs_bps FROM whole) / (SELECT nvda_bps FROM whole), 1) AS times_wider,
(SELECT count() FROM per_day) AS sessions_measured,
round((SELECT min(soxs_bps / nvda_bps) FROM per_day), 1) AS smallest_daily_gap_xLe spread médian coté pour NVDA était de 0.99 bps. Celui de SOXS était de 23.17 bps — soit 23.3 fois plus large. Sur l'ensemble des 5 sessions de la période, l'écart sur une seule session n'est jamais descendu en dessous de 14.1 fois. Cette paire se trouvait également aux extrêmes lors de la cassure des semi-conducteurs du 7 juillet — une session qui a mesuré ce contraste exact tick par tick lors de ses points bas matinaux.
Le SQL exact derrière chaque chiffre
SELECT et_date,
nvda_spread_bps,
soxs_spread_bps,
round(soxs_spread_bps / nvda_spread_bps, 1) AS times_wider
FROM (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS et_date,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'NVDA' AND bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS nvda_spread_bps,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'SOXS' AND bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS soxs_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('NVDA', 'SOXS')
AND sip_timestamp >= toDateTime(today() - 10)
AND sip_timestamp < toDateTime(today() - 3)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY et_date
)
ORDER BY et_dateLe 2026-07-08, première session de la période, le spread médian de NVDA était de 1.52 bps contre 21.48 bps pour SOXS — soit 14.1 fois le coût. L'ordre de grandeur ne change jamais d'une session à l'autre : le titre peu coûteux reste peu coûteux, le titre onéreux reste onéreux. La position d'un titre sur l'échelle des coûts est une propriété constante, et non une variation quotidienne.
Pourquoi une action peu chère coûte plus cher à négocier qu'une action chère
Une partie de cet écart est due à la structure du marché. Aux États-Unis, les actions et les ETF dont le cours est supérieur à 1 $ s'affichent par incréments de 0,01 $. Or, un cent est le plus petit écart possible pour une cotation. Un cent représente une fraction différente selon le prix de l'action : il est négligeable pour un ETF à 700 $, mais énorme pour une action à 4 $. Le tableau ci-dessous mesure l'impact de ce plancher : la proportion de mises à jour de cotation situées exactement à un cent, la valeur de ce cent en bps pour chaque cours, et la distance entre le spread médian et ce plancher.
Le SQL exact derrière chaque chiffre
SELECT ticker,
typical_share_price,
pct_quotes_at_one_cent,
round(100 / typical_share_price, 2) AS one_cent_in_bps,
typical_spread_bps,
round(abs(typical_spread_bps - 100 / typical_share_price), 2) AS dist_from_floor_bps
FROM (
SELECT ticker,
round(quantileExactIf(0.5)((toFloat64(ask_price) + toFloat64(bid_price)) / 2, bid_price > 0 AND ask_price > bid_price), 2) AS typical_share_price,
round(100 * countIf(bid_price > 0 AND ask_price > bid_price AND abs(toFloat64(ask_price - bid_price) - 0.01) < 0.001) / countIf(bid_price > 0 AND ask_price > bid_price), 1) AS pct_quotes_at_one_cent,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS typical_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'KO', 'F', 'SOXS')
AND sip_timestamp >= toDateTime(today() - 10)
AND sip_timestamp < toDateTime(today() - 3)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY ticker
)
ORDER BY typical_share_price DESCSPY, qui s'échange près de 750.32 $ l'action, présente un écart de exactement un cent pour 23.4% de ses mises à jour — et pour l'action la plus chère du tableau, un cent ne représente que 0.13 bps. Pour les valeurs intermédiaires, KO près de 83.82 $ se situe au plancher pour 65.4% des mises à jour. Enfin, le plancher devient prédominant : F près de 13.86 $ présente un écart d'un cent pour 99% des mises à jour, et SOXS près de 4.31 $ pour 100% — avec des spreads médians situés entre 0 et 0.03 bps de leur plancher d'un cent. Pour les actions les moins chères, le coût en pourcentage de la transaction est dicté par l'unité de cotation : l'écart ne peut pas être inférieur à un cent.
Réduire les coûts de transaction
- Les ordres limités fixent le prix. Un ordre au marché s'exécute au prix du quote ; un ordre limité s'exécute au prix indiqué ou à un meilleur prix. Un ordre d'achat sur le bid capte le spread au lieu de le payer lorsqu'un vendeur l'exécute — l'inconvénient est qu'il peut ne jamais être exécuté.
- Le timing est crucial. Les spreads cotés sont plus larges avant l'ouverture, autour de la clôture et durant les sessions étendues. Ils sont plus serrés durant la période de forte liquidité de la session régulière — le graphique intraday de notre guide sur le bid-ask spread montre cette courbe en U sur des données réelles.
- Utilisez les points de base, pas les centimes. Un centime représente 0.13 bps sur SPY et 23.2 bps sur SOXS. Un quote d'un centime dit « serré » peut s'avérer être le plus coûteux du tableau.
- Calculez le coût des transactions aller-retour. Chaque transaction paie la totalité du spread coté une fois, et les coûts augmentent avec le turnover, et non avec la taille du compte ou l'intention. Les indicateurs d'activité comme le volume relatif mesurent quand un ticker échange bien au-dessus de sa normale — les stratégies à fort turnover sont celles où les coûts de spread s'accumulent discrètement.
FAQ
Quel est le coût pour échanger une action avec zéro commission ?
La moitié du bid-ask spread à l'achat et la moitié à la vente. Sur notre échelle de douze titres, ce round-trip variait de 0.27 bps de la valeur de la transaction (SPY) à 23.17 bps (SOXS) — soit environ $0.27 à $23.17 pour $10 000 échangés.
Que représente un basis point en dollars ?
Un basis point représente un centième de pour cent : 1 $ pour 10 000 $, 10 $ pour 100 000 $. Un spread exprimé en bps double lors d'un round-trip pour un prix par tranche de 10 000 $ — un spread hypothétique de 20 bp coûte environ 20 $.
Pourquoi les ETF à effet de levier ont-ils des spreads si larges en pourcentage ?
Les cours des actions peu élevés se heurtent à l'incrément de cotation minimum d'un cent. Le titre le moins cher de notre tableau, SOXS, s'échangeait près de $4.31 avec 100% de ses cotations ayant un écart d'exactement un cent — et un cent sur ce cours représente 23.2 bps pour chaque transaction.
Les bid-ask spreads sont-ils importants pour les investisseurs à long terme ?
Beaucoup moins que pour les traders actifs. Un seul round-trip sur le haut de l'échelle mesurait 0.27 bps — environ $0.27 pour 10 000 $ — et payer ce montant une fois par décennie est négligeable. Le coût dépend du turnover, pas de la période de détention.
Le spread est-il le seul coût de transaction restant ?
C'est la taxe par transaction que paie chaque ordre exécutable, et celle que cette page mesure. D'autres coûts existent : les ordres importants peuvent faire varier le prix avant leur exécution, les fonds facturent des expense ratios sur la durée, et la marge génère des intérêts. Aucun de ces éléments ne remplace le spread ; ils s'ajoutent à celui-ci.
Chaque panneau ci-dessus contient le code SQL exact qui l'a généré — ouvrez-en un, remplacez les tickers par ceux que vous échangez réellement, et calculez votre propre échelle de coût de transaction sur le terminal Strasmore.