Le flux WebSocket du carnet d'ordres fournit toutes les données de marché nécessaires au maintien d'une copie locale d'uncarnet d'ordres (https://support.kraken.com/hc/en-us/articles/115000364388#Order_Book) Kraken.
Par exemple, le flux du carnet d'ordres pour BTC/USD pourrait être utilisé pour récupérer et maintenir le carnet d'ordres pour notre paire de devises Bitcoin/US Dollar, exactement comme le carnet d'ordres montré dans notre plateforme de trading (https://trade.kraken.com/).
Le flux du carnet d'ordres fournit une capture d'écran initiale du carnet d'ordres actuel, et ensuite diffuse les mises à jour sur le carnet d'ordres en temps réel, donc un carnets d'ordres géré via le flux sera à jour tout le temps.
Les détails complets du format JSON pour le flux du carnet d'ordres sont disponibles dans notre documentation API WebSocket (https://docs.kraken.com/websockets/#message-book).
Instantané du carnet d'ordres
Après inscription au flux du carnet d'ordres, le premier message de données de marché sera une capture d'écran du carnet d'ordres actuel.
L'instantané du carnet d'ordres inclut la totalité du carnet jusqu'à la profondeur demandée (abonnée), tel que l'exemple suivant du carnet d'ordres BTC/USD pour 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é inclut les meilleurs prix actuels d'offre/demande avec leurs volumes disponibles, et la date/heure à laquelle le niveau de prix a été le plus récemment actualisé (comme un horodatage UNIX en secondes jusqu'à 6 rangs décimaux).
Changements du niveau de prix
Après l'instantané initial, les niveaux de prix du carnet d'ordres sont modifiés en temps réel via les mises à jour, insertions, et les suppressions de messages.
Mise à jour des messages
Un message de mise à jour actualise le niveau de prix déjà présent dans le carnet d'ordres en fournissant un nouveau volume et horodatage, tel que la mise à jour suivante pour le niveau de prix 5293.1 sur la partie demande du carnet d'ordres:
[0,{"a":[["5293.10000","0.39800000","1556724673.104421"]]},"book-10","XBT/USD"]
Alors que le prix reste le même (5293.1), le volume disponible à ce prix est changé de 0.69800000 (comme indiqué dans la capture d'écran initiale) à 0.39800000, et le nouvel horodatage pour le niveau de prix reflète la date/l'heure à laquelle le changement s'est produit.
Les messages de mise à jour changent uniquement les niveaux de prix déjà présents dans le carnet d'ordres, ils n'ajoutent ou ne retirent pas les niveaux de prix de/vers le carnet d'ordres.
Messages d'insertions
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 sur la partie demande du carnet d'ordres:
[0,{"a":[["5294.40000","0.99600000","1556724672.663220"]]},"book-10","XBT/USD"]
Chaque message d'insertion inclut le nouveau niveau de prix (5294.4), le volume disponible à ce prix (0.99600000), et l'horodatage auquel le niveau de prix a été le plus récemment actualisé.
Les messages d'insertions changent les niveaux de prix dans le carnet d'ordre en créant un nouveau niveau de prix, déplaçant tous les niveaux de prix ultérieurs (prix plus bas d'offres ou prix plus élevés de demandes ) vers l'extérieur, et pousser le niveau de prix le plus éloigné hors de portée du carnet d'ordre.
Par exemple, sur l'instantané ci-dessus, le message d'insertion:
[0,{"a":[["5294.40000","0.99600000","1556724672.663220"]]},"book-10","XBT/USD"]
ajouterait le niveau de prix 5294.4 dans le carnet d'ordres au niveau 10 (le plus haut prix de demande), et déplacerait le niveau de prix 5294.5 hors de portée du carnet d'ordres (en déplaçant effectivement 5294.5 au niveau 11).
Messages de suppression
Un message de suppression enlève un niveau de prix du carnet d'ordres, comme la suppression suivante pour le niveau de prix 5294.1 sur la partie demande 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 changent les niveaux de prix dans le carnet d'ordres en retirant les niveau de prix impacté (de la totalité du carnet d'ordres, pas uniquement de la profondeur souscrite), déplacent tous les niveaux de prix ultérieurs (prix d'offre plus bas ou prix de demande plus élevés) vers l'intérieur, et introduisent un nouveau niveau de prix dans la visée du carnet d'ordres.
Remarquez qu'une suppression est presque toujours immédiatement suivie d'une insertion qui amène un nouveau niveau de prix dans la visée du niveau le plus externe (comme le niveau 10 pour une profondeur souscrite de 10).
Par exemple, sur l'instantané initial ci-dessus, le message suppression/insertion:
[0,{"a":[["5294.10000","0.00000000","1556724670.010241"],["5294.70000","3.34000000","1556724653.951982","r"]]},"book-10","XBT/USD"]
Ceci supprimerait le niveau de prix 5294.1 du niveau 9 du carnet d'ordres, déplacerait le niveau du 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 demande le plus élevé pour une profondeur de 10).
Ressources supplémentaires
Plus d'informations de la logique du carnet d'ordres sont disponibles via un exemple de retranscription du carnet d'ordres (https://support.kraken.com/hc/en-us/articles/360027678792-Example-order-book-transcript) et un exemple de code de carnet d'ordres (https://support.kraken.com/hc/en-us/articles/360027677512-Example-order-book-code-Python-2-).