All
Filtrar por:
¿Cómo deposito efectivo en mi cuenta?
Necesito ayuda con la verificación de la cuenta
¿Por qué no puedo acceder a mi cuenta?
¿Existen comisiones por retirar criptomonedas?
Necesito ayuda para iniciar sesión en mi cuenta
Uno de los usos previstos de nuestra API REST es crear bots de trading automatizados que interactúen con nuestros mercados y cuentas.
Aunque los bots de trading tienen una variedad casi infinita, todos comparten características similares de integración de API y realizan las siguientes tareas comunes:
recuperación de datos de mercado (ticker, libro de órdenes, etc.)
toma de decisiones de trading (basadas en los datos de mercado o en indicadores derivados de los datos de mercado)
realización/cancelación de órdenes
Nuestra API REST proporciona toda la funcionalidad necesaria para implementar un bot de trading con todas las funciones, pero saber cómo combinar los diferentes aspectos de nuestra API puede ser difícil, por lo que el siguiente código de bot de trading se proporciona como ejemplo.
El código de ejemplo implementa un bot de trading basado en indicadores (específicamente una SMA de 20, con decisiones de trading basadas en un cambio de pendiente de 1 minuto), y muestra cómo integrar con éxito los datos de mercado, la toma de decisiones y los aspectos de trading de un bot de trading.
El código del bot de trading es un único archivo Python y se integra directamente con nuestra API (sin bibliotecas de API de terceros). Toda la configuración (clave API, par de divisas, indicador, tipo de orden, apalancamiento, etc.) está contenida en el código para facilitar la consulta.
El código de ejemplo se puede ver a continuación y también se puede descargar como un archivo .py (REST_Indicator_Bot_Example.py).
Python
#!/usr/bin/env python3
# Import required libraries (Python not API)
import time
import sys
import json
import base64
import hashlib
import hmac
import urllib.request
# Configure API key (copy/paste from account management)
api_key_public = 'COPY/PASTE API PUBLIC KEY HERE'
api_key_private = 'COPY/PASTE API PRIVATE KEY HERE'
# Configure market/orders/trades
trade_symbol = 'XXBTZUSD'
trade_interval = 1 # OHLC interval in minutes
trade_size = 0.0001 # Trade volume in base currency
trade_leverage = 2
# Initial indicator/trade variables
trade_direction = 0
sma_values = [0.0, 0.0, 0.0]
# Infinite loop (can be exited via keyboard interrupt)
try:
while True:
# Retrieve OHLC data at specified interval
print('Retrieving OHLC data ... ', end='')
try:
api_request = urllib.request.Request(
'https://api.kraken.com/0/public/OHLC?pair=%(symbol)s&interval=%(interval)d' % {
'symbol': trade_symbol, 'interval': trade_interval}
)
api_request.add_header('User-Agent', 'Kraken trading bot example')
api_response = urllib.request.urlopen(api_request).read().decode()
api_data = json.loads(api_response)
except Exception as error:
print('Failed (%s)' % error)
else:
print('Done' if len(api_data['error']) == 0 else 'Error (%s)' % api_data['error'])
# Calculate SMA (20 candles / closing price)
print('Calculating SMA 20 ... ', end='')
api_ohlc = api_data['result'][trade_symbol]
api_ohlc_length = len(api_ohlc) - 1
sma_temp = 0.0
for count in range(1, 21):
sma_temp += float(api_ohlc[api_ohlc_length - count][4])
sma_temp = sma_temp / 20
print('Done')
# Update SMA values
sma_values[2] = sma_values[1]
sma_values[1] = sma_values[0]
sma_values[0] = sma_temp
if sma_values[2] == 0.0:
print('Waiting %d seconds ... ' % (trade_interval * 60))
time.sleep(trade_interval * 60)
continue
else:
print('SMA 20 values ... %(sma2)f / %(sma1)f / %(sma0)f' % {
'sma2': sma_values[2], 'sma1': sma_values[1], 'sma0': sma_values[0]})
# Trading decision (change in slope of SMA)
print('Trading decision ... ', end='')
if (sma_values[0] > sma_values[1]) and (sma_values[1] < sma_values[2]):
make_trade = 1
print('Long')
elif (sma_values[0] < sma_values[1]) and (sma_values[1] > sma_values[2]):
make_trade = -1
print('Short')
else:
make_trade = 0
print('No trade')
# Place order/trade (if applicable)
if make_trade != 0:
print('Placing order/trade ... ', end='')
try:
api_path = '/0/private/AddOrder'
api_nonce = str(int(time.time() * 1000))
api_post = 'nonce=%(api_nonce)s&pair=%(symbol)s&type=%(direction)s&ordertype=market&volume=%(volume)f&leverage=%(leverage)s' % {
'api_nonce': api_nonce,
'symbol': trade_symbol,
'direction': 'buy' if make_trade == 1 else 'sell',
'volume': trade_size if trade_direction == 0 else trade_size * 2,
'leverage': str(trade_leverage) if trade_leverage > 0 else 'none'
}
api_sha256 = hashlib.sha256(api_nonce.encode('utf8') + api_post.encode('utf8'))
api_hmac = hmac.new(
base64.b64decode(api_key_private),
api_path.encode('utf8') + api_sha256.digest(),
hashlib.sha512
)
api_signature = base64.b64encode(api_hmac.digest())
api_request = urllib.request.Request(
'https://api.kraken.com/0/private/AddOrder', api_post.encode('utf8')
)
api_request.add_header('API-Key', api_key_public)
api_request.add_header('API-Sign', api_signature)
api_request.add_header('User-Agent', 'Kraken trading bot example')
api_response = urllib.request.urlopen(api_request).read().decode()
api_data = json.loads(api_response)
except Exception as error:
print('Failed (%s)' % error)
else:
trade_direction = make_trade
print('Done (%s)' % api_response if len(api_data['error']) == 0 else 'Error (%s)' % api_data['error'])
# Wait until next OHLC interval
print('Waiting %d seconds ... ' % (trade_interval * 60))
time.sleep(trade_interval * 60)
except KeyboardInterrupt:
sys.exit(0)
except Exception as error:
print('Error (%s)' % error)
sys.exit(1)Tenga en cuenta que el bot de trading está destinado únicamente como ejemplo y, por lo tanto, carece de algunas características deseables y de la comprobación de errores necesaria, por lo que no debe utilizarse para el trading de producción (no hay garantía de que el bot obtenga beneficios).