【问题标题】:Python websocket not getting all dataPython websocket没有获取所有数据
【发布时间】:2018-04-28 11:01:37
【问题描述】:

我正在编写一个 Python 机器人来通过 WebSocket 收集 Bitfinex 开书订单,但我不是一次获取所有数据,而是一一获取。以下是我的代码:

import json

from websocket import create_connection
ws = create_connection("wss://api.bitfinex.com/ws/1")
#ws.connect("wss://api2.bitfinex.com:3000/ws")
ws.send(json.dumps({
"event": "subscribe",
"channel": "book",
"symbol": "tBTCUSD",
"prec": "P1",
"freq": "F1",
"len": "25"
 }))


while True:
result = ws.recv()
result = json.loads(result)
print (result)
ws.close()

首先我得到这些数据:

{'event': 'info', 'version': 1.1, 'platform': {'status': 1}}
{'event': 'subscribed', 'channel': 'book', 'chanId': 9479, 'prec': 'P1', 'freq': 'F1', 'len': '25', 'pair': 'BTCUSD'}
[9479, [[9242, 3, 2.48234792], [9241, 4, 2.14994206], [9240, 7, 18.84], [9239, 4, 0.18569934], [9236, 4, 2.40599999], [9235, 2, 0.84793866], [9234, 3, 0.7], [9232, 1, 0.1], [9230, 5, 17.46637416], [9229, 1, 0.5], [9228, 2, 0.50405148], [9227, 1, 0.05410933], [9226, 3, 6.833112], [9225, 1, 1.2], [9224, 5, 2.44538683], [9222, 6, 8.21999999], [9221, 3, 1.12], [9220, 3, 2.022], [9219, 1, 7.04], [9218, 2, 0.40431586], [9217, 4, 5.68698009], [9216, 4, 2.86999999], [9215, 1, 0.09335208], [9214, 1, 6.1], [9213, 2, 2.02], [9246, 2, -0.042], [9247, 1, -1.079], [9249, 2, -1.20650001], [9250, 8, -42.96401676], [9251, 4, -8.99723363], [9253, 3, -0.02800001], [9254, 2, -0.48926159]

然后一一获取,像这样:

[9479, 9245, 2, 2.01234792]

如何通过 websocket 而不是 API 一次获得完整的订单簿,如下所示:

[9479, [[9242, 3, 2.48234792], [9241, 4, 2.14994206], [9240, 7, 18.84], [9239, 4, 0.18569934], [9236, 4, 2.40599999], [9235, 2, 0.84793866], [9234, 3, 0.7], [9232, 1, 0.1], [9230, 5, 17.46637416], [9229, 1, 0.5], [9228, 2, 0.50405148], [9227, 1, 0.05410933], [9226, 3, 6.833112], [9225, 1, 1.2], [9224, 5, 2.44538683], [9222, 6, 8.21999999], [9221, 3, 1.12], [9220, 3, 2.022], [9219, 1, 7.04], [9218, 2, 0.40431586], [9217, 4, 5.68698009], [9216, 4, 2.86999999], [9215, 1, 0.09335208], [9214, 1, 6.1], [9213, 2, 2.02], [9246, 2, -0.042], [9247, 1, -1.079], [9249, 2, -1.20650001], [9250, 8, -42.96401676], [9251, 4, -8.99723363], [9253, 3, -0.02800001], [9254, 2, -0.48926159], [9255, 2, -2.5], [9256, 4, -10.30405436], [9258, 2, -6.75], [9259, 2, -0.04], [9260, 1, -0.6], [9262, 1, -0.25], [9263, 3, -7.8391], [9264, 1, -1.6], [9265, 2, -0.1606286], [9266, 2, -6.93685322], [9267, 6, -1.87947602], [9268, 4, -17.67527073], [9270, 6, -8.65613095], [9271, 2, -1.75519738], [9272, 6, -2.09804066], [9273, 1, -0.5], [9275, 3, -11.95653655], [9276, 1, -0.75519738]]]

【问题讨论】:

    标签: python sockets websocket cryptocurrency


    【解决方案1】:

    来自官网site

    配对列表不断增长,以获取最新列表 您可以查询此端点的符号: https://api.bitfinex.com/v1/symbols

    因此您可以使用收到的每个新数据附加和更新列表或使用上述 api...

    【讨论】:

    • 拥有 websocket 的全部意义在于避免垃圾邮件轮询 API 以获取最新更新......但是,如果您只想不经常更新,则可以使用 API。
    • api.bitfinex.com/v1/symbols 限制为 10-90 秒。需要实时获取数据
    • @J87 所以只需添加我提到的数据,这是提供的 api,您无法更改他们发送的内容...
    【解决方案2】:

    它似乎工作正常。您收到的初始数据是“完整的”当前订单;接下来的“一一”消息是更新。

    没有办法告诉订阅每次都发送完整的订单;这将浪费 Bitfinex 的带宽。您必须自己在 Python 代码中应用更新。

    顺便说一句,我发现this client 可能有用;但是,您仍然需要自己应用更新。

    【讨论】:

    • 您仍然需要自己应用更新。请指定如何做到这一点,几周前开始编码。我只需要先出价和先问。如果你能帮忙。提前致谢
    • 您到底需要知道什么? JSON 的格式,或者如何在 Python 中处理它?我不太了解 Python,所以无法帮助您解决后一个问题。
    猜你喜欢
    • 2015-12-02
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多