Потоковые данные AsterDEX с WebSocket и Node.js
Узнайте, как получать рыночные данные в реальном времени с биржи AsterDEX, используя WebSocket API и Node.js. Это ключ к созданию быстрых и отзывчивых торговых приложений.
REST против WebSocket: Почему важен Real-Time?
В нашем предыдущем руководстве мы использовали REST API. Это "pull" модель: вы отправляете запрос и получаете ответ. Для получения обновлений нужно постоянно опрашивать сервер, что медленно и неэффективно.
WebSocket — это "push" модель. Вы устанавливаете одно постоянное соединение, и сервер сам присылает вам данные, как только они появляются. Это критически важно для отслеживания быстрых движений рынка, арбитража и других стратегий, где задержка в доли секунды имеет значение.
Необходимые условия:
- Установленный Node.js и npm.
- Базовое понимание JavaScript и асинхронности (async/await, Promises).
Шаг 1: Настройка проекта
Создайте новую папку для вашего проекта, инициализируйте npm и установите библиотеку `ws` — популярный WebSocket клиент для Node.js.
mkdir asterdex-websocket
cd asterdex-websocket
npm init -y
npm install ws
Теперь создайте файл `app.js` — это будет наш основной файл.
Шаг 2: Установка соединения с WebSocket
Импортируем библиотеку `ws` и создаем нового клиента, указывая WebSocket URL биржи AsterDEX.
const WebSocket = require('ws');
// WebSocket эндпоинт AsterDEX
const WS_URL = 'wss://fstream.asterdex.com/ws';
console.log('Подключение к WebSocket...');
const ws = new WebSocket(WS_URL);
// Обработчик открытия соединения
ws.on('open', () => {
console.log('Соединение с WebSocket успешно установлено!');
// Здесь мы будем подписываться на потоки
});
// Обработчик входящих сообщений
ws.on('message', (data) => {
const message = JSON.parse(data);
console.log('Получено сообщение:', message);
});
// Обработчик ошибок
ws.on('error', (error) => {
console.error('Ошибка WebSocket:', error);
});
// Обработчик закрытия соединения
ws.on('close', () => {
console.log('Соединение с WebSocket закрыто.');
});
Шаг 3: Подписка на потоки данных
После установки соединения биржа не будет ничего присылать, пока мы не подпишемся на интересующие нас "потоки" (streams). Подписка происходит путем отправки JSON-сообщения определенного формата.
Давайте подпишемся на поток агрегированных сделок (`aggTrade`) для пары `BTCUSDT`.
// Поместите этот код внутрь обработчика ws.on('open', ...)
// Параметры для подписки
const subscriptionParams = {
method: "SUBSCRIBE",
params: [
"btcusdt@aggTrade" // Поток агрегированных сделок для BTC/USDT
],
id: 1 // Уникальный идентификатор запроса
};
// Отправляем запрос на подписку
ws.send(JSON.stringify(subscriptionParams));
console.log('Отправлен запрос на подписку:', JSON.stringify(subscriptionParams));
Теперь, если вы запустите код (`node app.js`), после установки соединения вы начнете получать в консоли сообщения о каждой новой сделке по паре BTC/USDT в реальном времени!
Шаг 4: Подписка на несколько потоков и обработка данных
Вы можете подписаться на несколько потоков одновременно. Давайте добавим поток данных из стакана ордеров (`depth5`), который показывает 5 лучших уровней цен на покупку и продажу.
// Внутри ws.on('open', ...)
const multiStreamParams = {
method: "SUBSCRIBE",
params: [
"btcusdt@aggTrade", // Сделки
"btcusdt@depth5@100ms" // Стакан (5 уровней) с обновлением каждые 100мс
],
id: 2
};
ws.send(JSON.stringify(multiStreamParams));
console.log('Отправлен запрос на подписку на несколько потоков...');
Теперь нужно научиться различать сообщения из разных потоков. Для этого в `ws.on('message', ...)` будем проверять структуру объекта.
// Внутри ws.on('message', ...)
const message = JSON.parse(data);
if (message.stream) {
if (message.stream.endsWith('@aggTrade')) {
const trade = message.data;
console.log(`Новая сделка по ${trade.s}: Цена=${trade.p}, Кол-во=${trade.q}`);
} else if (message.stream.endsWith('@depth5@100ms')) {
const depth = message.data;
console.log(`Обновление стакана ${message.stream.split('@')[0]}: Лучший Ask=${depth.asks[0][0]}, Лучший Bid=${depth.bids[0][0]}`);
}
} else if (message.result === null) {
console.log('Подписка успешно подтверждена!');
} else {
console.log('Системное сообщение:', message);
}
Заключение и что дальше?
Вы научились подключаться к WebSocket API AsterDEX и получать данные в реальном времени. Это основа для создания быстрых торговых ботов, дашбордов и аналитических инструментов.
Следующие шаги:
- Надежность соединения: Реализуйте логику автоматического переподключения при обрыве связи.
- Управление подписками: Добавьте функции для динамической подписки и отписки от потоков без перезапуска приложения.
- Аутентифицированные эндпоинты: Для получения данных о балансе или статусе ордеров через WebSocket требуется аутентификация. Изучите документацию для этого.
- Интеграция с логикой: Соедините полученные данные с торговой логикой, которая будет принимать решения и отправлять ордера через REST API.
Для получения полного списка доступных потоков и их форматов обратитесь к официальной документации API AsterDEX.