Python Binance订单簿大小随时间增加

Python Binance订单簿大小随时间增加,python,websocket,binance,Python,Websocket,Binance,我制作了一个简单的Python脚本,该脚本将二进制比特币USD订单流化。我跟着导游走。我订阅了他们的websocket流,并开始更新我的本地订单。问题是订单的规模不断扩大,我不知道这是否正常。它从1000行左右开始,13小时后达到4000行左右。这是正常的还是我做错了什么 以下是我更新订单簿的方式: 1) 从API端点检索部分医嘱簿的副本 2) 获取该数据,将其转换为字典,如下面的Partial={'asks:'{…},'bids':{…},我这样做是因为dict更容易更新 3) 获取更新中的每

我制作了一个简单的Python脚本,该脚本将二进制比特币USD订单流化。我跟着导游走。我订阅了他们的websocket流,并开始更新我的本地订单。问题是订单的规模不断扩大,我不知道这是否正常。它从1000行左右开始,13小时后达到4000行左右。这是正常的还是我做错了什么

以下是我更新订单簿的方式:

1) 从API端点检索部分医嘱簿的副本

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

3) 获取更新中的每一行,并使用price作为键用新数据更新我的本地dict。然后我在dict中做一个循环,并删除每一行的值
0.000000

代码:


其中
Partial
是存储从API调用中检索到的订单副本的字典(参见第1点)。感谢您的任何建议

嗯,尺寸在增长,这是正常的。随着价格的变化,您将增加订单的全球范围。但您的流程存在问题。事实上,据我所知,您会收到部分订单,并将价格作为本地订单的关键更新。问题是你要跟踪那些已经不存在的秩序。 事实上,当您收到部分订单簿时,您必须在本地订单簿中删除部分数据范围内的所有价格,否则,您将保留不再存在的旧订单。例如,如果部分订单从9200到10200,则必须从本地订单中删除9199,99到10000,01。您可以在api文档中看到: “从中获取深度快照。
删除u所在的任何事件我想我只需要在收到金额为0.0的事件时从本地订单中删除数据,只有在这种情况下我才需要删除数据。但我应该在什么时候删除范围之外的数据?在我制作屏幕截图时还是在我从websocket接收数据时?这是我不理解的1)Retrieve来自API客户端的副本。获取\u订单\u手册(symbol='BTCUSDT',limit=1000)2)制作部分词典3)从流bm接收更新。启动\u深度\u套接字('BTCUSDT',处理\u消息)4)从部分请求中删除流更新接收的最小/最大请求范围内的所有值,对出价执行相同操作5)使用流更新的值更新部分6)并删除“000000000”的值7)返回步骤3这样做,您的部分在流更新范围内是最新的。要获得更好的部分请求,请order book,您可以不时从API检索数据,以获得更好的更新order book。事实上,如果出现大的双曲线牛市,则风险在于您从流中的更新将位于部分字典的顶部值,而不是通常处于中间范围。这取决于计算字典的时间(但速度应该很快)您可以随时重做所有步骤,以保持流数据从API中复制到副本的中间。很抱歉,迟了的答案!谢谢,现在更清楚了!是的,我想只用API来检索OrrdBooad,但问题是我会轻易地被禁止发送太多的请求。WebScEKT是一个更真实的TI。我的解决方案,唯一的问题是它有点难以维护
#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'})