币安订单簿管理
binance orderbook management
我从 binance api 获得了 BTCUSDT 的订单历史数据。根据 'how to manage local orderbook' 上的 binance api,首先使用 websocket 获取和缓冲数据,然后使用 api 获取订单数据并使用 lastOrderId 删除我缓冲的过时数据。但是我得到的数据是 2 个 csv 文件。 depth_snap 和 depth_update。所以我试着按照 api 告诉我的去做。第一部分已经完成,因为它说要使用存储在 depth_update 中的 websocket 获取缓冲区数据。并通过使用 depth_snap 中的 lastOrderId 我尝试执行第二部分,删除过时的数据,才意识到无法使用 lastOrderId。
我检查了 lastOrderId,发现 lastOrderId 在 depth_snap 和 depth_update 中没有重叠。所以我认为我应该使用 depth_snap 数据而不是 depth_update。但是数据之间的时间间隔大约是 40 分钟,这太长了。
我确实检查了时间戳以确保数据在同一日期
如何使用此 depth_snap 和 depth_update 创建订单簿数据?
我检查了时间戳和 csv 文件(depth_snap.csv 在不同日期)之间的 lastOrderId 和 pu(以前数据的 lastOrderId),发现它们是有序的。因为数据是连续的,所以只使用 depth_snap 并制作订单数据可以吗?
您应该添加代码以明确您所做的事情。
根据我自己的经验,您应该如何使用 binance websocket:
client = Client('PUBLICKEY')
data = {}
def spread(msg):
latence = msg['data']['T']-time.time()*1000
msg['lat'] = latence
if np.abs(latence) < 500:
msg['latence'] = False
else:
msg['latence'] = True
with open('data/w'+msg['data']['s']+".dat", 'wb') as out:
pickle.dump(msg, out)
os.rename('data/w'+msg['data']['s']+".dat",'data/'+msg['data']['s']+".dat")
print ("WEBSOCKET %s" % (round(latence)))
bm = BinanceSocketManager(client)
conn_key = bm.start_all_ticker_futures_socket(spread)
bm.start()
换句话说,您应该不在回调函数中进行任何处理。
您应该在任何您喜欢的地方写入数据,然后在其他地方进行处理。
我知道这些指导方针可能看起来有悖常理,但如果不遵循这一点,我个人会遇到长达数十秒的延迟,并且一直停留在过去,无法恢复。
您还应该计算延迟以标记何时暂停操作。
如果您随着时间的推移监控 Binance API 延迟,您有时会观察到巨大的延迟峰值,尤其是当您在市场上出现大幅波动时。
我从 binance api 获得了 BTCUSDT 的订单历史数据。根据 'how to manage local orderbook' 上的 binance api,首先使用 websocket 获取和缓冲数据,然后使用 api 获取订单数据并使用 lastOrderId 删除我缓冲的过时数据。但是我得到的数据是 2 个 csv 文件。 depth_snap 和 depth_update。所以我试着按照 api 告诉我的去做。第一部分已经完成,因为它说要使用存储在 depth_update 中的 websocket 获取缓冲区数据。并通过使用 depth_snap 中的 lastOrderId 我尝试执行第二部分,删除过时的数据,才意识到无法使用 lastOrderId。
我检查了 lastOrderId,发现 lastOrderId 在 depth_snap 和 depth_update 中没有重叠。所以我认为我应该使用 depth_snap 数据而不是 depth_update。但是数据之间的时间间隔大约是 40 分钟,这太长了。
我确实检查了时间戳以确保数据在同一日期
如何使用此 depth_snap 和 depth_update 创建订单簿数据? 我检查了时间戳和 csv 文件(depth_snap.csv 在不同日期)之间的 lastOrderId 和 pu(以前数据的 lastOrderId),发现它们是有序的。因为数据是连续的,所以只使用 depth_snap 并制作订单数据可以吗?
您应该添加代码以明确您所做的事情。
根据我自己的经验,您应该如何使用 binance websocket:
client = Client('PUBLICKEY')
data = {}
def spread(msg):
latence = msg['data']['T']-time.time()*1000
msg['lat'] = latence
if np.abs(latence) < 500:
msg['latence'] = False
else:
msg['latence'] = True
with open('data/w'+msg['data']['s']+".dat", 'wb') as out:
pickle.dump(msg, out)
os.rename('data/w'+msg['data']['s']+".dat",'data/'+msg['data']['s']+".dat")
print ("WEBSOCKET %s" % (round(latence)))
bm = BinanceSocketManager(client)
conn_key = bm.start_all_ticker_futures_socket(spread)
bm.start()
换句话说,您应该不在回调函数中进行任何处理。
您应该在任何您喜欢的地方写入数据,然后在其他地方进行处理。
我知道这些指导方针可能看起来有悖常理,但如果不遵循这一点,我个人会遇到长达数十秒的延迟,并且一直停留在过去,无法恢复。
您还应该计算延迟以标记何时暂停操作。
如果您随着时间的推移监控 Binance API 延迟,您有时会观察到巨大的延迟峰值,尤其是当您在市场上出现大幅波动时。