API v1 de WebSocket - Cómo mantener un libro de órdenes válido

Última actualización: 1 abr 2025

El feed del libro de órdenes de la API v1 de WebSocket proporciona todos los datos de mercado necesarios para mantener una copia local del libro de órdenes de Kraken.

Por ejemplo, el feed del libro de órdenes para XBT/USD podría usarse para recuperar y mantener el libro de órdenes de nuestro par de divisas Bitcoin/Dólar estadounidense, exactamente como se muestra el libro de órdenes en nuestra plataforma de trading.

El feed del libro de órdenes proporciona una instantánea inicial del libro de órdenes actual y luego transmite actualizaciones al libro de órdenes en tiempo real, por lo que un libro de órdenes mantenido a través del feed del libro de órdenes estará siempre actualizado.

Los detalles completos del formato JSON para el feed del libro de órdenes están disponibles en nuestra documentación de la API v1 de WebSocket.

Instantánea del libro de órdenes

Después de suscribirse al feed del libro de órdenes, el primer mensaje de datos de mercado será una instantánea del libro de órdenes actual.

La instantánea del libro de órdenes incluye el libro de órdenes completo hasta la profundidad solicitada (suscrita), como el siguiente ejemplo del libro de órdenes de XBT/USD con una profundidad 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"]

La instantánea incluye los precios actuales de mejor oferta/demanda, con sus volúmenes disponibles, y la fecha/hora en que el nivel de precio fue actualizado más recientemente (como una marca de tiempo UNIX en segundos con 6 decimales).

Cambios en el nivel de precios

Después de la instantánea inicial, los niveles de precios del libro de órdenes se modifican en tiempo real mediante mensajes de actualización, inserción y eliminación.

Mensajes de actualización

Un mensaje de actualización actualiza un nivel de precio que ya existe dentro del libro de órdenes al proporcionar un nuevo volumen y una marca de tiempo, como la siguiente actualización para el nivel de precio 5293.1 en el lado de la demanda del libro de órdenes:

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

Mientras el precio permanece igual (5293.1), el volumen disponible a ese precio cambia de 0.69800000 (según lo proporcionado por la instantánea inicial) a 0.39800000, y la nueva marca de tiempo para el nivel de precio refleja la fecha/hora en que ocurrió el cambio.

Los mensajes de actualización solo cambian los niveles de precios que ya existen dentro del libro de órdenes; no añaden ni eliminan niveles de precios del libro de órdenes.

Mensajes de inserción

Un mensaje de inserción añade un nuevo nivel de precio al libro de órdenes, como la siguiente inserción para el nivel de precio 5294.4 en el lado de la demanda del libro de órdenes:

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

Cada mensaje de inserción incluye el nuevo nivel de precio (5294.4), el volumen disponible a ese precio (0.99600000) y la marca de tiempo en que el nivel de precio fue actualizado más recientemente.

Los mensajes de inserción cambian los niveles de precios dentro del libro de órdenes al crear un nuevo nivel de precio, moviendo todos los niveles de precios subsiguientes (precios de oferta más bajos o precios de demanda más altos) hacia afuera, y empujando el nivel de precio más externo fuera del alcance del libro de órdenes.

Por ejemplo, a partir de la instantánea inicial anterior, el mensaje de inserción:

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

Añadiría el nivel de precio 5294.4 al libro de órdenes en el nivel 10 (el precio de demanda más alto), y movería el nivel de precio 5294.5 fuera del alcance del libro de órdenes (al mover efectivamente 5294.5 al nivel 11).

Mensajes de eliminación

Un mensaje de eliminación elimina un nivel de precio del libro de órdenes, como el siguiente mensaje de eliminación parcial para el nivel de precio 5294.1 en el lado de la demanda del libro de órdenes:

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

Los mensajes de eliminación incluyen el nivel de precio que ya no existe, siempre especifican un volumen disponible de 0.0 e incluyen una marca de tiempo que indica la fecha/hora en que el nivel de precio fue eliminado del libro de órdenes.

Los mensajes de eliminación cambian los niveles de precios dentro del libro de órdenes al eliminar el nivel de precio afectado (del libro de órdenes por completo, no solo de la profundidad suscrita), moviendo todos los niveles de precios subsiguientes (precios de oferta más bajos o precios de demanda más altos) hacia adentro, y atrayendo un nuevo nivel de precio al alcance del libro de órdenes.

Tenga en cuenta que una eliminación siempre va seguida inmediatamente de una inserción que introduce un nuevo nivel de precio en el alcance en el nivel más externo (como el nivel 10 para una profundidad suscrita de 10).

Por ejemplo, a partir de la instantánea inicial anterior, el mensaje de eliminación/inserción:

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

Esto eliminaría el nivel de precio 5294.1 del nivel 9 del libro de órdenes, movería el nivel de precio 5294.5 del nivel 10 al nivel 9, e inmediatamente añadiría el nuevo nivel de precio 5294.7 al nivel 10 del libro de órdenes (el nivel más externo y el precio de demanda más alto para una profundidad de 10).

Recursos adicionales

Hay más detalles sobre la lógica del libro de órdenes disponibles a través de una transcripción de ejemplo del libro de órdenes y código de ejemplo que implementa clientes de línea de comandos asíncronos (multihilo) y síncronos (un solo hilo).

Los separadores decimales y de miles que se muestran en este artículo pueden diferir de los formatos mostrados en nuestras plataformas de trading. Revise nuestro artículo sobre cómo usamos los puntos y las comas para obtener más información.

¿Necesita más ayuda?