Cliente REST API para terminal/consola

El cliente API para línea de comandos Kraken Futures permite acceso completo a la API de Kraken Futures a través de la línea de comandos, por lo tanto no es necesario tener conocimientos de programación o experiencia previa con API.

Todos los endpoints API están accesibles, incluyendo:

  • métodos públicos para datos de mercado
  • métodos privados para gestión de cuentas
  • métodos de trading

El cliente de línea de comandos se puede utilizar como un cliente API de forma independiente, o se puede ser llamado desde otros programas (por ejemplo otros lenguajes interpretados como scripts Bash, o lenguajes compilados como C).

Instalación

1. Instale Python 2 (si es necesario).

  • MacOS y Linux probablemente ya tengan Python 2
  • Windows probablemente no lo tenga, pero puede ser instalado desde https://www.python.org/


2. Descargue el archivo krakenfuturesapi.py a su computadora en la carpeta (directorio) de su elección.

  • Por ejemplo: Macintosh HD > Usuarios > satoshi > KrakenFuturesAPI


3. Abra una ventana de comandos (como el terminal de MacOS), y navegue a la carpeta (directorio) elegido en el paso anterior.

Puede usar el comando ("cd"(Cambiar Directorio) para navegar. Por ejemplo:

cd /Users/satoshi/KrakenFuturesAPI


4. Configure el archivo krakenfuturesapi.py como ejecutable.

Puede usar el comando "chmod" (cambiar modo). Por ejemplo:

chmod 755 krakenfuturesapi.py


5. Opcional: Agregue sus claves API a la misma carpeta donde mantiene el archivo krakenfuturesapi.py.

Copie y pegue su clave pública desde la configuración de cuenta en el campo de nombre "API_Public".

Copie y pegue su clave privada desde la configuración de cuenta a un archivo de nombre "API_Private".

Consulte: ¿Cómo generar un par de claves API?

Un par de claves API sólo es necesario si planea utilizar los métodos privados API REST para acceder a su cuenta de Kraken Futures (para realizar consultas de balance, historial de cuenta, enviar/cancelar órdenes, etc.).

Uso

El cliente API REST de línea de comandos se utiliza escribiendo comandos como "./krakenfuturesapi.py api_method method_parameters" en el símbolo de sistema. Por ejemplo:

./krakenfuturesapi.py instruments

./krakenfuturesapi.py tickers

./krakenfuturesapi.py orderbook symbol=pi_xbtusd

./krakenfuturesapi.py accounts

./krakenfuturesapi.py openpositions

./krakenfuturesapi.py sendorder orderType=lmt symbol=pi_xbtusd side=buy size=500 limitPrice=4000

Los detalles completos de todos los métodos API REST para Kraken Futures , así como sus parámetros están disponibles en nuestra Documentación de API.

Código Python 2

El cliente API REST para línea de comandos se puede descargar en la sección anterior de Instalación.

Para referencia, el código Python 2 para el cliente API se encuentra a continuación:

#!/usr/bin/env python
         
        # Kraken Futures REST API
        #
        # Usage: ./krakenfuturesapi.py method parameters
        # Example: ./krakenfuturesapi.py instruments
        # Example: ./krakenfuturesapi.py orderbook symbol=pi_xbtusd
        # Example: ./krakenfuturesapi.py accounts
        # Example: ./krakenfuturesapi.py transfer fromAccount=cash toAccount=fi_xbtusd unit=xbt amount=0.5
        #
        # For private methods (anything accessing an account), API public key and API private key must be in separate text files called API_Public and API_Private respectively.
         
        import sys
        import time
        import base64
        import hashlib
        import hmac
        import urllib2
         
        api_public = {"instruments", "tickers", "orderbook", "history"}
        api_private_get = {"accounts", "openorders", "fills", "openpositions", "transfers", "notifications"}
        api_private_post = {"transfer", "sendorder", "cancelorder", "cancelallorders", "cancelallordersafter", "batchorder"}
         
        api_domain = "https://futures.kraken.com/derivatives"
        api_data = ""
         
        if len(sys.argv) < 2:
            api_method = "instruments"
        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_get or api_method in api_private_post:
            api_path = "/api/v3/"
            api_nonce = str(int(time.time()*1000))
            try:
                api_key = open("API_Public").read().strip()
                api_secret = base64.b64decode(open("API_Private").read().strip())
            except:
                print("API public key and API private key must be in text files called API_Public and API_Private")
                sys.exit(1)
            api_postdata = api_data
            api_sha256 = hashlib.sha256(api_postdata + api_nonce + api_path + api_method).digest()
            api_hmacsha512 = hmac.new(api_secret, api_sha256, hashlib.sha512)
            if api_method in api_private_get:
                api_request = urllib2.Request(api_domain + api_path + api_method + "?" + api_postdata)
            else:
                api_request = urllib2.Request(api_domain + api_path + api_method, api_postdata)
            api_request.add_header("APIKey", api_key)
            api_request.add_header("Nonce", api_nonce)
            api_request.add_header("Authent", base64.b64encode(api_hmacsha512.digest()))
        elif api_method in api_public:
            api_path = "/api/v3/"
            api_request = urllib2.Request(api_domain + api_path + api_method + "?" + api_data)
        else:
            print("Usage: {} method parameters".format(sys.argv[0]))
            print("Example: {} orderbook symbol=pi_xbtusd".format(sys.argv[0]))
            sys.exit(1)
         
        try:
            api_reply = urllib2.urlopen(api_request).read()
        except Exception as error:
            print("API request could not be completed because of an unexpected error (%s)" % error)
            sys.exit(1)
         
        if '"result":"success"' in api_reply:
            print(api_reply)
            sys.exit(0)
        else:
            print(api_reply)
            sys.exit(1)