All
Suodata mukaan:
Miten talletan käteistä tililleni?
Tarvitsen apua tilin vahvistamisessa
Miksi en voi käyttää tiliäni?
Onko kryptovaluuttojen nostossa maksuja?
Tarvitsen apua kirjautuessani tililleni.
Yksityiskohtaiset ohjeet WebSocket API v1 order book feedin tulkitsemiseen löytyvät How to maintain a valid order book -tukisivultamme.
Alla on Python-esimerkkikoodi WebSocket API v1 order book feediin integroimiseksi ja tilauskirjan paikallisen kopion ylläpitämiseksi.
Koodi käyttää standardia Python WebSocket -kirjastoa ja toteuttaa asynkronisen (tapahtumapohjaisen/monisäikeisen) lähestymistavan, mikä mahdollistaa muiden tehtävien jatkamisen rinnakkain tilauskirjasyötteen tulkinnan kanssa.
Koodi tulee suorittaa komentokehotteen (kuten macOS:n Pääte) kautta seuraavasti:
krakenwsorderbookasync.py symbol depth, tai,
python3 krakenwsorderbookasync.py symbol depth
Esimerkiksi seuraava komento noutaa ja tulkitsee Dogecoin/USD (XDG/USD) -tilauskirjasyötteen 10 hintatason syvyydellä (per puoli):
krakenwsorderbookasync.py XDG/USD 10
Huomaa, että koodi suoritetaan loputtomiin, kunnes se keskeytetään näppäimistöltä (Ctrl+C useimmissa komentoriviympäristöissä).
Python-koodi on nähtävissä alla, ja se on myös ladattavissa tiedostona krakenwsorderbookasync.py.
#!/usr/bin/env python3
# Tuo WebSocket-asiakaskirjasto (ja muut)
import sys
import json
import signal
import time
import _thread
import websocket
# Jäsennä komentoriviargumentit (symboli ja syvyys)
if len(sys.argv) < 3:
sys.exit(1)
else:
api_symbol = sys.argv[1]
api_depth = int(sys.argv[2])
# Määritä tilauskirjamuuttujat
api_book = {'bid':{}, 'ask':{}}
# Määritä tilauskirjan päivitysfunktiot
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])
# Määritä WebSocket-takaisinkutsufunktiot
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'])
# Käynnistä uusi säie WebSocket-rajapinnalle
_thread.start_new_thread(ws_thread, ())
# Tulosta tilauskirja (kerran sekunnissa) pääsäikeessä
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)