-
Notifications
You must be signed in to change notification settings - Fork 0
Orderbook
Для получения информации о лучших ценовых предложениях необходимо подписаться на публичный поток "orderbook" через WebSocket.
В общем случае шлюз сохраняет пару цена/объем в словаре std::map< double, double > example_map. Следует отметить, что для asks и bids используются разные словари с разной сортировкой (или с одинаковой сортировкой, но тогда в процессе построения json для asks нужно использовать прямой итератор, а для bids - обратный итератор).
В случае успешной подписки от биржы придет ответ в виде json:
{"type": "subscribed", "channel": "orderbook", "market": "BTC/USDT"}
Далее последуют сообщение, в котором будет содержаться 100 лучших ценовых предложений. Фрагмент представлен ниже:
{
"channel": "orderbook",
"market": "BTC/USDT",
"type": "partial",
"data":
{
"time": 1649006025.0754888,
"checksum": 1378964119,
"bids": [
[46320.0, 8.0988],
[46319.0, 0.2158],
[46294.0, 0.2158],
...
]
"asks": [
[46321.0, 0.1437],
[46328.0, 0.2893],
[46330.0, 0.2158],
...
],
"action": "partial"
}
}
Все последующие сообщения будут содержать информацию об изменениях текущего "стакана":
{
"channel": "orderbook",
"market": "BTC/USDT",
"type": "update",
"data":
{
"time": 1649006025.454782,
"checksum": 3838518087,
"bids": [[46294.0, 0.1001]],
"asks": [],
"action": "update"
}
}
Как видим из примера произошли изменения объема покупки с ценой 46294.0. В этом случае шлюз обновляет ключ в массиве: example_map[46294.0] = 0.1001 (до этого момента example_map содержал ключ 46294.0 со значением 0.2158). Если данный ключ не содержится в первоначальном "стакане", то шлюз просто добавляет ключ в контейнер. Если "предложение" с ценой 46294.0 необходимо отменить, то json будет содержать что-то вроде этого: [46294.0, 0]
Если подписаться на получение ордербуков от несуществующей валютной пары, например "BTK/USDT" вместо "BTC/USDT", то вместо инфомации о ценовых предложениях биржа вернет ошибку:
{"type": "error", "code": 404, "msg": "No such market: BTK/USDT"}
После парсинга json шлюз отправляет код ошибки и содержание ошибки в лог.