
The Kingfisher : Qualité du Marché
La santé et la maturité d'un marché ne peuvent être estimées uniquement par le prix et le volume. Ses acteurs et leurs relations ont un…
The Kingfisher : Qualité du Marché
Précédemment présenté dans le digest de novembre 2020 de FTX
La santé et la maturité d'un marché ne peuvent être estimées uniquement par le prix et le volume. Ses acteurs et leurs relations ont un impact significatif sur la direction que tend à prendre une industrie. Nous examinerons les plateformes d'échange (exchanges), les teneurs de marché majeurs (market makers) et les participants courants au marché, ainsi que la manière dont leurs interactions façonnent les marchés de la cryptomonnaie.
Dans cet article, nous aborderons les limites physiques des moteurs de matching des plateformes d'échange, l'impact de ces limites sur le marché global de la cryptomonnaie, et quelques propositions susceptibles de rendre les cryptos plus équitables et efficaces.
Les limites physiques du trading
Depuis des milliers d'années, les humains s'efforcent de rendre leurs marchés plus résilients, efficaces et toujours plus rapides. Des réseaux logistiques aux systèmes de traitement des paiements en ligne, la recherche de la réduction de la latence est aussi ancienne que les marchés eux-mêmes. Que se passe-t-il lorsqu'une industrie rencontre un obstacle qu'elle ne peut pas franchir ? La découverte du silicium et ses applications nous ont permis de rapprocher la vitesse de propagation de l'information de la vitesse de la lumière. Nous ne pouvons pas aller plus vite.
Ayant travaillé sur le moteur de matching d'Euronext, j'ai acquis une compréhension de la manière d'exploiter au maximum les limites physiques du matériel et de développer des Moteurs de Matching (ME) plus rapides.
Le ME est le cœur de toute plateforme d'échange. Les hommes, marathonien très qualifiés, ont un rythme cardiaque lent mais puissant qui peut accomplir beaucoup, chaque battement étant optimisé pour offrir une option efficacité et vitesse pour acheminer les nutriments vers les tissus et les muscles. De même, le ME est responsable de la résolution efficace et rapide des opérations de trading, tout en veillant à ce que les informations résultantes soient transmises à la partie appropriée des infrastructures de la plateforme d'échange, de manière fiable et résiliente. La latence du ME diminue d'année en année grâce aux équipes des plateformes d'échange qui travaillent d'arrache-pied, tandis que certains anciens leaders commencent à se reposer sur leurs lauriers, perdant de plus en plus de clients chaque jour.
« Si vous ne montez pas, vous descendez »
Descendons pour monter : Démystification du CPU 101 :
Le milieu des années 2000 a marqué la fin de l'ère de la loi de Moore, où la mise à niveau vers du matériel à plus haute fréquence apportait des améliorations automatiques de performance. Au lieu de cela, l'industrie s'est tournée vers un modèle où les gains de performance proviennent de l'ajout d'unités d'exécution (cœurs) supplémentaires. Cependant, l'exploitation des architectures multicœurs nécessite des efforts de développement et de test supplémentaires, et une approche naïve consistant à ajouter plus de threads ne répond souvent pas aux attentes de scalabilité. Pourquoi ?
« Un seul processeur central (CPU) est très performant pour une tâche, plusieurs CPU ne sont pas bons en équipe par défaut ».
Un CPU est composé d'une unité de traitement et d'une unité de mémoire. Un cœur de CPU est organisé pour exécuter des instructions à sa fréquence. Par exemple, un CPU de 3 GHz traite chaque instruction en 0,333 ns (1 000 000 000 ns = 1 sec). La technologie des semi-conducteurs (en nanomètres) détermine les limites physiques.
La réalité est bien plus complexe. Nous supposons que les instructions et les données sont déjà stockées dans les registres physiques du CPU qui fonctionnent à la même vitesse que la fréquence du CPU. En réalité, les instructions et les données sont stockées dans une architecture de mémoire cache à plusieurs niveaux (L1/L2/L3). Plus elle est proche physiquement de l'unité de traitement du CPU sur la puce, plus elle est rapide et petite. Le cache L1 est donc le plus rapide et le plus petit. La Figure 1 montre la microarchitecture du CPU multicœur et la taille/vitesse correspondante de chaque niveau de cache.

