All
Filtern nach:
Wie zahle ich Cash auf mein Konto ein?
Ich brauche Hilfe bei der Kontoverifizierung
Warum kann ich nicht auf mein Konto zugreifen?
Gibt es Gebühren für das Auszahlen von Krypto?
Ich brauche Hilfe bei der Anmeldung bei meinem Konto
Der folgende Python-Code implementiert einen Befehlszeilen-API-Client für unsere Exchange WebSocket API v1. Der Code kann als eigenständiger API-Client verwendet oder von anderen interpretierten oder kompilierten Programmiersprachen (Bash, C++, etc.) aufgerufen werden.
Die Standard-Python-WebSocket-Bibliothek (websocket-client) ist für die WebSocket-Netzwerkkommunikation erforderlich, aber keine anderen API-Bibliotheken/Module sind notwendig.
Der WebSocket API Befehlszeilen-Client kann auch als krakenws.py heruntergeladen werden.
Alle öffentlichen Marktdaten-Feeds (Ticker, Orderbuch, Spread, OHLC, Trade), privaten Kontoverwaltungs-Feeds (openOrders und ownTrades) und Trading-Endpunkte (addOrder, cancelOrder, cancelAll) werden unterstützt.
Für die privaten Feeds/Endpunkte muss ein WebSocket-Authentifizierungstoken bereitgestellt werden, indem der Token vom REST API GetWebSocketsToken Endpunkt abgerufen und der Token-Wert dann in eine Textdatei namens WS_Token (im selben Verzeichnis/Ordner wie der Befehlszeilen-API-Client) kopiert/eingefügt wird.
krakenws.py feed/endpoint [Parameter]
./krakenws.py ticker XBT/USD ETH/EUR XDG/XBT
./krakenws.py book ETH/USD 10
./krakenws.py ohlc LTC/EUR XBT/USD 60
./krakenws.py openOrders
./krakenws.py ownTrades
./krakenws.py addOrder pair=XBT/USD type=buy ordertype=market volume=0.002 leverage=5
./krakenws.py cancelOrder txid=O6L3CW-FD5CZ-NE373X
Die Verwendung des WebSocket API v1 Befehlszeilen-Clients ist wie folgt:
#!/usr/bin/env python
# Kraken WebSocket API
#
# Verwendung: ./krakenws.py feed/endpoint [Parameter]
# Beispiel: ./krakenws.py ticker XBT/USD
# Beispiel: ./krakenws.py spread XBT/USD XBT/EUR ETH/USD LTC/EUR
# Beispiel: ./krakenws.py book XBT/USD XBT/EUR 10
# Beispiel: ./krakenws.py openOrders
# Beispiel: ./krakenws.py ownTrades
# Beispiel: ./krakenws.py addOrder pair=XBT/EUR type=sell ordertype=limit price=7500 volume=0.125
# Beispiel: ./krakenws.py cancelOrder txid=OADMSD-7AGC3-IMB46A,OD6VRE-HCSPM-CKORER
#
# Für die Kontoverwaltung und den Handel muss ein gültiger WebSocket-Authentifizierungstoken (vom REST API GetWebSocketsToken Endpunkt) in einer einfachen Textdatei namens WS_Token bereitgestellt werden.
import sys
import signal
from websocket import create_connection
def timeoutfunction(signalnumber, frame):
raise KeyboardInterrupt
signal.signal(signal.SIGALRM, timeoutfunction)
api_status = {"ping"}
api_public = {"trade", "book", "ticker", "spread", "ohlc"}
api_private = {"openOrders", "ownTrades", "balances"}
api_trading = {"addOrder", "editOrder", "cancelOrder", "cancelAll", "cancelAllOrdersAfter"}
api_domain_public = "wss://ws.kraken.com/"
api_domain_private = "wss://ws-auth.kraken.com/"
api_symbols = ""
api_number = 0
if len(sys.argv) < 2:
api_feed = "ping"
else:
api_feed = sys.argv[1]
if api_feed in api_status:
api_domain = api_domain_public
api_data = '{"event":"%(feed)s"}' % {"feed":api_feed}
signal.alarm(3)
elif api_feed in api_public:
if len(sys.argv) < 3:
print("Verwendung: %s feed/endpoint [Parameter]" % sys.argv[0])
print("Beispiel: %s ticker XBT/USD" % sys.argv[0])
sys.exit(1)
for count in range(2, len(sys.argv)):
if sys.argv[count].isdecimal() == True:
api_number = int(sys.argv[count])
else:
if len(api_symbols) == 0:
api_symbols += sys.argv[count].upper()
else:
api_symbols += '","' + sys.argv[count].upper()
if api_feed == 'book':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "depth":%(depth)d}, "pair":["%(symbols)s"]}' % {"feed":api_feed, "symbols":api_symbols, "depth":api_number if api_number != 0 else 10}
elif api_feed == 'ohlc':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "interval":%(interval)d}, "pair":["%(symbols)s"]}' % {"feed":api_feed, "symbols":api_symbols, "interval":api_number if api_number != 0 else 1}
else:
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s"}, "pair":["%(symbols)s"]}' % {"feed":api_feed, "symbols":api_symbols}
api_domain = api_domain_public
elif api_feed in api_private:
api_domain = api_domain_private
try:
api_token = open("WS_Token").read().strip()
except:
print("WebSocket-Authentifizierungstoken fehlt (WS_Token)")
sys.exit(1)
if len(sys.argv) >= 3:
if api_feed == 'openOrders':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "ratecounter":%(ratecounter)s, "token":"%(token)s"}}' % {"feed":api_feed, "ratecounter":sys.argv[2].split('=')[1], "token":api_token}
elif api_feed == 'ownTrades':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "snapshot":%(snapshot)s, "token":"%(token)s"}}' % {"feed":api_feed, "snapshot":sys.argv[2].split('=')[1], "token":api_token}
else:
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "token":"%(token)s"}}' % {"feed":api_feed, "token":api_token}
else:
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "token":"%(token)s"}}' % {"feed":api_feed, "token":api_token}
elif api_feed in api_trading:
api_domain = api_domain_private
try:
api_token = open("WS_Token").read().strip()
except:
print("WebSocket-Authentifizierungstoken fehlt (WS_Token)")
sys.exit(1)
api_data = '{"event":"%(feed)s", "token":"%(token)s"' % {"feed":api_feed, "token":api_token}
for count in range(2, len(sys.argv)):
if sys.argv[count].split('=')[0] == 'txid':
api_data = api_data + ', "%(name)s":["%(value)s"]' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1].replace(',', '","')}
elif sys.argv[count].split('=')[0] == 'reqid':
api_data = api_data + ', "%(name)s":%(value)s' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1]}
elif sys.argv[count].split('=')[0] == 'timeout':
api_data = api_data + ', "%(name)s":%(value)s' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1]}
else:
api_data = api_data + ', "%(name)s":"%(value)s"' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1]}
api_data = api_data + '}'
signal.alarm(3)
else:
print("Verwendung: %s feed/endpoint [Parameter]" % sys.argv[0])
print("Beispiel: %s ticker XBT/USD" % sys.argv[0])
sys.exit(1)
try:
ws = create_connection(api_domain)
print("WebSocket -> Client: %s" % ws.recv())
except Exception as error:
print("WebSocket-Verbindung fehlgeschlagen (%s)" % error)
sys.exit(1)
try:
print("Client -> WebSocket: %s" % api_data)
ws.send(api_data)
print("WebSocket -> Client: %s" % ws.recv())
except Exception as error:
print("WebSocket-Abonnement/Anfrage fehlgeschlagen (%s)" % error)
ws.close()
sys.exit(1)
while True:
try:
print("WebSocket -> Client: %s" % ws.recv())
except KeyboardInterrupt:
ws.close()
sys.exit(0)
except Exception as error:
print("WebSocket-Nachrichten fehlgeschlagen (%s)" % error)
sys.exit(1)
sys.exit(1)