我做了一个简单的Python脚本,它应该流式传输Binance比特币-USD订单簿。我跟着向导here走了。我订阅了他们的websocket流,并开始更新我的本地订单簿。问题是订单簿的大小一直在增长,我不知道这是否正常。它从1000行左右开始,13个小时后达到4000行左右。这是正常的还是我做错了什么?
下面是我更新订单簿的方法:
1)从API端点https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000检索部分订单簿的副本。
2)获取数据,将其转换为如下Partial = {'asks:'{...}, 'bids': {...}}所示的字典,我这样做是因为字典更容易更新
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点)。任何建议都是非常感谢的!
发布于 2020-06-20 17:58:38
嗯,大小在增长,这是正常的。随着价格的变化,你需要增加你的订单的全球范围。但是您的流程有一个问题。事实上,根据我对您的流程的理解,您会收到部分订单簿,并将价格作为关键的本地订单簿进行更新。问题是你跟踪的订单已经不存在了。事实上,当您收到部分订单簿时,您必须在本地订单簿中删除部分数据范围内的所有价格,否则,您将保留不再存在的旧订单。例如,如果部分订单簿从9200到10200,您必须从本地删除从9199,99到10000,01。您可以在接口文档中看到:“从https://www.binance.com/api/v1/depth?symbol=BNBBTC&limit=1000获取深度快照。丢弃快照中u为<= lastUpdateId的任何事件。第一个处理的事件应具有U <= lastUpdateId+1和u >= lastUpdateId+1。在监听流时,每个新事件的U应等于前一个事件的u+1。”这种本地订单簿的主要问题是,您不能信任部分订单簿范围之外的订单价/订单量。
https://stackoverflow.com/questions/62483607
复制相似问题