Hướng Dẫn Toàn Diện Cách Sử Dụng Kraken API Để Giao Dịch

Ashley Goolam

Ashley Goolam

6 tháng 2 2026

Hướng Dẫn Toàn Diện Cách Sử Dụng Kraken API Để Giao Dịch

Hãy tưởng tượng bạn có quyền truy cập vào một trong những sàn giao dịch tiền điện tử có tính thanh khoản cao nhất thế giới thông qua một API đã được kiểm chứng, quản lý các hợp đồng tương lai và giao dịch giao ngay. Kraken cung cấp chính xác điều đó, với các giao diện WebSocket và REST cho một sàn giao dịch được thành lập vào năm 2011 và phục vụ hơn 10 triệu người dùng tại 190 quốc gia với thanh khoản rộng lớn trong hơn 200 cặp giao dịch.

Các API giao dịch tiền điện tử được chia thành hai loại: một loại được thiết kế cho sự tiện lợi của người dùng cá nhân và một loại được xây dựng cho độ tin cậy cấp tổ chức. Nhiều sàn giao dịch ưu tiên ứng dụng di động hơn là sự ổn định của API, dẫn đến giới hạn tốc độ làm chậm các chiến lược thuật toán và tài liệu không theo kịp các bản phát hành tính năng. Kraken loại bỏ những điểm khó khăn này bằng cách cung cấp quyền truy cập API theo cấp độ dựa trên khối lượng giao dịch, môi trường sandbox toàn diện và các điểm cuối chuyên dụng cho các nhà giao dịch tần suất cao. Bạn xây dựng các chiến lược tự động có thể mở rộng từ các script của người nghiệp dư đến các hệ thống cấp tổ chức.

Mục lục:

💡
Xây dựng hệ thống giao dịch tiền điện tử tự động đòi hỏi việc kiểm thử API đáng tin cậy trên các điểm cuối REST và WebSocket. Apidog cung cấp các tính năng kiểm thử API trực quan, tạo tài liệu tự động và cộng tác nhóm được thiết kế đặc biệt cho các sàn giao dịch tiền điện tử. Dùng thử Apidog miễn phí để hợp lý hóa quá trình phát triển API Kraken của bạn—không cần thẻ tín dụng.
nút

Tìm hiểu kiến trúc API của Kraken

Kraken vận hành ba hệ sinh thái API riêng biệt: Spot REST, Futures REST và WebSocket. Việc hiểu rõ các kiến trúc này sẽ giúp bạn chọn đúng lộ trình tích hợp.

API REST giao ngay (Spot REST API)

API REST giao ngay cung cấp quyền truy cập vào các chức năng cốt lõi của sàn giao dịch Kraken. Nó được tổ chức thành các điểm cuối công khai (dữ liệu thị trường, thông tin ticker, độ sâu sổ lệnh) và các điểm cuối riêng tư (số dư tài khoản, quản lý lệnh, cấp vốn). Tất cả các yêu cầu đều sử dụng HTTPS với TLS 1.2 trở lên.

URL cơ sở: https://api.kraken.com/0

Các điểm cuối công khai không yêu cầu xác thực. Các điểm cuối riêng tư sử dụng phương thức ký yêu cầu HMAC-SHA512 với khóa API. Các định dạng phản hồi khác nhau—một số điểm cuối trả về mảng trong đó phần tử đầu tiên là chuỗi lỗi (thiết kế cũ), trong khi các điểm cuối mới hơn sử dụng đối tượng JSON tiêu chuẩn.

API REST hợp đồng tương lai (Futures REST API)

Kraken Futures hoạt động riêng biệt với sàn giao dịch giao ngay, sở hữu cơ sở hạ tầng API riêng. Nó hỗ trợ các hợp đồng hoán đổi vĩnh cửu và hợp đồng tương lai có kỳ hạn cố định trên tiền điện tử với đòn bẩy lên tới 50 lần.

Các URL cơ sở:

API Futures sử dụng các cơ chế xác thực và cấu trúc điểm cuối khác so với Spot. Bạn cần có các khóa API riêng biệt được tạo tại futures.kraken.com, khác với thông tin đăng nhập giao dịch giao ngay của bạn.

