WebSocket API v1 - Como manter um livro de ordens válido

Última atualização: 1/04/2025

O feed do livro de ordens da WebSocket API v1 fornece todos os dados de mercado necessários para manter uma cópia local de um livro de ordens da Kraken.

Por exemplo, o feed do livro de ordens para XBT/USD pode ser usado para recuperar e manter o livro de ordens para o nosso par de moedas Bitcoin/Dólar Americano, exatamente como o livro de ordens é mostrado na nossa plataforma de negociação.

O feed do livro de ordens fornece um instantâneo inicial do livro de ordens atual e, em seguida, transmite atualizações para o livro de ordens em tempo real, para que um livro de ordens mantido através do feed do livro de ordens esteja sempre atualizado.

Detalhes completos do formato JSON para o feed do livro de ordens estão disponíveis na nossa documentação da WebSocket API v1.

Instantâneo do Livro de Ordens

Após subscrever o feed do livro de ordens, a primeira mensagem de dados de mercado será um instantâneo do livro de ordens atual.

O instantâneo do livro de ordens inclui o livro de ordens completo até à profundidade solicitada (subscrita), como o seguinte exemplo do livro de ordens XBT/USD com uma profundidade 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"]

O instantâneo inclui os melhores preços de compra/venda atuais, com os seus volumes disponíveis, e a data/hora em que o nível de preço foi atualizado mais recentemente (como um carimbo de data/hora UNIX em segundos com 6 casas decimais).

Alterações do Nível de Preço

Após o instantâneo inicial, os níveis de preço do livro de ordens são modificados em tempo real através de mensagens de atualização, inserção e eliminação.

Mensagens de Atualização

Uma mensagem de atualização atualiza um nível de preço que já existe no livro de ordens, fornecendo um novo volume e carimbo de data/hora, como a seguinte atualização para o nível de preço 5293.1 no lado da venda do livro de ordens:

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

Embora o preço permaneça o mesmo (5293.1), o volume disponível a esse preço é alterado de 0.69800000 (conforme fornecido pelo instantâneo inicial) para 0.39800000, e o novo carimbo de data/hora para o nível de preço reflete a data/hora em que a alteração ocorreu.

As mensagens de atualização apenas alteram os níveis de preço que já existem no livro de ordens; elas não adicionam nem removem níveis de preço do livro de ordens.

Mensagens de Inserção

Uma mensagem de inserção adiciona um novo nível de preço ao livro de ordens, como a seguinte inserção para o nível de preço 5294.4 no lado da venda do livro de ordens:

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

Cada mensagem de inserção inclui o novo nível de preço (5294.4), o volume disponível a esse preço (0.99600000) e o carimbo de data/hora em que o nível de preço foi atualizado mais recentemente.

As mensagens de inserção alteram os níveis de preço dentro do livro de ordens, criando um novo nível de preço, movendo todos os níveis de preço subsequentes (preços de compra mais baixos ou preços de venda mais altos) para fora e empurrando o nível de preço mais externo para fora do âmbito do livro de ordens.

Por exemplo, a partir do instantâneo inicial acima, a mensagem de inserção:

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

Adicionaria o nível de preço 5294.4 ao livro de ordens no nível 10 (o preço de venda mais alto) e moveria o nível de preço 5294.5 para fora do âmbito do livro de ordens (movendo efetivamente 5294.5 para o nível 11).

Mensagens de Eliminação

Uma mensagem de eliminação remove um nível de preço do livro de ordens, como a seguinte mensagem de eliminação parcial para o nível de preço 5294.1 no lado da venda do livro de ordens:

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

As mensagens de eliminação incluem o nível de preço que já não existe, especificam sempre um volume disponível de 0.0 e incluem um carimbo de data/hora que indica a data/hora em que o nível de preço foi removido do livro de ordens.

As mensagens de eliminação alteram os níveis de preço dentro do livro de ordens, removendo o nível de preço afetado (do livro de ordens na totalidade, não apenas da profundidade subscrita), movendo todos os níveis de preço subsequentes (preços de compra mais baixos ou preços de venda mais altos) para dentro e puxando um novo nível de preço para o âmbito do livro de ordens.

Note que uma eliminação é sempre imediatamente seguida por uma inserção que traz um novo nível de preço para o âmbito no nível mais externo (como o nível 10 para uma profundidade subscrita de 10).

Por exemplo, a partir do instantâneo inicial acima, a mensagem de eliminação/inserção:

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

Isto eliminaria o nível de preço 5294.1 do nível 9 do livro de ordens, moveria o nível de preço 5294.5 do nível 10 para o nível 9 e adicionaria imediatamente o novo nível de preço 5294.7 ao nível 10 do livro de ordens (o nível mais externo e o preço de venda mais alto para uma profundidade de 10).

Recursos Adicionais

Mais detalhes sobre a lógica do livro de ordens estão disponíveis através de uma transcrição de exemplo do livro de ordens e código de exemplo que implementa clientes de linha de comando assíncronos (multi-threaded) e síncronos (single-threaded).

Os separadores decimais e de milhares mostrados neste artigo podem diferir dos formatos exibidos nas nossas plataformas de negociação. Consulte o nosso artigo sobre como usamos pontos e vírgulas para mais informações.

Precisa de mais ajuda?