Spread Bid-Ask : le Diagnostic que Tout Algo Trader Devrait Connaître

Le spread bid-ask révèle la liquidité et le coût réel de chaque trade. Comment le lire, le comparer entre exchanges et en mesurer l'impact.

Spread Bid-Ask : le Diagnostic que Tout Algo Trader Devrait Connaître

Deux traders vendent le même altcoin, au même moment. Les deux exchanges affichent le même prix : 100 $. Le premier passe son ordre au marché sur Binance et reçoit 99,99 $. Le second, sur un exchange plus petit, reçoit 99,70 $. Même actif, même instant, même prix affiché. Pourquoi pas 100 $ comme indiqué à l'écran ? Et pourquoi une telle différence entre les deux plateformes ?

La réponse à ces deux questions tient en un seul chiffre : le spread bid-ask. C'est l'écart entre le meilleur prix d'achat et le meilleur prix de vente dans le carnet d'ordres, et il est affiché sur chaque interface de trading. Pourtant, il passe souvent inaperçu. C'est un outil de diagnostic en temps réel : il révèle la liquidité d'un actif, signale la nervosité du marché et trahit le coût réel de chaque transaction. Le spread ne concerne pas que le trading haute fréquence. Que l'on passe un ordre par mois ou mille par jour, il affecte chaque exécution. Savoir le lire permet de comparer des actifs, de choisir un exchange, et de mesurer concrètement combien une stratégie automatisée perd en conditions réelles.

Qu'est-ce que le spread bid-ask ?

Le prix qu'on voit sur un graphique est généralement le mid-price (prix milieu) : la moyenne entre le meilleur prix d'achat et le meilleur prix de vente du carnet d'ordres. Mais personne n'achète ni ne vend exactement à ce prix.

Le carnet d'ordres fonctionne avec deux côtés. Le bid : le prix le plus élevé qu'un acheteur est prêt à payer. L'ask : le prix le plus bas auquel un vendeur accepte de vendre. L'écart entre les deux, c'est le spread bid-ask.

Passer un ordre au marché revient à traverser le spread. On achète au ask, on vend au bid. Le spread est donc le coût de l'immédiateté : le surcoût payé pour être exécuté tout de suite, plutôt que de poser un ordre limite et attendre. Un ordre limite, à l'inverse, se place dans le carnet et attend. Il ne subit pas le coût du spread.

Ce qui fait varier cet écart : le nombre de market makers actifs, le volume échangé et le niveau d'incertitude. Les market makers sont les participants qui assurent la liquidité du marché en proposant en permanence des ordres des deux côtés du carnet. Leur rémunération, c'est le spread lui-même. Quand l'incertitude augmente, ils élargissent leurs fourchettes pour se protéger. Le spread capte donc la nervosité du marché en temps réel, souvent avant même que le prix ne réagisse.

Trois façons de lire le spread

Le spread devient particulièrement parlant quand on le compare. Trois angles de lecture révèlent différentes informations.

Entre actifs, le spread raconte la liquidité. Sur BTC/USDT, il est souvent inférieur à 0,01 %. Sur un altcoin mid-cap, il monte à 0,05 à 0,1 %. Sur un micro-cap, il dépasse parfois 1 %. Plus un actif est peu liquide, plus chaque trade coûte cher. Un spread large signale aussi que l'exécution sera potentiellement imprévisible : de grosses quantités ne trouveront pas assez de contrepartie au meilleur prix. Pour un bot qui trade un altcoin mid-cap régulièrement, un spread moyen de 0,1 % par trade pèse rapidement sur la rentabilité.

Entre exchanges, le spread donne une première indication de la liquidité. La même paire, au même instant, affiche des spreads très différents selon la plateforme. Mais un spread serré ne garantit pas un carnet profond. Un petit ordre passera au prix affiché, alors que 10 000 $ peuvent traverser plusieurs niveaux et subir un coût bien supérieur au spread initial. Pour évaluer la vraie profondeur, on regarde plutôt la liquidité à ±2 % du mid-price. Un exchange affichant des frais de 0,1 % mais un spread de 0,5 % coûte en réalité bien plus cher qu'un exchange à 0,2 % de frais avec un spread de 0,01 %.

Dans le temps, le spread réagit aux événements. Avant une annonce macroéconomique ou lors d'un mouvement brusque, les market makers réduisent leur exposition et élargissent leurs prix. Le spread s'élargit avant que le prix ne bouge vraiment. L'observer en temps réel, c'est voir le marché retenir son souffle. Après l'événement, si le marché digère bien la nouvelle, le spread se resserre progressivement.