API WebSocket

Kraken cung cấp luồng dữ liệu thời gian thực thông qua hai máy chủ WebSocket:

Không giống như phương pháp thăm dò (polling) của REST, các kết nối WebSocket đẩy dữ liệu ngay khi có sẵn, giảm độ trễ từ hàng trăm mili giây xuống hàng chục mili giây. Máy chủ công khai không yêu cầu xác thực; máy chủ riêng tư yêu cầu một mã thông báo WebSocket được lấy qua API REST.

Giới hạn Tốc độ (Rate Limiting)

Kraken áp dụng giới hạn tốc độ theo cấp độ:

Vượt quá giới hạn sẽ dẫn đến lỗi HTTP 429 với các tiêu đề Retry-After cho biết khi nào bạn có thể tiếp tục gửi yêu cầu.

API giao dịch tiền điện tử Kraken

Xác thực và Thiết lập khóa API

Kraken sử dụng xác thực HMAC-SHA512 với cơ chế bảo vệ chống tấn công phát lại dựa trên nonce. Điều này đòi hỏi triển khai cẩn thận để tránh các lỗi "Invalid nonce" thường gặp trong các ứng dụng đa luồng.

Tạo khóa API

Điều hướng đến Tài khoản → Bảo mật → API trong bảng điều khiển Kraken của bạn:

  1. Nhấp vào "Tạo khóa mới" (Generate New Key)
  2. Chọn quyền hạn:

3.  Chỉ định danh sách trắng IP (được khuyến nghị cho môi trường sản xuất)

4.  Lưu trữ Khóa API và Khóa Riêng tư một cách an toàn—Kraken sẽ không bao giờ hiển thị Khóa Riêng tư nữa

Đối với giao dịch hợp đồng tương lai, hãy lặp lại quy trình này tại futures.kraken.com/settings/api. Môi trường sandbox tại demo-futures.kraken.com sử dụng thông tin đăng nhập riêng.

tạo khóa API

Ký HMAC-SHA512 (Triển khai thủ công)

Nếu không sử dụng SDK, hãy triển khai xác thực như sau:

import requests
import hmac
import hashlib
import base64
import time
import json

class KrakenAuth:
    def __init__(self, api_key, api_secret):
        self.api_key = api_key
        self.api_secret = base64.b64decode(api_secret)
        self.base_url = "https://api.kraken.com"
    
    def generate_signature(self, urlpath, data):
        # Nonce must be higher than any previous nonce used
        nonce = str(int(time.time() * 1000))
        data['nonce'] = nonce
        
        # Create message: nonce + POST data
        message = nonce + json.dumps(data, separators=(',', ':'))
        
        # Create HMAC-SHA512 signature
        signature = hmac.new(
            self.api_secret,
            urlpath.encode() + hashlib.sha256(message.encode()).digest(),
            hashlib.sha512
        ).hexdigest()
        
        return {
            'API-Key': self.api_key,
            'API-Sign': signature,
            'Content-Type': 'application/x-www-form-urlencoded'
        }, data
    
    def private_request(self, method, params=None):
        urlpath = f'/0/private/{method}'
        data = params or {}
        
        headers, signed_data = self.generate_signature(urlpath, data)
        
        response = requests.post(
            f"{self.base_url}{urlpath}",
            headers=headers,
            data=signed_data
        )
        
        return response.json()

# Usage
kraken = KrakenAuth(
    api_key="YOUR_API_KEY",
    api_secret="YOUR_BASE64_ENCODED_PRIVATE_KEY"
)

# Get account balance
balance = kraken.private_request('Balance')
print(balance)

Quan trọng: Quản lý Nonce

