Binance订单簿大小随时间增加

时间:2020-06-20 08:44:15

标签: python websocket binance

我制作了一个简单的Python脚本,该脚本应该可以传输Binance Bitcoin-USD订单簿。我遵循了指南here。我订阅了他们的websocket流,并开始更新我的本地订单。问题是订单的大小一直在增长,我不知道这是否正常。它从大约1000行的长度开始,在13个小时后大约是4000行。这是正常现象还是我做错了事?

这是我更新订单的方式:

1)从API端点https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000

检索部分订单的副本。

2)获取该数据,将其转换为类似于以下Partial = {'asks:'{...}, 'bids': {...}}的字典,我这样做是因为dict更易于更新

3)接受更新中的每一行,并使用价格作为键,用新数据更新我的本地字典。然后,我遍历字典并删除具有值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 个答案:

答案 0 :(得分:1)

好吧,尺寸越来越大,这是正常的。随着价格的变化,您将扩大订单的全球范围。但是您的过程存在问题。实际上,据我了解您的流程,您会收到部分订单,并以价格作为本地订单的关键更新。问题是您要跟踪不再存在的订单。 实际上,当您收到部分订单时,您必须删除本地订单中部分数据范围内的所有价格,否则,您将保留不再存在的旧订单。例如,如果部分订单簿从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。” 这种本地订单簿的主要问题是,您不能相信部分订单簿范围内的订单价格/数量。