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)