Kraken yêu cầu các nonce phải tăng dần nghiêm ngặt cho mỗi khóa API. Nếu bạn có nhiều luồng hoặc tiến trình sử dụng cùng một khóa, chúng sẽ xung đột và tạo ra lỗi "EAPI:Invalid nonce". Các giải pháp:

  1. Sử dụng các khóa API khác nhau cho mỗi thuật toán giao dịch hoặc dịch vụ
  2. Thực hiện đồng bộ hóa nonce thông qua Redis hoặc cơ sở dữ liệu nếu việc chia sẻ khóa là không thể tránh khỏi
  3. Sử dụng dấu thời gian có độ chính xác micro giây (nhân thời gian Unix với 1000) để giảm xác suất xung đột

SDK chính thức

Kraken cung cấp các SDK chính thức cho Python và Node.js, cùng với các SDK từ cộng đồng cho Go, Rust, Julia và các ngôn ngữ khác:

# Python
pip install python-kraken-sdk

# Node.js
npm install @kraken-api/sdk

Các SDK chính thức xử lý xác thực, quản lý nonce và phân tích lỗi tự động. Hãy sử dụng chúng trừ khi bạn có các yêu cầu cụ thể về xử lý HTTP tùy chỉnh.

SDK Python của Kraken

Giao dịch giao ngay với API REST

API REST giao ngay cung cấp chức năng giao dịch toàn diện thông qua các điểm cuối được tài liệu hóa rõ ràng.

Dữ liệu thị trường (Công khai)

Truy xuất các cặp giao dịch có sẵn:

curl "https://api.kraken.com/0/public/AssetPairs"

Lấy thông tin ticker:

curl "https://api.kraken.com/0/public/Ticker?pair=XBTUSD"

Kraken sử dụng các ký hiệu cặp không tiêu chuẩn—XBT thay vì BTC cho Bitcoin, XXBT trong một số điểm cuối cũ, ZUSD thay vì USD. Luôn xác minh mã tài sản bằng điểm cuối AssetPairs trước khi giao dịch.

Lấy độ sâu sổ lệnh:

curl "https://api.kraken.com/0/public/Depth?pair=XBTUSD&count=10"

Số dư tài khoản (Riêng tư)

balance = kraken.private_request('Balance')
print(balance)

Định dạng phản hồi sử dụng mã tài sản làm khóa (ZUSD cho USD, XXBT cho Bitcoin):

{
  "error": [],
  "result": {
    "ZUSD": "1000.50",
    "XXBT": "0.2500"
  }
}

Đặt lệnh

Đặt lệnh mua giới hạn:

order = kraken.private_request('AddOrder', {
    'pair': 'XBTUSD',
    'type': 'buy',
    'ordertype': 'limit',
    'price': '65000.00',
    'volume': '0.01',
    'oflags': 'post'  # Post-only flag
})

print(order)

Các loại lệnh bao gồm:

Quản lý lệnh

Liệt kê các lệnh đang mở:

open_orders = kraken.private_request('OpenOrders')
print(open_orders)

Hủy một lệnh:

kraken.private_request('CancelOrder', {
    'txid': 'XXXXXX-XXXXXX-XXXXXX'
})

Hủy tất cả các lệnh (dừng khẩn cấp):

kraken.private_request('CancelAll')

Lịch sử giao dịch

Truy vấn các giao dịch đã thực hiện:

trades = kraken.private_request('TradesHistory', {
    'start': '1704067200',  # Unix timestamp
    'end': '1706659200'
})
Mẹo chuyên nghiệpApidog
Kiểm tra các điểm cuối API bằng Apidog
Kiểm tra các điểm cuối API bằng Apidog

Dữ liệu thời gian thực với WebSocket

Việc thăm dò (polling) REST gây ra độ trễ không chấp nhận được cho giao dịch thuật toán. API WebSocket của Kraken truyền trực tuyến các cập nhật sổ lệnh, giao dịch và sự kiện tài khoản theo thời gian thực.

Kết nối tới WebSocket công khai

const WebSocket = require('ws');

const ws = new WebSocket('wss://ws.kraken.com');

ws.on('open', () => {
  console.log('Connected to Kraken public WebSocket');
  
  // Đăng ký nhận thông tin ticker cho BTC/USD
  ws.send(JSON.stringify({
    event: 'subscribe',
    pair: ['XBT/USD'],
    subscription: {
      name: 'ticker'
    }
  }));
});

