关于ThreadedDepthCacheManager未遵循订单簿深度限制的咨询
问题原因与解决方案
你遇到的问题是因为ThreadedDepthCacheManager的limit参数只控制初始订单簿快照的返回深度,而非限制本地缓存的订单数量:
- 首次获取订单簿时,确实会拿到指定的前2档买卖单,但后续Binance推送的增量更新(新挂单、撤单、订单量变化等)会全部合并到本地订单簿缓存中,不管这些订单是否处于前N位。
book.get_bids()返回的是本地缓存里所有存在的买单条目,自然会随着增量更新逐渐增多。
解决方法
如果需要每次都获取最新的前N档订单,得自己在回调里对订单列表做排序截取。订单簿的买单默认按价格从高到低排序,卖单按价格从低到高排序,直接取前limit个即可:
修改后的代码如下:
from binance import ThreadedDepthCacheManager import time def handle_book(book): # 截取排序后的前2档买单 top_bids = sorted(book.get_bids(), key=lambda x: -float(x[0]))[:2] print(f'Top Bids {len(top_bids)}') dcm = ThreadedDepthCacheManager() dcm.start() dcm.start_depth_cache(callback=handle_book, symbol='BTCUSDT', limit=2) while True: time.sleep(0.1)
这样每次回调触发时,你拿到的就是实时的前2档买单,长度会稳定保持为2。
内容的提问来源于stack exchange,提问作者BOOM
相关产品推荐
相关产品推荐

