Введение
Научитесь понимать и использовать API для торговли криптовалютами, чтобы получить множество возможностей для входа и выхода из позиций. Даже базовых знаний в области кодирования достаточно для подключения к серверу биржи и автоматизации торговых стратегий. А за счет обхода веб-сайта вы можете гораздо быстрее получить доступ к инструменту сопоставления ордеров для высокопроизводительных приложений.
Цель этой серии — познакомить и научить вас работать с Binance REST API. После прочтения статей вы сможете уверенно запрашивать информацию о рынках и позициях, а также размещать различные типы ордеров.
В этой статье для связи с биржей мы будем использовать Postman. Не волнуйтесь — мы не будем рисковать реальными средствами.
Необходимые условия
Ключи тестовой сети
Для наших целей мы будем использовать тестовую сеть. Это позволит экспериментировать со средствами, у которых нет ценности в реальном мире. Они работают так же, как реальные монеты и токены, поэтому после изучения статьи вы сможете использовать API для торговли реальными средствами.
Для начата перейдите в спотовую тестовую сеть.
Чтобы получить доступ, войдите в аккаунт GitHub. Создайте аккаунт, если у вас его нет.
Нажмите Authenticate (Аутентификация) и войдите через GitHub.
В разделе API-ключей вы увидите сообщение об отсутствии зарегистрированных ключей. Нажмите Generate HMAC_SHA256 Key (Создать ключ HMAC_SHA256).
Затем присвойте ключам любую метку и нажмите Generate (Создать).
Вы получите API-ключ и секретный ключ. Важно записать их сразу. В противном случае придется начать процесс создания ключа заново. Рекомендуем хранить API-ключ и секретный ключ в приложении для заметок, чтобы их можно было легко скопировать и вставить.
Примечание: при использовании реальной биржи стоит давать ключам метки, чтобы легче управлять ключами. В аккаунте может быть несколько ключей с разными разрешениями. Если вы используете несколько торговых ботов, ключи с описательными метками упрощают управление разрешениями и удаление ключей без изменения всех ботов.
Загрузка и установка Postman
Postman — это платформа для взаимодействия с API. Это идеальная отправная точка: она предоставляет доступ к коллекциям запросов Binance, которые можно тестировать без написания кода.
Программа доступна на Mac, Windows и Linux. Перейдите на страницу загрузки и скачайте файл в формате zip.
После этого найдите его в проводнике и установите. Запустите приложение — и можете приступать! Для входа можно по желанию создать аккаунт. Чтобы пропустить этот шаг, выберите соответствующую опцию в нижней части окна.
Создание среды
На этом этапе перед вами должен быть подобный интерфейс.
Сначала необходимо создать среду, чтобы добавить переменные в набор запросов, с которыми мы будем работать. Для этого нужно получить некоторую информацию из репозитория Binance на GitHub. Перейдите по ссылке и скачайте файл в формате zip.
Загрузка не займет много времени. Найдите файл в проводнике и распакуйте. Затем вернитесь в Postman.
Нажмите на значок настроек в верхнем правом углу, как показано на изображении выше. Появится всплывающее окно для управления средами.
Нажмите Import (Импортировать) и перейдите в папку, которую только что извлекли (binance-postman-api).
Откройте ее, а затем откройте папку сред.
Там будет два файла (один для основной сети и один для тестовой). Нам нужен binance_com_spot_testnet_api.postman_environment.json. Убедитесь, что выбрали правильный файл, потому что в противном случае ключи не сработают.
Почти готово. Нажмите Binance Spot Testnet API (API спотовой тестовой сети Binance). Вы увидите переменные, как на изображении ниже. Вставьте ранее сохраненные ключи в два параметра, выделенные красным цветом. Нажмите Update (Обновить) и закройте это окно.
Оставьте поля timestamp (штамп времени) и signature (подпись) пустыми. Эти значения будут автоматически создаваться при каждом запросе.
Осталось совсем немного. Справа от значка настроек, на который мы нажимали для настройки среды, есть выпадающее меню с надписью No Environment (Нет среды). Нажмите на него и выберите Binance Spot Testnet API (API спотовой тестовой сети Binance).
Импорт коллекции
Теперь нужно импортировать коллекцию — обширный набор запросов, который при отправке вызова сделает тяжелую работу за нас. Чтобы загрузить коллекцию в среду:
Нажмите Import (Импортировать) в верхнем левом углу.
Во всплывающем окне на вкладке File (Файл) выберите Upload Files (Загрузить файлы).
Найдите папку binance-postman-api и откройте ее.
На этот раз войдите в папку коллекций.
Там будет два файла. Один — для работы с фьючерсным API, второй — для работы со спотовым. Нам нужен спотовый, поэтому выберите файл binance_spot_api_v1.postman_collection.json.
На экране появится окно подтверждения, в котором будет указано, что импорт выполняется в формате Postman Collection. Нажмите Import (Импортировать).
На вкладке Import (Коллекции) слева появится папка с более чем 100 запросами. Поздравляем, теперь можно начинать! В следующем разделе мы рассмотрим различные типы запросов.
Подача запросов
Если развернуть папки во вкладке Collections (Коллекции), будет видно множество доступных запросов. Разными цветами выделено три типа методов, которые можно использовать:
GET: метод GET предназначен для получения данных с сервера. Этот метод поможет найти информацию о балансе аккаунта, ценах на активы и так далее.
POST: как правило, метод POST используется для создания информации на сервере. Этот метод необходим для размещения ордеров, запросов на вывод средств и так далее.
DELETE: метод DELETE просит сервер удалить информацию. Этот метод пригодится для отмены ордеров.
Поиск торговых пар и правил торговли
Пора создать первый запрос! Нам нужно получить информацию о торговых парах, которыми можно торговать на бирже, и правилах торговли:
GET /exchangeInfo
Для этого запроса не нужны дополнительные параметры — его можно скопировать и вставить в адресную строку, чтобы получить ответ. Однако если у запросов есть несколько параметров, Postman позволяет легко их просматривать и менять.
Чтобы загрузить этот запрос, выберите Market > Exchange Information (Рынок > Информация о бирже). Откроется следующая вкладка:
Больше ничего делать не нужно, просто нажмите Send (Отправить). Вы получите ответ:
В самом верхнем выделенном разделе находится важная информация:
статус ответа (200 означает успех, 400–499 означает ошибку);
время на получение ответа (менее секунды);
размер ответа (~22 Кбайт).
Во втором выделенном разделе находится основная часть ответа. Текст представлен структурировано, чтобы на него было легче смотреть. В нем содержится информация о бирже, а также о парах, которыми можно торговать, и их минимальных/максимальных суммах.
Кажется, что информации очень много, но такой формат очень упрощает работу программистов. При написании скриптов для взаимодействия будет легко найти свойства определенных элементов.
Проверка баланса аккаунта
Давайте проверим, какие активы у нас есть и сколько их:
GET /account
Запрос можно найти в разделе Trade > Account Information (Торговля > Информация об аккаунте). Нажмите на него — откроется страница, аналогичная предыдущей. Однако будет две новые переменные: timestamp (штамп времени) и signature (подпись). Подпись — это мера безопасности. Поскольку вы запрашиваете конфиденциальную информацию, необходимо подтвердить, что вы являетесь владельцем аккаунта.
Штамп времени сообщает серверу, когда был отправлен запрос. Из-за сбоев сети сервер может получить запрос намного позже, чем предполагалось. Если пройдет слишком много времени, запрос будет отклонен. Можно указать предпочтительное время ожидания с помощью параметра recvWindow, который по умолчанию составляет 5000 миллисекунд.
Postman генерирует оба поля за пользователя. Нажмите Send (Отправить), чтобы получить ответ. В разделе балансов будет шесть активов: BNB, BTC, BUSD, ETH, LTC и TRX. Баланс будет разделен на доступный и заблокированный. Мы еще ничего не блокировали, поэтому все активы должны быть доступными.
Поздравляем с (несуществующим) богатством!
Как узнать текущую цену торговой пары
Узнать текущую цену актива можно разными способами. Самый простой — использовать следующий запрос:
GET /api/v3/ticker/24hr
Этот запрос дает информацию о ценах на активы за последние 24 часа. Найдите его в разделе Market > 24hr Ticker Price Change Statistics (Рынок > Статистика изменения цены торговой пары за 24 часа). По умолчанию в качестве переменной выступает торговая пара BTCUSDT.
Можно отправить запрос сразу, чтобы увидеть подробную информацию о ценах. Также можно изменить торговую пару (на BNBBUSD, LTCUSDT и другие) или снять отметку с переменной, чтобы получить данные для 40 пар.
Также есть более простой запрос Market > Symbol Price Ticker (Рынок > Тикер цены торговой пары), который показывает текущую цену актива:
GET /api/v3/price
Как и в предыдущем случае, можно изменить переменную торговой пары или полностью удалить ее и получить последнюю цену для всех пар.
Проверка текущей глубины книги ордеров
Глубина книги ордеров (также называемая глубиной рынка или DOM) может многое рассказать о рынке. Чтобы получить полезную информацию, нужно сделать запрос:
GET api/v3/depth
Когда мы отправляем его со значениями по умолчанию (Market > Order Book, то есть Рынок > Книга ордеров), мы получаем ответ с бид-ценами и аск-ценами BTCUSDT. Сервер тестовой сети выдает не так много данных, как сервер настоящей сети, поэтому ниже приведен скриншот того, что можно увидеть в реальной среде:
В выделенном разделе выше указана первая бид-цена. Поскольку мы рассматриваем книгу BTCUSDT, верхнее число — это цена, которую кто-то готов заплатить за ваш BTC. Ниже указано количество, которое этот пользователь хочет купить. Получается, ордер запрашивает 0,999 BTC по курсу 9704,65 USDT за BTC. Далее цена предложения снижается: ниже по списку находятся покупатели, которые хотят заплатить меньше.
Верхнее предложение будет самым выгодным. Однако если вы пытаетесь продать, например, 3 BTC, то по лучшей цене сможете продать только 0,999 BTC. Придется принимать следующие (более дешевые) предложения, пока ордер не будет исполнен полностью.
Ниже находится информация об аск-ценах. Они похожи на бид-цены, за исключением того, что в этом разделе представлены ордера на продажу BTC за USDT.
Размещение тестового ордера
Теперь мы разместим тестовый ордер.
POST api/v3/order/test
Хотя мы используем средства тестовой сети, этот запрос на самом деле не размещает ордер. Так можно тестировать ордера до их фактического размещения. Запрос расположен в разделе Trade > Test New Order (TRADE) (Торговля > Тест нового ордера (TRADE)).
В этот раз задействовано гораздо больше параметров. Давайте рассмотрим отмеченные:
symbol (торговая пара) — мы уже сталкивались с ним ранее. Это пара, которой вы хотите торговать.
side (действие) — здесь нужно выбрать BUY (купить) или SELL (продать). В паре BTCUSDT BUY позволяет купить BTC за USDT, а SELL — продать BTC за USDT.
type (тип) — тип ордера, который вы хотите разместить. Возможные значения (подробнее по ссылке):
LIMIT
MARKET
STOP_LOSS
STOP_LOSS_LIMIT
TAKE_PROFIT
TAKE_PROFIT_LIMIT
LIMIT_MAKER
timeInForce — этот параметр определяет способ исполнения ордера:
GTC (действует до отмены) — самый популярный выбор. Ордер будет действовать до тех пор, пока не будет исполнен или пока вы его не отмените.
FOK (исполнить или отменить) — FOK дает бирже указание исполнить ордер сразу и полностью. Если биржа не может этого сделать, ордер немедленно отменяется.
IOC (немедленно или отменить) — ордер должен быть исполнен сразу, полностью или частично. В отличие от FOK, ордера не отменяются, если могут быть исполнены лишь частично.
quantity (количество) — количество актива, которое вы хотите купить или продать.
price (цена) — цена, по которой вы хотите продать. Для пары BTCUSDT она выражается в USDT.
newClientOrderId — идентификатор ордера. Это необязательное поле, но в нем можно указать идентификатор, который облегчит запрос позже. В противном случае биржа сгенерирует ID случайным образом.
Теперь давайте создадим тестовый ордер. Мы используем автоматически сгенерированные значения: лимитный ордер на продажу 0,1 BTC за USDT по цене $9000. Нажмите Send (Отправить). В случае успеха мы получим {} в качестве ответа.
Размещение реального ордера
Пора узнать, как размещать настоящий ордер.
POST /api/v3/order
Перейдите в раздел Trade > New Order (Торговля > Новый ордер). Параметры здесь такие же, как у тестовых ордеров. Давайте оставим все значения как есть, но поменяем цену продажи на $40 000. Скорректируйте цену и нажмите Send (Отправить).
В случае успеха придет ответ с подробностями об ордере.
Проверка статуса открытого ордера
В предыдущем разделе мы уже получили подтверждение, что ордер размещен, но как его теперь проверить? Для этого есть несколько запросов.
GET /api/v3/openOrders
Запрос находится в разделе Trade > Current Open Orders (USER_DATA) (Торговля > Текущие открытые ордера (USER_DATA)). По умолчанию выбрана пара BTCUSDT. Если вы нажмете Send (Отправить), то получите информацию по вашим открытым ордерам BTCUSDT (на данном этапе вы увидите только тот, который мы разместили ранее). Если не указать торговую пару, тогда придет информация по всем открытым ордерам.
GET /api/v3/allOrders
Trade > All Orders (USER_DATA) (Торговля > Все ордера (USER_DATA)) даст обзор всех ордеров, а не только открытых. Здесь необходимо указать торговую пару. orderId, startTime, endTime и limit — необязательные параметры, которые помогут уточнить поиск. Сейчас они не нужны, так что уберите с них галочки. Нажмите Send (Отправить) — появится тот же ответ, что и раньше. Здесь также отображаются закрытые и отмененные ордера, если они есть.
Наконец, можно запросить конкретные ордера с помощью:
GET /api/v3/order
Запрос находится в разделе Trade > Query Order (USER_DATA) (Торговля > Запрос ордера (USER_DATA)). Необходимо указать orderId или origClientOrderId (необязательный тег «newClientOrderId», который можно добавить к ордерам). Снимите отметку с orderId. Для origClientOrderId укажем тег по умолчанию — «my_order_id_1». Заполните поле и нажмите Send (Отправить).
Отмена ордера
Если через некоторое время цель в $40 000 покажется слишком оптимистичной, ордер можно отменить. В этом случае нужно использовать:
DELETE /api/v3/order
Это запрос в разделе Trade > Cancel Order (Торговля > Отменить ордер), который позволит выделить ордера для отмены. Снимите отметку с параметров orderId и newClientOrderId и задайте для origClientOrderId значение «my_order_id_1».
После отправки запроса вы получите ответ с информацией об ордере. Если прокрутить вниз до раздела status (статус), можно увидеть, что он действительно отменен. Чтобы подтвердить это, снова используйте конечную точку GET /api/v3/openOrders (она выдаст пустой список) или GET /api/v3/order с origClientOrderId.
Размещение ордера с мгновенным исполнением
Предыдущий лимитный ордер не был исполнен, потому что он сработал бы только при достижении цены BTC $40 000. Рыночный ордер же позволяет покупать/продавать по любой текущей цене. Он исполняется мгновенно.
Для этого давайте вернемся в раздел Trade > New Order (Торговля > Новый ордер). Мы продемонстрируем тип ответа (newOrderRespType) — параметр, настраиваемый в зависимости от желаемого ответа. Здесь есть три варианта: ACK, RESULT или FULL. Примеры каждого запроса находятся по ссылке. Мы выберем ACK, который просто подтвердит, что ордер был получен.
Ниже можно увидеть, что мы собираемся отправить рыночный ордер на продажу BNB за BUSD по текущей рыночной цене.
Обратите внимание, что в ответе содержится довольно мало информации:
Можно убедиться, что ордер был исполнен, с помощью /api/v3/allOrders.
Проверка сделок
Теперь давайте рассмотрим запрос для проверки сделок:
GET /api/v3/myTrades
Он находится в разделе Trade > Account Trade List (USER_DATA) (Торговля > Список сделок аккаунта (USER_DATA)). Такой запрос позволяет проверить каждую сделку с определенной торговой парой. Чтобы увидеть сделки с торговой парой по умолчанию (BTCUSDT), просто снимите отметку с параметров startTime, endTime и fromId. В ответе будет до 500 сделок — измените параметр limit (лимит), чтобы увидеть больше.
Отладка с помощью Postman
В Postman можно дополнительно раскрыть необработанный HTTP-запрос и ответ.
Это меню откроет консоль Postman, которая выведет детали каждого запроса.
Резюме
Целью данного руководства было рассказать, как работать с API Binance без написания кода. Теперь вы знаете, как запросить и отправить информацию.
В следующих частях этой серии мы познакомим вас с основными концепциями кодирования, которые автоматизируют покупку и продажу криптовалют и других цифровых активов.
Если у вас остались вопросы, перейдите в сообщество разработчиков Binance или ознакомьтесь с документацией.