Les market makers cherchent à capturer le spread sur chaque exécution : acheter au bid, revendre au ask, et empocher la différence. Plus la concurrence entre eux est forte, plus ils resserrent leurs prix pour être exécutés en priorité, ce qui comprime naturellement le spread.

L'impact du spread sur un bot de trading

Beaucoup de backtests simulent l'exécution au mid-price. C'est confortable, mais c'est un fantasme. En réalité, chaque trade subit le spread, et l'impact s'accumule.

Pour le mesurer, on prend une stratégie de momentum simple sur une série de prix synthétique et on calcule ses performances de trois manières : au mid-price (scénario idéal), avec un spread fixe de 0,05 %, et avec un spread variable qui s'élargit quand la volatilité augmente.

Le code Python ci-dessous réalise cette simulation :

import numpy as np

np.random.seed(42)
n_days = 252

# Série avec autocorrélation (le momentum a un edge)
noise = np.random.normal(0, 0.015, n_days)
returns = np.zeros(n_days)
for i in range(1, n_days):
    returns[i] = 0.12 * returns[i-1] + noise[i] + 0.0002

# Signaux momentum : long si return > 0, short sinon
signals = np.where(returns > 0, 1, -1)
trades = np.abs(np.diff(signals)) / 2

# Trois modèles de coût (appliqués uniquement lors d'un trade)
spread_fixed = trades * 0.0005                               # 0.05 %
spread_var = trades * (0.0002 + 0.03 * np.abs(returns[1:]))  # corrélé à la volatilité

# PnL et equity curves
pnl = signals[:-1] * returns[1:]
equity_mid = np.cumprod(1 + pnl)
equity_fix = np.cumprod(1 + pnl - spread_fixed)
equity_var = np.cumprod(1 + pnl - spread_var)

On génère une série de rendements avec une légère autocorrélation positive (les rendements tendent à conserver leur direction d'un jour à l'autre), pour que la stratégie momentum ait un edge exploitable. Les signaux sont simples : +1 (long) si le rendement précédent est positif, −1 (short) sinon. Le coût de spread n'est appliqué que les jours où la position change réellement.

Les courbes à spread fixe et variable sont quasiment superposées (orange sous rouge) : sur BTC, le modèle de spread importe peu car les spreads sont serrés. L'écart qui compte, c'est celui avec le mid-price : 7 points de pourcentage sur un an (+16 % contre +9 %). C'est la "taxe réalité", elle s'accumule silencieusement, trade après trade.

Sur un altcoin à faible liquidité, le tableau change radicalement. En gardant exactement la même stratégie et les mêmes signaux, mais en appliquant un spread fixe de 0,3 % et un spread variable avec une base de 0,2 % (paramètres réalistes pour un altcoin mid-cap sur un exchange secondaire) :

La stratégie "rentable" au mid-price devient perdante. Le spread fixe de 0,3 % fait passer la performance de +16 % à −20 %, soit un écart de plus de 30 points. Le spread est souvent le premier facteur d'érosion des performances, bien avant les frais d'exchange.

Vers des backtests plus réalistes

Le spread bid-ask n'est pas un ennemi. C'est un coût, au même titre que les frais de trading. Le prendre en compte dans ses backtests, c'est éviter de surestimer une stratégie sur le papier et se retrouver avec de mauvaises surprises le jour où le bot tourne en réel.

Un projet intéressant pour aller plus loin serait de collecter des données de spread en temps réel via WebSocket. En enregistrant le meilleur bid et le meilleur ask à chaque instant, on construit un historique de spreads réels qu'on peut rejouer dans ses backtests. Non plus un spread simulé, mais les conditions de marché réelles au moment où chaque signal a été généré. Celles et ceux qui ont suivi notre newsletter sur les WebSockets et le trading en temps réel reconnaîtront le mécanisme, il suffit d'ajouter un callback qui enregistre bid, ask et timestamp à chaque mise à jour du carnet.

Le simple fait de vérifier le spread moyen d'une paire avant de lancer une stratégie suffit à éviter bien des déconvenues. Il existe d'ailleurs des solutions pour réduire, voire éviter, ce coût. Nous avons développé un algorithme d'exécution d'ordres conçu exactement pour cela. Sur six mois et un peu moins de 30 millions de dollars de volume, il a notamment permis à un client d'économiser 4 700 $ par rapport à de simples exécutions au marché. Pour en savoir plus, contactez-nous à tristan@crypto-robot.com.