All
필터링 기준:
현금을 내 계정으로 입금하려면 어떻게 하나요?
계정 인증에 대한 도움이 필요합니다
왜 내 계정에 접근할 수 없나요?
암호화폐 출금 수수료가 있나요?
계정에 로그인하는 데 도움이 필요합니다
당사의 REST API의 의도된 용도 중 하나는 당사의 시장 및 계정과 상호작용하는 자동화된 트레이딩 봇을 생성하는 것입니다.
트레이딩 봇은 거의 무한한 종류가 있지만, 모두 유사한 API 통합 특성을 공유하며 다음 공통 작업을 모두 수행합니다.
시장 데이터 검색 (티커, 오더북 등)
트레이딩 결정 (시장 데이터 또는 시장 데이터에서 파생된 지표 기반)
주문 체결/취소
당사의 REST API는 모든 기능을 갖춘 트레이딩 봇을 구현하는 데 필요한 모든 기능을 제공하지만, API의 다양한 측면을 결합하는 방법을 아는 것은 어려울 수 있습니다. 따라서 다음 트레이딩 봇 코드가 예시로 제공됩니다.
예시 코드는 지표 기반 트레이딩 봇(특히 1분 기울기 변화에 기반한 트레이딩 결정을 내리는 20 SMA)을 구현하며, 트레이딩 봇의 시장 데이터, 의사 결정 및 트레이딩 측면을 성공적으로 통합하는 방법을 보여줍니다.
트레이딩 봇 코드는 단일 Python 파일이며, 당사 API와 직접 통합됩니다 (타사 API 라이브러리 없음). 모든 구성 (API key, currency pair, indicator, order type, leverage 등)은 참조 편의를 위해 코드 내에 포함되어 있습니다.
예시 코드는 아래에서 볼 수 있으며, .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)이 트레이딩 봇은 예시용으로만 제공되며, 따라서 일부 바람직한 기능과 필수 오류 검사가 부족합니다. 그러므로 실제 트레이딩에 사용해서는 안 됩니다 (봇이 수익을 낼 것이라는 보장은 없습니다).