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:
- Tìm hiểu kiến trúc API của Kraken
- Xác thực và thiết lập khóa API
- Giao dịch giao ngay với API REST
- Dữ liệu thời gian thực với WebSocket
- Giao dịch hợp đồng tương lai và các tính năng nâng cao
- Kết luận
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ở:
- Sản xuất (Production):
https://futures.kraken.com/api/v3 - Môi trường thử nghiệm (Sandbox):
https://demo-futures.kraken.com/api/v3
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:
- Công khai (Public):
wss://ws.kraken.com— Dữ liệu thị trường, sổ lệnh, giao dịch - Riêng tư (Private):
wss://ws-auth.kraken.com— Cập nhật tài khoản, trạng thái lệnh, thay đổi số dư
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 độ:
- Cơ bản (Starter): 60 yêu cầu mỗi phút (công khai), 30 yêu cầu mỗi phút (riêng tư)
- Trung cấp (Intermediate): 125 yêu cầu mỗi phút (công khai), 60 yêu cầu mỗi phút (riêng tư)
- Chuyên nghiệp (Pro): 250+ yêu cầu mỗi phút dựa trên khối lượng giao dịch trong 30 ngày
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.

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:
- Nhấp vào "Tạo khóa mới" (Generate New Key)
- Chọn quyền hạn:
- Truy vấn (Query): Đọc số dư tài khoản, lệnh mở, lịch sử giao dịch
- Giao dịch (Trade): Đặt và hủy lệnh
- Rút tiền (Withdraw): Chuyển tiền (sử dụng cẩn thận)
- Nạp tiền (Deposit): Xem địa chỉ và phương thức nạp tiề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.

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:
- 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ụ
- 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
- 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.

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:
market: Thực hiện ngay lập tức với giá tốt nhất hiện cólimit: Thực hiện tại mức giá chỉ định hoặc tốt hơnstop-loss: Kích hoạt lệnh thị trường khi giá vượt ngưỡngtake-profit: Ngược lại với lệnh stop-losstrailing-stop: Lệnh dừng động theo dõi biến động giá
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

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:
PI_XBTUSD: Hợp đồng nghịch đảo vĩnh cửu Bitcoin/USDPF_ETHUSD: Hợp đồng tuyến tính vĩnh cửu Ethereum/USDFI_XBTUSD_250228: Hợp đồng tương lai có kỳ hạn cố định hết hạn vào ngày 28 tháng 2 năm 2025
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
- Trailing Stops: Giá dừng điều chỉnh theo biến động thị trường
- Take Profit / Stop Loss: Lệnh bracket để quản lý rủi ro
- Post-Only: Đảm bảo lệnh thêm thanh khoản (phí maker)
- Reduce-Only: Ngăn chặn vị thế tăng lên
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.