ws.on('message', (data) => {
  const message = JSON.parse(data);
  
  // Định dạng ticker: [channelID, tickerData, pair, channelName]
  if (Array.isArray(message) && message[2] === 'XBT/USD') {
    const [channelID, ticker, pair, channelName] = message;
    console.log(`BTC Price: Bid ${ticker.b[0]}, Ask ${ticker.a[0]}`);
  }
});

// Gửi tín hiệu giữ kết nối mỗi 30 giây
setInterval(() => {
  ws.send(JSON.stringify({ event: 'ping' }));
}, 30000);

Các đăng ký WebSocket trả về dữ liệu ở định dạng mảng với ID kênh số. Ánh xạ các ID này tới các đăng ký của bạn để định tuyến dữ liệu chính xác.

Truyền trực tuyến sổ lệnh

Đăng ký dữ liệu sổ lệnh Cấp độ 2:

ws.send(JSON.stringify({
  event: 'subscribe',
  pair: ['XBT/USD'],
  subscription: {
    name: 'book',
    depth: 25  // 25, 100, 500, or 1000 levels
  }
}));

Nguồn cấp dữ liệu sổ lệnh gửi các ảnh chụp nhanh (snapshots) sau đó là các cập nhật tăng dần. Duy trì trạng thái sổ lệnh cục bộ bằng cách áp dụng các thay đổi:

let orderBook = { asks: {}, bids: {} };

ws.on('message', (data) => {
  const message = JSON.parse(data);
  
  if (message[1] === 'as' || message[1] === 'bs') {
    // Ảnh chụp nhanh: khởi tạo sổ lệnh
    const [channelID, type, asks, bids] = message;
    orderBook.asks = Object.fromEntries(asks.map(([price, volume]) => [price, volume]));
    orderBook.bids = Object.fromEntries(bids.map(([price, volume]) => [price, volume]));
  } else if (message[1] === 'a' || message[1] === 'b') {
    // Cập nhật: áp dụng thay đổi
    const [channelID, type, delta] = message;
    const side = type === 'a' ? 'asks' : 'bids';
    
    delta.forEach(([price, volume]) => {
      if (volume === '0.00000000') {
        delete orderBook[side][price];
      } else {
        orderBook[side][price] = volume;
      }
    });
  }
});

Xác thực WebSocket riêng tư

Lấy mã thông báo WebSocket qua REST:

token_response = kraken.private_request('GetWebSocketsToken')
token = token_response['result']['token']

Kết nối tới WebSocket riêng tư:

const privateWs = new WebSocket('wss://ws-auth.kraken.com');

privateWs.on('open', () => {
  // Xác thực
  privateWs.send(JSON.stringify({
    event: 'subscribe',
    subscription: {
      name: 'ownTrades',
      token: 'YOUR_WEBSOCKET_TOKEN'
    }
  }));
});

privateWs.on('message', (data) => {
  const message = JSON.parse(data);
  
  if (message[1] === 'ownTrades') {
    console.log('Giao dịch của bạn đã được thực hiện:', message[0]);
  }
});

Các mã thông báo WebSocket riêng tư hết hạn sau 15 phút. Hãy triển khai logic làm mới mã thông báo và kết nối lại tự động cho các hệ thống sản xuất.

Giao dịch hợp đồng tương lai và các tính năng nâng cao

Kraken Futures cung cấp cơ sở hạ tầng riêng cho giao dịch phái sinh với các loại lệnh nâng cao và ký quỹ danh mục đầu tư.

Xác thực hợp đồng tương lai

Hợp đồng tương lai sử dụng xác thực bằng mã thông báo Bearer khác với HMAC giao ngay:

import requests
import hmac
import hashlib
import base64
import json

