Binance 订单簿大小随时间增加

Binance orderbook size increases over time

我制作了一个简单的 Python 脚本,用于流式传输 Binance 比特币-美元订单。我遵循了指南 here。我订阅了他们的 websocket 流并开始更新我的本地订单簿。问题是订单簿的大小不断增长,我不知道这是否正常。它从大约 1000 行的长度开始,13 小时后大约为 4000 行。这是正常的还是我做错了什么?

这是我更新订单簿的方式:

1) 从 API 端点检索部分订单簿的副本 https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000

2) 获取该数据,将其转换为如下所示的字典Partial = {'asks:'{...}, 'bids': {...}},我这样做是因为字典更容易更新

3) 获取更新中的每一行,并使用价格作为键使用新数据更新我的本地字典。然后我循环遍历 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 点)。任何类型的建议都将不胜感激!

好吧,尺寸在增长,这是正常的。随着价格的变化,您将增加订单簿的全球范围。但是你的过程有问题。事实上,据我了解您的流程,您会收到部分订单簿并以价格作为本地订单簿的关键进行更新。问题是您跟踪不再存在的订单。 实际上,当您收到部分订单簿时,您必须删除本地订单簿中部分数据范围内的所有价格,否则,您将保留不再存在的旧订单。例如,如果部分订单簿从 9200 变为 10200,则您必须从本地删除 9199,99 至 10000,01。您可以在 api 文档中看到: “从 https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000 获取深度快照。 删除快照中 u <= lastUpdateId 的任何事件。 第一个处理的事件应该有 U <= lastUpdateId+1 AND u >= lastUpdateId+1。 在收听流时,每个新事件的 U 应该等于前一个事件的 u+1。” 这种本地订单簿的主要问题是,您不能信任部分订单簿范围之外的订单 price/quantities。