API WebSocket v1 - Comment maintenir un carnet d'ordres valide

Dernière mise à jour : 1 avr. 2025

Le flux du carnet d'ordres de l'API WebSocket v1 fournit toutes les données de marché nécessaires pour maintenir une copie locale d'un carnet d'ordres Kraken.

Par exemple, le flux du carnet d'ordres pour XBT/USD pourrait être utilisé pour récupérer et maintenir le carnet d'ordres de notre paire de devises Bitcoin/Dollar américain, exactement comme le carnet d'ordres est affiché sur notre plateforme de trading.

Le flux du carnet d'ordres fournit un instantané initial du carnet d'ordres actuel, puis diffuse les mises à jour du carnet d'ordres en temps réel, de sorte qu'un carnet d'ordres maintenu via le flux du carnet d'ordres sera toujours à jour.

Tous les détails du format JSON pour le flux du carnet d'ordres sont disponibles dans notre documentation de l'API WebSocket v1.

Instantané du carnet d'ordres

Après s'être abonné au flux du carnet d'ordres, le premier message de données de marché sera un instantané du carnet d'ordres actuel.

L'instantané du carnet d'ordres inclut l'intégralité du carnet d'ordres jusqu'à la profondeur demandée (souscrite), comme l'exemple suivant du carnet d'ordres XBT/USD jusqu'à une profondeur de 10 :

[0,{"as":[["5290.80000","1.00000000","1556724667.748660"],["5290.90000","4.49956524","1556724664.331028"],["5291.70000","1.00000000","1556724653.480504"],["5292.00000","0.95388940","1556724619.682690"],["5292.20000","1.51300000","1556724494.497326"],["5293.10000","0.69800000","1556724667.635414"],["5293.20000","2.00000000","1556724656.022756"],["5293.90000","2.83200000","1556724668.057687"],["5294.10000","0.99600000","1556724666.340462"],["5294.50000","5.00000000","1556724661.980996"]],"bs":[["5290.10000","1.43195600","1556724666.594179"],["5289.80000","2.00000000","1556724663.082526"],["5289.40000","0.49400000","1556724665.274827"],["5289.20000","0.89533312","1556724640.520134"],["5287.40000","3.23600000","1556724660.997516"],["5287.30000","3.33000000","1556724659.999108"],["5287.00000","10.20000000","1556724635.850932"],["5286.00000","3.86378703","1556724662.757360"],["5285.70000","6.40000000","1556724488.785281"],["5283.90000","0.50000000","1556723616.006805"]]},"book-10","XBT/USD"]

L'instantané comprend les meilleurs prix d'achat/vente actuels, avec leurs volumes disponibles, et la date/heure de la dernière mise à jour du niveau de prix (sous forme d'horodatage UNIX en secondes avec 6 décimales).

Modifications des niveaux de prix

Après l'instantané initial, les niveaux de prix du carnet d'ordres sont modifiés en temps réel via des messages de mise à jour, d'insertion et de suppression.

Messages de mise à jour

Un message de mise à jour met à jour un niveau de prix qui existe déjà dans le carnet d'ordres en fournissant un nouveau volume et un horodatage, comme la mise à jour suivante pour le niveau de prix 5293.1 du côté de l'offre du carnet d'ordres :

[0,{"a":[["5293.10000","0.39800000","1556724673.104421"]], "c":"408163318"},"book-10","XBT/USD"]

Bien que le prix reste le même (5293.1), le volume disponible à ce prix est modifié de 0.69800000 (tel que fourni par l'instantané initial) à 0.39800000, et le nouvel horodatage pour le niveau de prix reflète la date/heure à laquelle le changement s'est produit.

Les messages de mise à jour ne modifient que les niveaux de prix qui existent déjà dans le carnet d'ordres ; ils n'ajoutent ni ne suppriment de niveaux de prix du carnet d'ordres.

Messages d'insertion

Un message d'insertion ajoute un nouveau niveau de prix au carnet d'ordres, tel que l'insertion suivante pour le niveau de prix 5294.4 du côté de l'offre du carnet d'ordres :

[0,{"a":[["5294.40000","0.99600000","1556724672.663220"]], "c":"393966308"},"book-10","XBT/USD"]

Chaque message d'insertion comprend le nouveau niveau de prix (5294.4), le volume disponible à ce prix (0.99600000) et l'horodatage de la dernière mise à jour du niveau de prix.

Les messages d'insertion modifient les niveaux de prix dans le carnet d'ordres en créant un nouveau niveau de prix, en déplaçant tous les niveaux de prix suivants (prix d'achat inférieurs ou prix de vente supérieurs) vers l'extérieur, et en poussant le niveau de prix le plus éloigné hors du champ d'application du carnet d'ordres.

Par exemple, à partir de l'instantané initial ci-dessus, le message d'insertion :

[0,{"a":[["5294.40000","0.99600000","1556724672.663220"]], "c":"393966308"},"book-10","XBT/USD"]

Ajouterait le niveau de prix 5294.4 au carnet d'ordres au niveau 10 (le prix de vente le plus élevé), et déplacerait le niveau de prix 5294.5 hors du champ d'application du carnet d'ordres (en déplaçant effectivement 5294.5 au niveau 11).

Messages de suppression

Un message de suppression retire un niveau de prix du carnet d'ordres, tel que le message de suppression partielle suivant pour le niveau de prix 5294.1 du côté de l'offre du carnet d'ordres :

[0,{"a":[["5294.10000","0.00000000","1556724670.010241"]] ... },"book-10","XBT/USD"]

Les messages de suppression incluent le niveau de prix qui n'existe plus, spécifient toujours un volume disponible de 0.0, et incluent un horodatage indiquant la date/heure à laquelle le niveau de prix a été retiré du carnet d'ordres.

Les messages de suppression modifient les niveaux de prix dans le carnet d'ordres en supprimant le niveau de prix affecté (du carnet d'ordres entièrement, et pas seulement de la profondeur souscrite), en déplaçant tous les niveaux de prix suivants (prix d'achat inférieurs ou prix de vente supérieurs) vers l'intérieur, et en tirant un nouveau niveau de prix dans le champ d'application du carnet d'ordres.

Notez qu'une suppression est toujours immédiatement suivie d'une insertion qui introduit un nouveau niveau de prix dans le champ d'application au niveau le plus externe (tel que le niveau 10 pour une profondeur souscrite de 10).

Par exemple, à partir de l'instantané initial ci-dessus, le message de suppression/insertion :

[0,{"a":[["5294.10000","0.00000000","1556724670.010241"],["5294.70000","3.34000000","1556724653.951982","r"]], "c":"3679121060"},"book-10","XBT/USD"]

Ceci supprimerait le niveau de prix 5294.1 du niveau 9 du carnet d'ordres, déplacerait le niveau de prix 5294.5 du niveau 10 au niveau 9, et ajouterait immédiatement le nouveau niveau de prix 5294.7 au niveau 10 du carnet d'ordres (le niveau le plus externe et le prix de vente le plus élevé pour une profondeur de 10).

Ressources supplémentaires

De plus amples détails sur la logique du carnet d'ordres sont disponibles via un exemple de transcription du carnet d'ordres et un exemple de code implémentant des clients en ligne de commande asynchrones (multi-thread) et synchrones (mono-thread).

Les séparateurs décimaux et de milliers affichés dans cet article peuvent différer des formats affichés sur nos plateformes de trading. Consultez notre article sur la façon dont nous utilisons les points et les virgules pour plus d'informations.

Besoin d’aide supplémentaire ?