Kraken REST api和WebSockets的Node.js和JavaScript SDK
Kraken REST api和WebSockets的完整和健壮的JavaScript和Node.js SDK:
- 专业,强大和高性能的Kraken SDK与广泛的生产使用在实时交易环境。
- 完全集成所有Kraken REST api和WebSockets。
- 用于现货、衍生品(期货)、机构和合作伙伴操作的专用REST客户端
- 所有市场的统一WebSocket客户端
- 完整的TypeScript支持(大多数API请求和响应都有类型声明)。
- 强类型请求和响应。
- 确保可靠性的自动化端到端测试。
- 积极维护一个现代的,承诺驱动的界面。
- 强大的WebSocket集成可配置的连接心跳和自动重新连接,然后重新订阅工作流。
- 事件驱动的消息传递。
- 具有自动重连接处理的智能WebSocket持久性。
- 发出
reconnected事件,当断开的连接恢复时。 - 支持公共和私有WebSocket流。
- 浏览器友好的HMAC签名机制。
- 自动支持ESM和CJS项目。
- 使用真正的API调用进行大量的自动化端到端测试。
- 通过axios集成支持代理。
- 活跃的社区支持和协作电报: Node.js算法交易员.
- 快速入门指南: Kraken JavaScript快速入门指南
- Kraken JavaScript教程: Kraken JavaScript REST API和WebSocket教程
目录表
安装
安装作用域包 @siebly/kraken-api:
npm install --save @siebly/kraken-api
没有作用域的npm包 kraken-api 是一个不同的包装。不是这个SDK。
示例
参考 例子 用于实现演示的文件夹,包括:
- 现货交易例子:市场数据、账户管理、下单
- 衍生品交易例子:期货市场数据,账户管理,下单
- WebSocket例子:公开市场数据流、私人账户数据
问题与讨论
- 问题?检查 问题选项卡.
- 与其他节点开发者讨论和合作?加入我们的 Node.js算法交易员 工程社区的电报。
- 关注我们的公告频道实时更新 X /推特
相关项目
查看我们的JavaScript/TypeScript/Node.js sdk和项目:
- 访问我们的网站: https://Siebly.io
- 试试我们在npmjs上发布的REST API和WebSocket sdk吧:
- 试试我的杂项实用程序:
- 看看我的例子:
文档
大多数方法接受JS对象。可以使用Kraken的API文档指定的参数填充这些参数,或者检查此存储库中每个类的类型定义。
API文档链接
结构
本项目使用打字稿。资源存储在两个关键结构中:
使用
在Kraken的网站上创建API凭据:
REST API
SDK为不同的交易产品提供专用的REST客户端:
- SpotClient -用于现货交易、押注和账户操作
- DerivativesClient -用于期货交易操作
- InstitutionalClient -供机构交易及托管
- PartnerClient -用于合作伙伴和附属业务
现货交易
要使用Kraken的Spot api,请导入(或要求) SpotClient:
import { SpotClient } from '@siebly/kraken-api';
// or if you prefer require:
// const { SpotClient } = require('@siebly/kraken-api');
// For public endpoints, API credentials are optional
const publicClient = new SpotClient();
// For private endpoints, provide API credentials
const client = new SpotClient({
apiKey: 'your-api-key',
apiSecret: 'your-base64-encoded-private-key',
});
// Public API Examples
// Get ticker information
const ticker = await publicClient.getTicker({
pair: 'XBTUSD',
});
console.log('Ticker: ', ticker);
// Get order book
const orderBook = await publicClient.getOrderBook({
pair: 'XBTUSD',
count: 10,
});
console.log('Order Book: ', orderBook);
// Private API Examples (requires authentication)
// Submit a market order
client
.submitOrder({
ordertype: 'market',
type: 'buy',
volume: '0.01',
pair: 'XBTUSD',
cl_ord_id: client.generateNewOrderID(),
})
.then((result) => {
console.log('Market Order Result: ', result);
})
.catch((err) => {
console.error('Error: ', err);
});
// Submit a limit order
client
.submitOrder({
ordertype: 'limit',
type: 'buy',
volume: '0.0001',
pair: 'XBTUSD',
price: '10000',
cl_ord_id: client.generateNewOrderID(),
})
.then((result) => {
console.log('Limit Order Result: ', result);
})
.catch((err) => {
console.error('Error: ', err);
});
// Submit batch of orders (minimum 2, maximum 15)
client
.submitBatchOrders({
pair: 'XBTUSD',
orders: [
{
ordertype: 'limit',
type: 'buy',
volume: '0.0001',
price: '10000.00',
timeinforce: 'GTC',
cl_ord_id: client.generateNewOrderID(),
},
{
ordertype: 'limit',
type: 'buy',
volume: '0.0001',
price: '11111.00',
timeinforce: 'GTC',
cl_ord_id: client.generateNewOrderID(),
},
{
ordertype: 'limit',
type: 'sell',
volume: '0.0001',
price: '13000.00',
timeinforce: 'GTC',
cl_ord_id: client.generateNewOrderID(),
},
],
})
.then((result) => {
console.log('Batch Order Result: ', JSON.stringify(result, null, 2));
})
.catch((err) => {
console.error('Error: ', err);
});
// Get account balances
client
.getAccountBalance()
.then((balance) => {
console.log('Account Balance: ', balance);
})
.catch((err) => {
console.error('Error: ', err);
});
看到 SpotClient 欲知详情,请浏览 例子 有很多用法示例。
衍生品(期货)交易
使用 DerivativesClient 期货交易业务:
import { DerivativesClient } from '@siebly/kraken-api';
// or if you prefer require:
// const { DerivativesClient } = require('@siebly/kraken-api');
// For public endpoints, API credentials are optional
const publicClient = new DerivativesClient();
// For private endpoints, provide API credentials
const client = new DerivativesClient({
apiKey: 'your-api-key',
apiSecret: 'your-api-secret',
});
// Public API Examples
// Get order book for a specific instrument
const orderBook = await publicClient.getOrderBook({
symbol: 'PF_XBTUSD',
});
console.log('Futures Order Book: ', orderBook);
// Get ticker information
const ticker = await publicClient.getTickers({
symbol: 'PF_XBTUSD',
});
console.log('Futures Ticker: ', ticker);
// Private API Examples (requires authentication)
// Get account balances
client
.getAccountsDetails()
.then((accounts) => {
console.log('Accounts Details: ', accounts);
})
.catch((err) => {
console.error('Error: ', err);
});
// Submit a limit order
client
.submitOrder({
orderType: 'lmt',
symbol: 'PF_ETHUSD', // Perpetual ETH/USD
side: 'buy',
size: 0.01, // Contract size
limitPrice: 1000,
cliOrdId: client.generateNewOrderID(),
})
.then((result) => {
console.log('Limit Order Result: ', JSON.stringify(result, null, 2));
})
.catch((err) => {
console.error('Error: ', err);
});
Kraken于2026年7月14日退出了期货演示(测试网)环境。没有替代的演示主机,Spot也从未有过测试网。设置 testnet: true 在 DerivativesClient 或者 WebsocketClient 抛出。看到 公告.
看到 DerivativesClient 获取更多信息。
尚
Kraken支持两种类型的WebSocket连接:
- WebSocket订阅 -实时市场数据和账户更新
WebsocketClient - WebSocket API 类rest的请求/响应交易
WebsocketAPIClient
WebSocket订阅(WebsocketClient)
统一 WebsocketClient 处理所有的Kraken WebSocket流与自动连接管理和重新连接。
WebSocket的主要特性:
- 事件驱动的消息传递
- 具有自动重新连接的智能WebSocket持久性
- 检测断开连接的心跳机制
- 重新连接后自动重新订阅
- 支持现货和期货市场
- 支持公共和私有WebSocket流
为什么不生的呢?
生 ws 插座为您留下了重新连接、激活、重新订阅和授权。 WebsocketClient 这样行吗?
- 重新连接丢失的套接字,然后重新订阅已请求的主题。
- 心跳(原生乒乓球,加上海妖)
heartbeat/pong帧),因此一个沉默的套接字被视为死亡并重新连接。 - 私有认证:Spot WebSocket令牌在过期前从REST获取、缓存和刷新。未来私有流使用签名挑战流,重新连接重新验证。
海妖的书载荷包括一个校验和。此SDK不验证它。 在WebSocket上发现订单 保留本地本子并检查校验和。
import { WebsocketClient } from '@siebly/kraken-api';
const ws = new WebsocketClient();
ws.on('message', (data) => console.log(data));
ws.subscribe({ topic: 'ticker', payload: { symbol: ['BTC/USD'] } }, 'spotPublicV2');
在WebSocket上发现订单
使用 WebsocketClient 在WebSocket上维护带有校验和验证的Spot订单,如runnable所示 本地订单示例. 该示例应用快照和更新,恢复CRC32验证的对精度,在校验和不匹配时重新订阅,并记录最佳出价和出价。SDK处理重新连接、心跳和重新连接后的重新订阅;该示例提供了本地图书和校验和重新同步逻辑 ws 插座留给你。
公共WebSocket流
对于公开市场数据,不需要API凭据:
import { WebsocketClient } from '@siebly/kraken-api';
// or if you prefer require:
// const { WebsocketClient } = require('@siebly/kraken-api');
// Create WebSocket client for public streams
const wsClient = new WebsocketClient();
// Set up event handlers
wsClient.on('open', (data) => {
console.log('WebSocket connected: ', data?.wsKey);
});
wsClient.on('message', (data) => {
console.log('Data received: ', JSON.stringify(data, null, 2));
});
wsClient.on('reconnected', (data) => {
console.log('WebSocket reconnected: ', data);
});
wsClient.on('exception', (data) => {
console.error('WebSocket error: ', data);
});
// Spot - Subscribe to public data streams
wsClient.subscribe(
{
topic: 'ticker',
payload: {
symbol: ['BTC/USD', 'ETH/USD'],
},
},
'spotPublicV2',
);
wsClient.subscribe(
{
topic: 'book',
payload: {
symbol: ['BTC/USD'],
depth: 10,
},
},
'spotPublicV2',
);
// Derivatives - Subscribe to public data streams
wsClient.subscribe(
{
topic: 'ticker',
payload: {
product_ids: ['PI_XBTUSD', 'PI_ETHUSD'],
},
},
'derivativesPublicV1',
);
wsClient.subscribe(
{
topic: 'book',
payload: {
product_ids: ['PI_XBTUSD'],
},
},
'derivativesPublicV1',
);
私有WebSocket流
对于私有帐户数据流,需要API凭据:
import { WebsocketClient } from '@siebly/kraken-api';
// Create WebSocket client with API credentials for private streams
const wsClient = new WebsocketClient({
apiKey: 'your-api-key',
apiSecret: 'your-api-secret',
});
// Set up event handlers
wsClient.on('open', (data) => {
console.log('Private WebSocket connected: ', data?.wsKey);
});
wsClient.on('message', (data) => {
console.log('Private data received: ', JSON.stringify(data, null, 2));
});
wsClient.on('authenticated', (data) => {
console.log('WebSocket authenticated: ', data);
});
wsClient.on('response', (data) => {
console.log('WebSocket response: ', data);
});
wsClient.on('exception', (data) => {
console.error('WebSocket error: ', data);
});
// Spot - Subscribe to private data streams
wsClient.subscribe(
{
topic: 'executions',
payload: {
snap_trades: true,
snap_orders: true,
order_status: true,
},
},
'spotPrivateV2',
);
wsClient.subscribe(
{
topic: 'balances',
payload: {
snapshot: true,
},
},
'spotPrivateV2',
);
// Derivatives - Subscribe to private data streams
// Note: SDK automatically handles authentication and challenge tokens
wsClient.subscribe('open_orders', 'derivativesPrivateV1');
wsClient.subscribe(
{
topic: 'fills',
payload: {
product_ids: ['PF_XBTUSD'],
},
},
'derivativesPrivateV1',
);
wsClient.subscribe('balances', 'derivativesPrivateV1');
wsClient.subscribe('open_positions', 'derivativesPrivateV1');
有关更全面的示例,包括自定义日志记录和错误处理,请查看 例子 文件夹中。
WebSocket API (websocketapicclient)
这个 WebsocketAPIClient 为WebSocket上的交易操作提供了一个类似REST的接口,提供了比REST api更低的延迟。目前只支持现货交易。
import { WebsocketAPIClient } from '@siebly/kraken-api';
// Create WebSocket API client with credentials
const wsApiClient = new WebsocketAPIClient({
apiKey: 'your-api-key',
apiSecret: 'your-api-secret',
});
// The client handles event listeners automatically, but you can customize them
wsApiClient
.getWSClient()
.on('open', (data) => {
console.log('WebSocket API connected:', data.wsKey);
})
.on('response', (data) => {
console.log('Response:', data);
})
.on('exception', (data) => {
console.error('Error:', data);
});
// Trading operations return promises
// Submit a spot order
const orderResponse = await wsApiClient.submitSpotOrder({
order_type: 'limit',
side: 'buy',
limit_price: 26500.4,
order_qty: 1.2,
symbol: 'BTC/USD',
});
console.log('Order placed:', orderResponse);
// Amend an existing order
const amendResponse = await wsApiClient.amendSpotOrder({
order_id: 'OAIYAU-LGI3M-PFM5VW',
order_qty: 1.5,
limit_price: 27000,
});
// Cancel specific orders
const cancelResponse = await wsApiClient.cancelSpotOrder({
order_id: ['OM5CRX-N2HAL-GFGWE9', 'OLUMT4-UTEGU-ZYM7E9'],
});
// Cancel all open orders
const cancelAllResponse = await wsApiClient.cancelAllSpotOrders();
WebSocket API提供了几个优点:
- 更低的延迟 -比REST API更快的高频交易
- 连接重用 —单个持久连接用于多个请求
- 更好的性能 批量提交/取消多个订单
- 类型安全 完整的TypeScript支持类型请求和响应
看到 WebSocket API示例 以获取更详细的用法。
定制日志
传递一个支持日志方法的自定义日志记录器 trace, info 和 error,或根据需要覆盖默认记录器中的方法。
import { WebsocketClient, DefaultLogger } from '@siebly/kraken-api';
// E.g. customise logging for only the trace level:
const customLogger: DefaultLogger = {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
trace: (...params: LogParams): void => {
// console.log('trace', ...params);
},
info: (...params: LogParams): void => {
console.log('info', ...params);
},
error: (...params: LogParams): void => {
console.error('error', ...params);
},
};
const ws = new WebsocketClient(
{
apiKey: 'apiKeyHere',
apiSecret: 'apiSecretHere',
},
customLogger,
);
浏览器/前端使用
Webpack
使用webpack构建一个bundle:
npm installnpm run buildnpm run pack
该包可以在 dist/. 虽然使用应该大体一致,但也会存在较小的差异。文档仍然是待办事项。
与llm和AI一起使用
此SDK包含一个捆绑的 llms.txt 文件在存储库的根目录下。如果您正在使用llm进行开发,请使用包含的 llms.txt 与您的法学硕士-它将显著提高法学硕士对如何正确使用此SDK的理解。
这个文件包含了这个包中所有功能的人工智能优化结构,以及它们的参数,以便于任何学习模型或人工智能使用。
所使用的
贡献与感谢
我的项目对你有帮助吗?分享爱,有很多方式可以表达你的感谢:
- 明星和分享我的项目。
- 我的项目有用吗?在Github上赞助我,支持我维护和改进它们的努力: https://github.com/sponsors/tiagosiebler
- 有一个有趣的项目?联系我并邀请我参加。
- 或者给我买咖啡
- 乙(ERC20):
0xA3Bda8BecaB4DCdA539Dc16F9C54a592553Be06C
- 乙(ERC20):
- 注册我的推荐链接:
- OKX(获得20%的费用折扣!): https://www.okx.com/join/42013004
- 币安(获得20%的费用折扣!): https://accounts.binance.com/register?ref=OKFFGIJJ
- HyperLiquid(获得4%的费用折扣!): https://app.hyperliquid.xyz/join/SIEBLY
- 门: https://www.gate.io/signup/NODESDKS?ref_type=103
贡献和拉取请求
鼓励贡献,我将审查任何传入的拉请求。请参阅事项选项卡中的待办事项项。