如何从 GDAX websocket feed 获取实时出价/要价/价格

Posted

技术标签:

【中文标题】如何从 GDAX websocket feed 获取实时出价/要价/价格【英文标题】:How to get real time bid / ask / price from GDAX websocket feed 【发布时间】:2018-01-14 13:10:11 【问题描述】:

API 文档不鼓励在 /ticker 端点上轮询,并建议使用 websocket 流来监听匹配消息

但匹配响应仅提供priceside(出售/购买)

如何从 websocket 源重新创建代码数据(价格、询价和出价)?


  “price”: “333.99”,
  “size”: “0.193”,
  “bid”: “333.98”,
  “ask”: “333.99”,
  “volume”: “5957.11914015”,
  “time”: “2015-11-14T20:46:03.511254Z”

ticker 端点和 websocket 提要都返回一个“价格”,但我猜它不一样。来自ticker 端点的price 是否随时间推移达到某种平均水平?

如何计算Bid 值、Ask 值?

【问题讨论】:

我最近在探索 gdax api 并且有同样的问题。不知道他们如何计算股票“价格”。由于这个原因,我仍然最终进行了轮询(每 5 秒一次)。 【参考方案1】:

如果我在 subscribe 消息中使用这些参数:

params = 
    "type": "subscribe",
    "channels": ["name": "ticker", "product_ids": ["BTC-EUR"]]

每次执行新交易时(在http://www.gdax.com 上可见),我都会从网络套接字收到此类消息:


 u'best_ask': u'3040.01',
 u'best_bid': u'3040',
 u'last_size': u'0.10000000',
 u'price': u'3040.00000000',
 u'product_id': u'BTC-EUR',
 u'sequence': 2520531767,
 u'side': u'sell',
 u'time': u'2017-09-16T16:16:30.089000Z',
 u'trade_id': 4138962,
 u'type': u'ticker'

就在这条特定消息之后,我在https://api.gdax.com/products/BTC-EUR/ticker 上做了一个get,我得到了这个:


  "trade_id": 4138962,
  "price": "3040.00000000",
  "size": "0.10000000",
  "bid": "3040",
  "ask": "3040.01",
  "volume": "4121.15959844",
  "time": "2017-09-16T16:16:30.089000Z"

get 请求相比,来自 web 套接字的当前数据相同。

请在下面找到一个完整的测试脚本,使用此代码实现 Web 套接字。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Test for websockets."""

from websocket import WebSocketApp
from json import dumps, loads
from pprint import pprint

URL = "wss://ws-feed.gdax.com"


def on_message(_, message):
    """Callback executed when a message comes.

    Positional argument:
    message -- The message itself (string)
    """
    pprint(loads(message))
    print


def on_open(socket):
    """Callback executed at socket opening.

    Keyword argument:
    socket -- The websocket itself
    """

    params = 
        "type": "subscribe",
        "channels": ["name": "ticker", "product_ids": ["BTC-EUR"]]
    
    socket.send(dumps(params))


def main():
    """Main function."""
    ws = WebSocketApp(URL, on_open=on_open, on_message=on_message)
    ws.run_forever()


if __name__ == '__main__':
    main()

【讨论】:

以上是关于如何从 GDAX websocket feed 获取实时出价/要价/价格的主要内容,如果未能解决你的问题,请参考以下文章

Gdax 沙盒 Websocket API 没有返回正确的价格

如何使用 Web 套接字从 GDAX 抓取比特币价格,以便实时更改价值?

使用带有webpack的socket.io连接到GDAX websocket api

Javascript Websocket订阅频道

在 Java 中连接到 websocket

临时从websocket回调存储数据