Subskrypcja informująca o aktualizacji ofert w orderbooku. Wersja zredukowana sprowadza się do wysyłania aktualizacji o pierwszych 10 / 50 / 100 ofertach, które zostaną zadeklarowanie w parametrze limit. W przypadku, gdy któraś pozycja z wyznaczonej wcześniej ilości zostanie usunięta lub zrealizowana, otrzymamy pusha o istniejącej już ofercie, która uzupełni ostatnie miejsce na pozycji, tak by zawsze utrzymywać ich stałą, wybraną wcześniej ilość.

{
  "action": "subscribe-public",
  "module": "trading",
  "path": "orderbook-limited/{kod_rynku}/{limit}"
}
{
  "topic": "trading/orderbook-limited/game-pln/10",
  "message": {
    "changes": [
      {
        "marketCode": "GAME-PLN",
        "entryType": "Buy",
        "rate": "10",
        "action": "update",
        "state": {
          "ra": "10",
          "ca": "6",
          "sa": "6",
          "pa": "6",
          "co": 2
        }
      }
    ],
    "timestamp": "1563280204658"
  },
  "timestamp": "1563280204658",
  "seqNo": 5
}
{
  "requestId": "78539fe0-e9b0-4e4e-8c86-70b36aa93d4f",
  "action": "proxy",
  "module": "trading",
  "path": "orderbook-limited/{kod_rynku}/{limit}"
}
{
  "requestId": "78539fe0-e9b0-4e4e-8c86-70b36aa93d4f",
  "statusCode": 200,
  "body": {
    "status": "Ok",
    "sell": [
      {
        "ra": "39500",
        "ca": "0.55345108",
        "sa": "0.55345108",
        "pa": "0.55345108",
        "co": 1
      }
    ],
    "buy": [
      {
        "ra": "39256.01",
        "ca": "0.3468",
        "sa": "0.3468",
        "pa": "0.3468",
        "co": 1
      }
    ],
    "timestamp": "1566468343707",
    "seqNo": "1978936"
  }
}

📘

Sposób implementacji

Aby zachować spójność danych i mieć całkowitą pewność, że orderbook w tworzonej aplikacji nie przegapił żadnych aktualizacji, należy:

  • Połączyć się z kanałem i na osobnej liście zapisywać otrzymane pushe.
  • Pobrać aktualnego snapshota, a następnie zapisać go w docelowej implementacji orderbooka.
  • Zaktualizować orderbooka z listą otrzymanych pushy, zaczynając od wartości o 1 większej od seqNo, wcześniej pobranego snapshota.
  • W przypadku pierwszej, jak i kolejnych aktualizacji, należy również sprawdzać, czy seqNo na pewno posiada wartość o 1 większą od poprzedniej wiadomości oraz czyścić listę po wprowadzeniu zmian w orderbooku.
  • Jeżeli tymczasowa lista nie będzie się zerować, będzie to wina zagubionego pusha i należy na nowo powtórzyć cały proces.

Wartości seqNo będą własne dla każdego z limitów: 10 / 50 / 100 oraz są spójne dla kanału aktualizacji, jak i snapshota.

Szczegóły odpowiedzi

Klucz

Typ

Opis

changes

array

Tablica ze zmianami, które zaszły na rynku.

marketCode

string

Kod rynku.

entryType

string

Typ transakcji: buy / sell.

rate

decimal

Kurs transakcji.

action

string

Typ zmiany: remove / update. W przypadku wartości update, zostanie zwrócona dodatkowa tablica state.

state

array

Opcjonalna tablica informacji o pozycji, jeżeli jest aktywna.

  • ra

decimal

Kurs pozycji.

  • ca

decimal

Obecna ilość kryptowaluty w pozycji.

  • sa

decimal

Początkowa ilość kryptowaluty w pozycji.

  • pa

decimal

Parametr jest obecnie nieaktywny, jednak w przyszłości będzie zwracał ilość kryptowaluty w pozycji przed ostatnią zmianą.

  • co

decimal

Ilość ofert na którą składa się pozycja.

timestamp

Unix Timestamp

Czas dla którego powyższe wartości są aktualne.