web-dev-qa-db-fra.com

Comment obtenir une offre / demande / prix en temps réel à partir du flux Websocket GDAX

Le document API décourage l'interrogation sur /ticker endpoint et recommande d'utiliser le flux websocket pour écouter le message de correspondance

Mais la réponse de correspondance ne fournit qu'un price et un side (vente/achat)

Comment puis-je recréer les données du téléscripteur (prix, demande et offre) à partir du flux Websocket?

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

Le point de terminaison ticker et le flux Websocket renvoient tous les deux un "prix", mais je suppose que ce n'est pas la même chose. Le price du point final ticker est-il une sorte de moyenne dans le temps?

Comment calculer la valeur Bid, Ask value?

18
vdaubry

Si j'utilise ces paramètres dans le message subscribe :

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

Chaque fois qu'un nouveau trade est exécuté (et visible sur http://www.gdax.com ), je reçois ce type de message depuis la socket web:

{
 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'
}

Juste après ce message particulier, j'ai get on https://api.gdax.com/products/BTC-EUR/ticker , et j'ai obtenu ceci:

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

Les données actuelles sont les mêmes à partir du socket Web par rapport à la demande get .

Veuillez trouver ci-dessous un script de test complet implémentant une socket web avec ce ticker.

#!/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()
16
Manu NALEPA