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. |