class KrakenFuturesAuth:
    def __init__(self, api_key, api_secret):
        self.api_key = api_key
        self.api_secret = api_secret
        self.base_url = "https://futures.kraken.com/api/v3"
    
    def generate_signature(self, endpoint, method, body=None):
        nonce = str(int(time.time() * 1000))
        message = endpoint + method + nonce
        
        if body:
            message += json.dumps(body, separators=(',', ':'))
        
        signature = base64.b64encode(
            hmac.new(
                base64.b64decode(self.api_secret),
                message.encode(),
                hashlib.sha256
            ).digest()
        ).decode()
        
        return {
            'APIKey': self.api_key,
            'Nonce': nonce,
            'Authent': signature,
            'Content-Type': 'application/json'
        }
    
    def request(self, endpoint, method='GET', body=None):
        url = f"{self.base_url}{endpoint}"
        headers = self.generate_signature(endpoint, method, body)
        
        if method == 'GET':
            response = requests.get(url, headers=headers)
        else:
            response = requests.post(url, headers=headers, json=body)
        
        return response.json()

# Usage
futures = KrakenFuturesAuth('FUTURES_API_KEY', 'FUTURES_SECRET')

Đặt lệnh hợp đồng tương lai

Đặt lệnh giới hạn trên hợp đồng Bitcoin vĩnh cửu:

order = futures.request('/sendorder', 'POST', {
    'orderType': 'lmt',
    'side': 'buy',
    'size': 1,
    'limitPrice': 65000,
    'symbol': 'PI_XBTUSD'  # Perpetual Inverse BTC/USD
})

Các ký hiệu hợp đồng tương lai sử dụng các quy ước khác nhau:

Thao tác hàng loạt

API Futures hỗ trợ gửi lệnh hàng loạt:

batch = futures.request('/batchorder', 'POST', {
    'batchOrder': [
        {
            'order': 'send',
            'order_tag': '1',
            'orderType': 'lmt',
            'symbol': 'PI_XBTUSD',
            'side': 'buy',
            'size': 1,
            'limitPrice': 64000
        },
        {
            'order': 'send',
            'order_tag': '2',
            'orderType': 'lmt',
            'symbol': 'PI_XBTUSD',
            'side': 'sell',
            'size': 1,
            'limitPrice': 66000
        }
    ]
})

Tính năng lệnh nâng cao

Công tắc tử thần (Dead Man's Switch)

Hủy tất cả các lệnh nếu kết nối bị mất:

# Đặt thời gian chờ 60 giây
kraken.private_request('CancelAllOrdersAfter', {
    'timeout': 60
})

Điều này tạo ra một bộ đếm thời gian phía máy chủ—nếu bạn không gửi tín hiệu giữ kết nối trong vòng 60 giây, Kraken sẽ tự động hủy tất cả các lệnh đang mở.

Kết luận

API của Kraken cung cấp quyền truy cập cấp độ tổ chức vào thị trường tiền điện tử thông qua các giao diện REST, WebSocket và Futures chuyên dụng. Bạn xác thực bằng chữ ký HMAC-SHA512, quản lý cẩn thận các chuỗi nonce và mở rộng quy mô từ giao dịch giao ngay sang hợp đồng tương lai có đòn bẩy. Các giới hạn tốc độ theo cấp độ đáp ứng các chiến lược từ tái cân bằng danh mục đầu tư thông thường đến tạo lập thị trường tần suất cao.

Hãy bắt đầu với môi trường sandbox để kiểm tra xác thực và đặt lệnh. Sử dụng các khóa API riêng biệt cho mỗi chiến lược giao dịch để tránh xung đột nonce. Triển khai các kết nối WebSocket cho dữ liệu thời gian thực và công tắc tử thần (dead man's switch) để quản lý rủi ro. Giám sát các tiêu đề giới hạn tốc độ và triển khai cơ chế chờ lũy thừa (exponential backoff) cho các lỗi 429.

Khi xây dựng các ứng dụng giao dịch tiền điện tử—dù là kiểm tra các điểm cuối của Kraken, gỡ lỗi chữ ký xác thực hay quản lý nhiều tích hợp API—hãy hợp lý hóa quy trình làm việc phát triển của bạn với Apidog. Nó xử lý việc kiểm thử API trực quan, tạo tài liệu tự động và cộng tác nhóm để bạn có thể tập trung vào logic giao dịch thay vì vật lộn với chữ ký HMAC.

nút

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API