【问题标题】:Python web socket doesn't return suggested data from coinbase pro apiPython Web 套接字不从 coinbase pro api 返回建议的数据
【发布时间】:2019-10-10 08:22:33
【问题描述】:

我正在尝试通过 websocket 获取股票通道数据。我收到了一些数据的响应,但是我得到的数据与它应该显示的不匹配。

我已尝试执行 API 指定的操作。 API (https://docs.pro.coinbase.com/#the-ticker-channel) 表示发送请求如下:

参数 = { “类型”:“订阅”, “渠道”:[{“名称”:“ticker”,“product_ids”:[“BTC-USD”]}] }

现在这可行,我得到了响应,但是我得到的响应是:

{
“类型”:“股票代码”, “序列”:9568995003, "product_id":"BTC-USD", “价格”:“7779.00000000”, "open_24h":"7895.99000000", "volume_24h":"19546.97986005", "low_24h":"7467.10000000", "high_24h":"7945.50000000", "volume_30d":"569908.80402872", "best_bid":"7775.66", "best_ask":"7778.81" }

当 api 说输出应该是: { “类型”:“股票代码”, “trade_id”:20153558, “序列”:3262786978, “时间”:“2017-09-02T17:05:49.250000Z”, "product_id": "BTC-USD", “价格”:“4388.01000000”, "side": "buy", // 接受方 "last_size": "0.03000000", "best_bid": "4388", “best_ask”:“4388.01” }

如您所见,我缺少last_size 和side。我不确定自己做错了什么。

from websocket import create_connection
import json

URL = "wss://ws-feed.pro.coinbase.com"

ws = create_connection(URL)

params = {
        "type": "subscribe",
        "channels": [{"name": "ticker", "product_ids": ["BTC-USD"]}]
}

def single():
    ws.send(json.dumps(params))

    result =  ws.recv()

    print(result)

single()

预期的输出应该包括 last_size 和 side 标签。非常感谢任何帮助。

【问题讨论】:

    标签: python websocket coinbase-api


    【解决方案1】:

    我自己一直在实现相同的代码,但我也没有将 last_size 和 side 包含在 json 中。我最好的猜测是发送的 json 对象没有检索此信息,据我了解,这意味着您将不得不在没有此信息的情况下使用。如果有人知道检索此信息的方法,请随时纠正我。

    编辑:我想我已经发现了为什么 last_size 未包含在某些响应中的问题(尽管仍然不确定 side)。打印 json 时,价格没有变化,正如我在连续 while 循环中运行时意识到的那样。只有当交易发生时,价格才会发生变化,因此会出现“last_size”类别。我将提供我传递的参数以及代码来说明我是如何得到这个结果的。

    params = {"type": "subscribe", "product_ids": ["BTC-USD"],
    "channels": ["heartbeat", {"name": "ticker", "product_ids": ["BTC-USD"]}]}
    
    while True:
        ws.send(json.dumps(params))
        result = ws.recv()
        print(result)
        time.sleep(1)
        converted = json.loads(result)
    

    如果您在价格没有改变的情况下尝试访问“last_size”,您将收到一个 KeyError。我的建议是捕获此错误并忽略该 json,因为您已经从之前返回的 json 中获得了所有您需要的信息。

    希望这有助于澄清您的问题,我的原始回复对于“side”仍然有效,因为我还没有遇到过接收该信息。

    【讨论】:

    • side 也应该包括在内,我只是在阅读 json 时错过了看到这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2015-04-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多