微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

币安订单簿管理

如何解决币安订单簿管理

我从币安 api 获得了 BTCUSDT 的订单簿历史数据。根据关于“如何管理本地订单簿”的 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 延迟,您有时会观察到巨大的延迟峰值,尤其是当您在市场上有重大变动时。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?