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

KluczTypOpis
changesarrayTablica ze zmianami, które zaszły na rynku.
marketCodestringKod rynku.
entryTypestringTyp transakcji: buy / sell.
ratedecimalKurs transakcji.
actionstringTyp zmiany: remove / update. W przypadku wartości update, zostanie zwrócona dodatkowa tablica state.
statearrayOpcjonalna tablica informacji o pozycji, jeżeli jest aktywna.
* ra decimalKurs pozycji.
* ca decimalObecna ilość kryptowaluty w pozycji.
* sa decimalPoczątkowa ilość kryptowaluty w pozycji.
* pa decimalParametr jest obecnie nieaktywny, jednak w przyszłości będzie zwracał ilość kryptowaluty w pozycji przed ostatnią zmianą.
* co decimalIlość ofert na którą składa się pozycja.
timestampUnix TimestampCzas dla którego powyższe wartości są aktualne.