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?
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()