Instrucciones de instalación (#install)
Comandos ejemplo (#usage)
Código Python (#python)
El cliente de línea de comandos REST API de Kraken permite acceso completo al REST API de Kraken a través de la línea de comandos (como Terminal en macOS), por lo que no se requieren conocimientos de programación o experiencia con API.
Todas las características de REST API (https://www.kraken.com/features/api) son accesibles, incluyendo:
endpoints de datos del mercado públicos
endpoints de gestión de cuenta privados
endpoints de trading
endpoints de depósitos y retiros privados
endpoints de staking privados
El cliente de línea de comandos puede ser utilizado como un cliente API independiente, o se puede llamar desde otros programas (otros lenguajes interpretados como scripts Bash o lenguajes compilados como C/C++).
Instalación
1. Instale Python 3 (si es necesario).
macOS y Linux probablemente ya tengan Python 3 instalado.
Windows probablemente no tenga Python 3 instalado, pero puede hacerse desde https://www.python.org/ (https://www.python.org/).
2. Descargue y guarde el archivo krakenapi.py (https://support.kraken.com/hc/article_attachments/4401801782932/krakenapi.py) en su ordenador en la carpeta (directorio) de su elección. Por ejemplo:
Macintosh HD > Users > Satoshi > KrakenAPI
3. Abra un símbolo del sistema (como el Terminal de MacOS), y navegue a la carpeta (directorio) elegida en el paso anterior.
Puede utilizar el comando "cd" (cambiar directorio) para navegar. Por ejemplo:
cd /Users/Satoshi/KrakenAPI
4. Convierta el archivo krakenapi.py a ejecutable.
Puede utilizar el comando "chmod 755" (cambiar modo). Por ejemplo:
chmod 755 krakenapi.py
5. Añada sus claves API a la misma carpeta donde se encuentra el archivo krakenapi.py.
Copie/pegue su clave pública de API desde gestión de cuenta dentro de un archivo de texto sin formato llamado "API_Public_Key".
Copie/pegue su clave privada API (secreta) dentro de un archivo de texto sin formato llamado "API_Private_Key".
Consulte: ¿Cómo generar un par de claves API? (https://support.kraken.com/hc/articles/360000919966-How-to-generate-an-API-key-pair-)
Una clave de API solamente es necesaria si planea utilizar los endpoints de API privados para acceder a su cuenta de Kraken (como consultas de balance, generar/cancelar órdenes, exportar historial de cuenta, etc).
Comandos Ejemplo
El uso del cliente de línea de comandos REST API se muestra a continuación:
./krakenapi.py endpoint [parameters]
El cliente de línea de comandos soporta todos los endpoints de REST API. Los siguientes son solo algunos ejemplos de comandos:
./krakenapi.py Time./krakenapi.py Ticker pair=xbtusd./krakenapi.py Trades pair=etheur since=1574067140000000000./krakenapi.py Balance./krakenapi.py TradeBalance asset=xbt./krakenapi.py QueryOrders txid=O7MN22-ZCX7J-TGLQHD./krakenapi.py AddOrder pair=xbtusd type=buy ordertype=limit price=6500 volume=0.002 leverage=5./krakenapi.py CancelOrder txid=O7MN22-ZCX7J-TGLQHD
Código Python
#!/usr/bin/env python# Kraken Rest API## Usage: ./krakenapi.py endpoint [parameters]# Example: ./krakenapi.py Time# Example: ./krakenapi.py OHLC pair=xbtusd interval=1440# Example: ./krakenapi.py Balance# Example: ./krakenapi.py TradeBalance asset=xdg# Example: ./krakenapi.py OpenPositions# Example: ./krakenapi.py AddOrder pair=xxbtzusd type=buy ordertype=market volume=0.003 leverage=5import sysimport platformimport timeimport base64import hashlibimport hmacif int(platform.python_version_tuple()[0]) > 2:import urllib.request as urllib2else:import urllib2api_public = {"Time", "Assets", "AssetPairs", "Ticker", "OHLC", "Depth", "Trades", "Spread", "SystemStatus"}api_private = {"Balance", "BalanceEx", "TradeBalance", "OpenOrders", "ClosedOrders", "QueryOrders", "TradesHistory", "QueryTrades", "OpenPositions", "Ledgers", "QueryLedgers", "TradeVolume", "AddExport", "ExportStatus", "RetrieveExport", "RemoveExport", "GetWebSocketsToken"}api_trading = {"AddOrder", "CancelOrder", "CancelAll", "CancelAllOrdersAfter"}api_funding = {"DepositMethods", "DepositAddresses", "DepositStatus", "WithdrawInfo", "Withdraw", "WithdrawStatus", "WithdrawCancel", "WalletTransfer"}api_staking = {"Staking/Assets", "Stake", "Unstake", "Staking/Pending", "Staking/Transactions"}api_domain = "https://api.kraken.com"api_data = ""if len(sys.argv) < 2:api_method = "Time"elif len(sys.argv) == 2:api_method = sys.argv[1]else:api_method = sys.argv[1]for count in range(2, len(sys.argv)):if count == 2:api_data = sys.argv[count]else:api_data = api_data + "&" + sys.argv[count]if api_method in api_private or api_method in api_trading or api_method in api_funding or api_method in api_staking:api_path = "/0/private/"api_nonce = str(int(time.time()*1000))try:api_key = open("API_Public_Key").read().strip()api_secret = base64.b64decode(open("API_Private_Key").read().strip())except:print("API public key and API private (secret) key must be in plain text files called API_Public_Key and API_Private_Key")sys.exit(1)api_postdata = api_data + "&nonce=" + api_nonceapi_postdata = api_postdata.encode('utf-8')api_sha256 = hashlib.sha256(api_nonce.encode('utf-8') + api_postdata).digest()api_hmacsha512 = hmac.new(api_secret, api_path.encode('utf-8') + api_method.encode('utf-8') + api_sha256, hashlib.sha512)api_request = urllib2.Request(api_domain + api_path + api_method, api_postdata)api_request.add_header("API-Key", api_key)api_request.add_header("API-Sign", base64.b64encode(api_hmacsha512.digest()))api_request.add_header("User-Agent", "Kraken REST API")elif api_method in api_public:api_path = "/0/public/"api_request = urllib2.Request(api_domain + api_path + api_method + '?' + api_data)api_request.add_header("User-Agent", "Kraken REST API")else:print("Usage: %s method [parameters]" % sys.argv[0])print("Example: %s OHLC pair=xbtusd interval=1440" % sys.argv[0])sys.exit(1)try:api_reply = urllib2.urlopen(api_request).read()except Exception as error:print("API call failed (%s)" % error)sys.exit(1)try:api_reply = api_reply.decode()except Exception as error:if api_method == 'RetrieveExport':sys.stdout.buffer.write(api_reply)sys.exit(0)print("API response invalid (%s)" % error)sys.exit(1)if '"error":[]' in api_reply:print(api_reply)sys.exit(0)else:print(api_reply)sys.exit(1)