Figure 1 : Microarchitecture du CPU multicœur
Pour comprendre ce qui allonge la latence et fait perdre des cycles, nous devons comprendre les fondamentaux de la Loi Universelle de Scalabilité appliquée au système CPU multicœur. Les principaux paramètres qui impactent la scalabilité sont :
- Contention des ressources du cœur : due à l'hyperthreading par exemple. Plusieurs threads logiciels veulent accéder simultanément aux mêmes unités d'exécution, et le traitement est donc sérialisé et priorisé.
- Contention de la mémoire cache : elle se produit lorsqu'il y a contention du même cœur sur sa mémoire cache privée (L1/L2) en cas de changement de contexte du système d'exploitation, ou lorsque la taille du problème est trop grande pour être stockée dans la mémoire cache privée. Ce phénomène est appelé cache thrashing (saturation du cache). En multicœur, le cache thrashing se produit sur le cache L3 partagé (ou LLC, Last Level Cache) entre les cœurs. Par conséquent, l'impact est de plusieurs centaines de nanosecondes perdues en latence. La solution doit être un logiciel intelligent qui améliore la localité des données dans le traitement en cache afin d'améliorer également l'utilisation de la bande passante mémoire tout en maintenant le cœur du CPU occupé à effectuer des calculs locaux ; c'est un problème très difficile, et il n'existe pas de solution simple aujourd'hui.
- Cohérence du cache : il s'agit d'un mécanisme matériel qui permet une communication fluide d'un cœur à l'autre chaque fois qu'il y a une synchronisation logicielle (mutex, barrière, etc.) ou un accès à la même zone mémoire par les deux cœurs. Une simple cohérence de cache (une ligne de cache) coûte au moins 600 cycles.
Charge subie par les moteurs de matching
Compte tenu des limitations des CPU, les plateformes d'échange doivent gérer leurs opérations. Premièrement, elles doivent gérer les positions de leurs traders. Cela les expose à des risques de liquidité lorsque des liquidations massives surviennent lors d'épisodes de forte volatilité. Les plateformes d'échange ont tendance à gérer la liquidation de ces positions de manière à éviter des effets d'entraînement sur les autres participants au marché lorsque des liquidations massives se produisent. Elles doivent également appliquer les règles du marché et mettre en file d'attente les transactions (backlog trades), afin d'assurer la résilience et la cohérence de leurs services.
Le 99e centile représente les 1 % de valeurs de latence les plus élevées pour les requêtes évaluées dans un intervalle de temps donné pour une tâche donnée. Un logiciel résilient et efficace sera jugé sur le 99e centile qui deviendra le seuil de latence annoncé. Les moteurs de matching des plateformes d'échange, quelle que soit la qualité de leur codage, seront toujours limités par ces latences, ce qui limite le débit total de transactions pour leurs utilisateurs. Si une plateforme d'échange a un montant plafonné de transactions par seconde.

