All
Filtrar por:
¿Cómo deposito efectivo en mi cuenta?
Necesito ayuda con la verificación de la cuenta
¿Por qué no puedo acceder a mi cuenta?
¿Existen comisiones por retirar criptomonedas?
Necesito ayuda para iniciar sesión en mi cuenta
Encontrarás instrucciones detalladas para interpretar el feed del libro de órdenes de la API v1 de WebSocket en nuestra página de soporte Cómo mantener un libro de órdenes válido.
A continuación, se proporciona un código de ejemplo en Python para la integración con el feed del libro de órdenes de la API v1 de WebSocket y el mantenimiento de una copia local de un libro de órdenes.
El código utiliza la biblioteca estándar de Python WebSocket e implementa un enfoque asíncrono (dirigido por eventos/multihilo), que permite que otras tareas continúen en paralelo a la interpretación del feed del libro de órdenes.
El código debe ejecutarse a través de un símbolo del sistema (como la Terminal de macOS) de la siguiente manera:
krakenwsorderbookasync.py symbol depth, o,
python3 krakenwsorderbookasync.py symbol depth
Por ejemplo, el siguiente comando recuperaría e interpretaría el feed del libro de órdenes de Dogecoin/USD (XDG/USD) con una profundidad de 10 niveles de precio (por lado):
krakenwsorderbookasync.py XDG/USD 10
Ten en cuenta que el código se ejecutará indefinidamente hasta que se termine mediante una interrupción de teclado (Ctrl+C en la mayoría de los entornos de línea de comandos).
El código Python se puede ver a continuación y también se puede descargar como krakenwsorderbookasync.py.
#!/usr/bin/env python3
# Import WebSocket client library (and others)
import sys
import json
import signal
import time
import _thread
import websocket
# Parse command line arguments (symbol and depth)
if len(sys.argv) < 3:
sys.exit(1)
else:
api_symbol = sys.argv[1]
api_depth = int(sys.argv[2])
# Define order book variables
api_book = {'bid':{}, 'ask':{}}
# Define order book update functions
def dicttofloat(data):
return float(data[0])
def api_book_update(api_book_side, api_book_data):
for data in api_book_data:
price_level = data[0]
volume = data[1]
if float(volume) > 0.0:
api_book[api_book_side][price_level] = volume
else:
api_book[api_book_side].pop(price_level)
if api_book_side == 'bid':
api_book['bid'] = dict(sorted(api_book['bid'].items(), key=dicttofloat, reverse=True)[:api_depth])
elif api_book_side == 'ask':
api_book['ask'] = dict(sorted(api_book['ask'].items(), key=dicttofloat)[:api_depth])
# Define WebSocket callback functions
def ws_thread(*args):
ws = websocket.WebSocketApp('wss://ws.kraken.com/', on_open=ws_open, on_message=ws_message)
ws.run_forever()
def ws_open(ws):
ws.send('{"event":"subscribe", "subscription":{"name":"book", "depth":%(api_depth)d}, "pair":["%(api_symbol)s"]}' % {'api_depth':api_depth, 'api_symbol':api_symbol})
def ws_message(ws, ws_data):
api_data = json.loads(ws_data)
if 'event' in api_data:
return
else:
if 'as' in api_data[1]:
api_book_update('ask', api_data[1]['as'])
api_book_update('bid', api_data[1]['bs'])
else:
for data in api_data[1:len(api_data)-2]:
if 'a' in data:
api_book_update('ask', data['a'])
elif 'b' in data:
api_book_update('bid', data['b'])
# Start new thread for WebSocket interface
_thread.start_new_thread(ws_thread, ())
# Output order book (once per second) in main thread
try:
while True:
if len(api_book['bid']) < api_depth or len(api_book['ask']) < api_depth:
time.sleep(1)
else:
bid = sorted(api_book['bid'].items(), key=dicttofloat, reverse=True)
ask = sorted(api_book['ask'].items(), key=dicttofloat)
print('Bid\t\t\t\t\t\t\tAsk')
for count in range(api_depth):
print('%(bidprice)s (%(bidvolume)s)\t\t\t\t%(askprice)s (%(askvolume)s)' \
% {'bidprice':bid[count][0], 'bidvolume':bid[count][1], 'askprice':ask[count][0], 'askvolume':ask[count][1]})
time.sleep(1)
except KeyboardInterrupt:
sys.exit(0)