首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Binance orderbook大小随着时间的推移而增加

Binance orderbook大小随着时间的推移而增加
EN

Stack Overflow用户
提问于 2020-06-20 16:44:16
回答 1查看 1.4K关注 0票数 0

我做了一个简单的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的行

代码:

代码语言:javascript
复制
#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点)。任何建议都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。”这种本地订单簿的主要问题是,您不能信任部分订单簿范围之外的订单价/订单量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62483607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档