Cela représente quelques milliers d'opérations par instruction de matching, que le ME doit gérer. Elles ont également des contraintes pour les demandes commerciales liées au service de nombreux instruments et au traitement de millions de messages par seconde.
Comment atteindre la scalabilité et la stabilité d'un point de vue architectural ?
Le ME est un profil de calcul au flux de travail hautement interconnecté, combinant des données provenant de multiples sources, où la fréquence de communication entre les modules et leurs interdépendances sont élevées et dynamiques. La synchronisation et la planification des threads doivent être effectuées de manière dynamique et rapide.
Le logiciel réactif (Reactive software) est une philosophie de conception et un changement de paradigme qui englobe la construction de microservices réactifs à grande échelle et d'applications réactives à grain fin (un seul processus). Basé sur une conception de passage de messages asynchrone, il existe une pléthore de modèles de programmation concurrents qui permettent de construire un logiciel réactif à partir de zéro. Le modèle d'acteur (actor model) est l'un de ces modes de programmation éprouvés.
Les acteurs sont un concept très efficace, soutenant l'ensemble du cycle de vie, du développement à la production. En étant directement mappés à des concepts fonctionnels, les acteurs raccourcissent la distance entre les architectures métier et fonctionnelles ; ils encapsulent la logique à un niveau suffisamment granulaire pour répartir le travail entre les développeurs ; ils sont des concepts directement utilisables pour les tests ; et ils permettent aux administrateurs de décider dynamiquement de la topologie, en fonction du matériel disponible et de la charge de l'application.
Le ME recevant ces opérations distribuera les calculs nécessaires entre les cœurs de CPU disponibles. Si un cœur est plein, les données sont envoyées soit à un niveau de cache supérieur, soit aux sockets de la carte mère, soit, dans le pire des cas, de retour à la RAM et envoyées aux ressources matérielles (ce qui a le coût le plus élevé car il faut atteindre d'autres composants).
Chaque fois qu'un cœur doit se synchroniser pour équilibrer la charge, il paie la « taxe de latence ». Plus vous ajoutez de cœurs, plus les données peuvent être réparties, mais plus vous payez de taxes de latence. Cette taxe augmente de façon exponentielle. C'est principalement pour cette raison que les plateformes d'échange ne peuvent pas simplement évoluer en achetant plus de serveurs, et c'est aussi pour cela qu'elles peuvent être victimes de leur propre succès. Le point critique de la latence est atteint lorsque l'entropie s'installe, propageant les données à de nombreux cœurs qui se font simplement des promesses mutuelles d'attendre les données pour exécuter les instructions.
La stratégie utilisée par les ingénieurs est de dédier chaque cœur à un rôle spécifique et de ne jamais rien faire d'autre, de s'assurer qu'ils ne reçoivent jamais trop de données ou d'instructions, et d'éviter autant que possible toute synchronisation et tout caractère aléatoire provenant des entrées. Pour y parvenir, ils devront soit dépenser de l'argent en recherche et/ou investir dans des logiciels pour gérer l'allocation de mémoire et le contrôle des cœurs. Et surtout avoir des ingénieurs rigoureux qui ne gaspillent aucun octet de temps CPU.
Dilemme :
Les plateformes d'échange et le marché dans son ensemble se trouvent face à un dilemme : augmenter la charge au prix de rendre leurs limites de vitesse et de latence plus apparentes.
Côté offre (Sell side) :
Du point de vue du côté offre (plateformes d'échange), vous dépensez beaucoup d'argent pour développer des solutions afin de mieux gérer l'entropie. Vous avez besoin de développeurs talentueux qui comprennent le dilemme de la latence, y compris l'entropie générée par une base de clients croissante (logiciels de trading, traders algorithmiques, teneurs de marché). À un certain point, les limites de conception sont atteintes par les lois de la physique. Étant donné que toute erreur s'accumule et peut rapidement devenir douloureuse, cela finit par limiter la capacité de développement jusqu'à ce que l'innovation soit tuée par la peur de créer de nouveaux coûts de latence. Les plateformes d'échange doivent finalement réduire le risque de dysfonctionnement du ME en raison de ce qui peut s'apparenter à un déni de service distribué (Distributed Denial of Service) opéré par des participants légitimes au marché.
Pour atténuer ces risques, elles appliquent des limites de débit (rate limits) et priorisent les instructions qui leur apportent les meilleures opportunités commerciales. Le CPU et la latence sont de la physique et des mathématiques. La recherche, la rigueur et les notions d'« équité » sont laissées à la discrétion humaine. Si vous ralentissez tout le monde, vous rendez le marché moins efficace pour la majorité des traders. Cela donne alors un avantage à ceux qui disposent de ressources (ingénieur en codage bas niveau, capital à déployer, équipe de recherche, volume). Un autre point mérite d'être mentionné : chaque opération, pour des raisons légales, doit être enregistrée, même s'il s'agit d'annuler l'ordre quelques millisecondes plus tard. Les sociétés de HFT (trading à haute fréquence) exercent une forte charge sur les plateformes d'échange avec des ressources majoritairement gaspillées au détriment de la plateforme.
Côté demande (Buy side) :
Du point de vue du côté demande (clients), un ME illimité permet de meilleures stratégies, plus de concurrence, des marchés plus efficaces, de meilleures opportunités d'arbitrage entre les plateformes d'échange, et un marché plus équitable pour les traders à faible volume qui peuvent accéder à la liquidité au même rythme que tout le monde.
Lorsque le nombre de clients augmente, le ME ralentit et exclut la plupart des traders. L'achat de serveurs à proximité géographique des serveurs des plateformes d'échange permet à certains participants au marché d'envoyer des modèles de prix spécifiques, ce qui présente un intérêt particulier du point de vue réglementaire et des plateformes d'échange. Pendant les périodes de forte volatilité, le HFT consommera principalement la liquidité des concurrents et absorbera les ordres passifs des non-HFT qui parviennent au flux d'ordres (orderflow). Les preneurs (Takers) ont tendance à agir comme des traders informés et leur flux d'ordres peut être considéré comme toxique pour les autres participants.
Un exemple que la plupart des traders ont déjà rencontré est celui d'une stratégie HFT envoyant des ordres à un rythme de 6 000 ordres placés et annulés par seconde. Cela signifie que chaque cotation a une durée de vie inférieure à 1,6 millionième de seconde – le temps qu'il faut à la lumière pour parcourir environ 1 500 pieds. Toute personne située au-delà de la moitié de cette distance n'a aucune chance d'exécuter contre ces cotations. Il s'agit d'une stratégie couramment utilisée appelée quote stuffing (bourrage de cotations), rendue possible parce qu'un participant au marché se trouve dans le même centre de données que la plateforme d'échange. Cela conduit aujourd'hui à des écarts (spreads) cachés importants, créés lorsque des ordres agressifs frappent la plateforme d'échange.
Des questions se posent sur les règles de marché que seul le côté offre peut appliquer avec l'incitation des régulateurs ou de l'autoréglementation pour améliorer la qualité de leurs services. Les partisans du HFT diront qu'ils améliorent la liquidité en réduisant l'écart (spread) et la possibilité d'autres stratégies malveillantes, comme le spoofing, de se produire.
D'autres diront qu'une telle vitesse est injuste. Les non-HFT se retrouvent pris en sandwich entre les limites de débit, les stratégies d'arbitrage statistique et les cotations fantômes (ghost quotes), ce qui réduit les chances de victoire des petits participants. En plus des participants hautement qualifiés, de nouveaux produits comme les quantos d'altcoins ont émergé ces dernières années et sont les plus préoccupants au moment de la rédaction de cet article. L'engouement pour les ICO et la plupart des écrits et formations sur le piège de la liquidité du marché des cryptomonnaies ont conduit les traders à préférer les produits à effet de levier avec une liquidité améliorée plutôt que les pièces/jetons au comptant à faible liquidité, comme détaillé dans le précédent digest de FTX de juin par Clarens Caraccio.
Être long sur un produit « Inverse » est plus risqué que d'être short. À mesure que le prix baisse, la position accumule de plus en plus de delta et expose le trader à un risque de liquidation accru. Une nouvelle vague de traders se tourne vers des produits à effet de levier élevé avec la même faible liquidité sous-jacente au comptant, mais cette fois exposés à un gamma négatif sur les positions « longues » lorsqu'ils utilisent des garanties (collatéral) autres que l'USD.
Les teneurs de marché recherchent des positions neutres, leurs taux d'ordres preneurs (taker orders) dépendent principalement de leur inventaire. En cas de volatilité accrue et sans incitations appropriées, ils ne prendront pas la peine d'exécuter une liquidation optimale de leur inventaire dans des carnets d'ordres (order books) limites faibles






