Размер книги заказов Binance со временем увеличивается - PullRequest
0 голосов
/ 20 июня 2020

Я сделал простой Python скрипт, который должен транслировать книгу заказов Binance Bitcoin -USD. Я следил за руководством здесь . Я подписался на их поток websocket и начал обновлять местную книгу заказов. Проблема в том, что размер книги заказов продолжает расти, и я не знаю, нормально ли это. Он начинался с длины около 1000 строк, через 13 часов - около 4000. Это нормально или я делаю что-то не так?

Вот как я обновляю книгу заказов:

1) Получить копию частичной книги заказов из конечной точки API https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000

2) Возьмите эти данные, преобразуйте их в словарь, как показано ниже Partial = {'asks:'{...}, 'bids': {...}}, я делаю это потому что dict легче обновить

3) Возьмите каждую строку в обновлении и обновите мой локальный dict новыми данными, используя цену в качестве ключа. Затем я делаю al oop через dict и удаляю каждую строку со значением 0.000000

Код:

#Here is the payload received by the websocket stream
Update = message['data']

#Update bids
for x in Update['b']:
    Partial['bids'].update({x[0]: x[1]})

#Update asks
for x in Update['a']:
    Partial['asks'].update({x[0]: x[1]})

#Remove rows where the value is 0
DelBids = ({k:v for k,v in Partial['bids'].items() if v != '0.00000000'})
DelAsks = ({k:v for k,v in Partial['asks'].items() if v != '0.00000000'})

Где Partial - словарь, в котором я сохраняю копия книги заказов, полученная мной в результате вызова API (см. пункт 1). Приветствуются любые советы!

1 Ответ

1 голос
/ 20 июня 2020

ну размер растет и это нормально. По мере изменения цены вы увеличиваете глобальный диапазон вашей книги заказов. Но есть проблема с вашим процессом. Фактически, насколько я понимаю ваш процесс, вы получаете частичную книгу заказов и обновляете цену в качестве ключевой для вашей местной книги заказов. проблема в том, что вы отслеживаете порядок, которого больше не существует. Фактически, когда вы получаете частичную книгу заказов, вы должны удалить в своей локальной книге заказов всю цену в диапазоне частичных данных, в противном случае вы сохраняете старый порядок, который больше не существует. Если, например, книга частичных заказов go от 9200 до 10200, вам необходимо удалить из своей локальной книги, например, с 9199,99 до 10000,01. вы можете увидеть, что в документации по API: «Получите снимок глубины из https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000. Удалите любое событие, где u <= lastUpdateId в снимке. Первое обработанное событие должно иметь U <= lastUpdateId + 1 И u> = lastUpdateId + 1. При прослушивании потока U каждого нового события должен быть равен u + 1 предыдущего события. " Основная проблема с таким типом локальной книги заказов заключается в том, что вы не можете доверять цене / количеству заказов, выходящим за пределы диапазона частичной книги заказов.

...