Taker buy base asset volume что это
Как создать API ключ для фьючерсов на бирже Binance?
Цель этого руководства — мягко познакомить вас с Binance API без написания ни единой строчки кода
Binance API — Спотовая торговля с помощью Postman.
Понимание и использование API для торговли криптовалютой может открыть целый мир возможностей, когда дело доходит до входа и выхода из позиций. Обладая некоторыми простыми знаниями в области написания кода, вы можете подключиться к серверной части биржи, чтобы автоматизировать свои торговые стратегии.
Обойдя через API веб-сайт, вы можете гораздо быстрее найти соответствующий движок для высокопроизводительных приложений.
Цель этой серии руководств — познакомить вас с REST API Binance и научить, как с ним взаимодействовать.
К концу ознакомления с руководством вы должны быть уверены в своей способности запрашивать через API информацию о рынках и вашей позиции и размещать ряд различных типов ордеров.
В этой статье мы будем использовать Postman для связи с биржей. Не волнуйтесь — мы не будем рисковать реальными деньгами.
Вводная информация
В отличии от многих других бирж, Binance лимитирует не только количество запросов к API, но и «вес» запросов. Причем, это не какие-то фиксированные единицы, но целый комплекс (как они заявляют, англ). Например, если вы постоянно запрашиваете свечи но не торгуете, то ваш вес накапливается и вас могут забанить. И вообще они суровые — если вы постоянно перебиваете лучшую цену на минимальную ставку, или создаете/отменяете ордера но не покупаете и продаете и т.п. то вас настигнут санкции. Так что будьте аккуратны при тестировании ботов. Впрочем, пока я тестировал, ничего плохого не случилось, хотя я порой и жестил.
Если биржа захочет вам намекнуть, что пора бы снизить пыл, она вернет 429 ответ сервера. Если вы будете игнорировать этот ответ и ломиться в закрытую дверь, то вас забанят по IP на срок от 2 минут до 3 дней.
Подключение к API биржи идет через https://api.binance.com, для авторизованных запросов нужно отправлять ключ в заголовке X-MBX-APIKEY, и подписывать тело запроса SHA256.
Что бы вы не заморачивались с этим, я написал код, который позволяет все указанные запросы выполнять. Для его работы нужно установить Python версии 3.6+ с официального сайта, потом в командной строке выполнить pip install requests. Создайте папку (для удобства), создайте новый файл binance_api.py, и вставьте туда этот код:
Для тестирования методов, создайте в этой же папке второй файл, например, binance_test.py, туда вставьте вот такой код (подставьте свои API ключи):
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘account’, bot.account())
(Или возьмите с гитхаба)
Еще немного общей информации: практически во всех подписанных запросах необходимо указывать параметр timestamp — это текущее unix-время в милиосекундах. Но, так как некоторые сети бывают перегружены, то ваш запрос может заблудиться и придти позже. Поэтому биржа предоставляет вам временное окно (по умолчанию 5000 милисекунд). Если у вас запросы не успевают придти в это окно, вы можете его расширить с помощью параметра recvWindow. Но, думаю, это мало кому понадобится.
Binance Futures — что это? Общее описание
Платформа представляет собой раздел официального сайта биржи Binance. Чтобы работать с ней, необходимо сначала создать основной спот аккаунт, а затем — под той же учетной записью активировать фьючерсный счет.
Символично
Согласно данным CoinGecko, Binance Futures — самая крупная биржа криптовалютных деривативов по объему торгов: 24-часовой торговый объем превышает 26 миллиардов долларов, за сутки открывается позиций почти на 2 миллиарда. Высокий спрос объясняется главным образом покровительством основной площадки Бинанс, которая также лидер индустрии, и высоким кредитным плечом 125х, открывающим широкие торговые возможности.
Рекорд биржи по ежедневным торгам
Работа с платформой доступна во всех странах, где доступна биржа Binance — то есть там, где это не запрещено законодательно. Поддерживаемые языки интерфейса: русский, украинский, английский, испанский, немецкий; португальский, итальянский, китайский и т.д. (суммарно 20 языков).
Основатель и генеральный директор: Чанпен Чжао.
Основатель одной из крупнейших бирж
Публичные запросы
Проверка связи — /api/v1/ping
Метод для проверки работы API. Возвращает пустой словарь
Ссылка для просмотра в браузере https://api.binance.com/api/v1/ping. Вес — 1 Код для проверки:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.ping())
Получение времени биржи — /api/v1/time
Ссылка для просмотра в браузере https://api.binance.com/api/v1/time Вес — 1 Возвращает словарь с текущим временем:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.time())
Настройки и лимиты биржи — /api/v1/exchangeInfo
Ссылка для просмотра в браузере https://api.binance.com/api/v1/exchangeInfo Вес — 1 Возвращает структуру данных:
Ключ rateLimits ведет на массив с лимитами — сколько запросов в секунду/минуту/день можно делать. Ключ symbols содержит настройки для каждой пары — рассмотрим одну, ETHBTC
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.exchangeInfo())
Открытые ордера на бирже — /api/v1/depth
Метод позволяет получить книгу ордеров. Принимает параметры: Обязательные: symbol — пара Необязательные: limit — кол-во возвращаемых записей от 5 до 1000 (по умолчанию 100). Допустимые значения: 5, 10, 20, 50, 100, 500, 1000. Еще можно указать 0, но он может вернуть большое кол-во данных. Вес зависит от параметра limit. При лимите от 5 до 100 вес будет равен 1. Для параметра 500 вес составит 5. Для параметра 1000 вес будет 10. Ссылка для просмотра в браузере: https://api.binance.com/api/v1/depth?symbol=ETHBTC Возвращает значения:
bids — это списки цен/объемов на покупку, asks — на продажу. Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘depth’, bot.depth( symbol=’BNBBTC’, limit=5 ))
Последние (чужие) сделки — /api/v1/trades
Принимает параметры: Обязательные: symbol — пара Необязательные: limit — кол-во возвращаемых записей (максимум 500, по умолчанию 500). Вес — 1 Ссылка для просмотра в браузере: https://api.binance.com/api/v1/trades?symbol=ETHBTC Пример ответа:
id — id сделки price — цена qty — количество time — время сделки isBuyerMaker — была ли покупка по указанной покупателем цене, isBestMatch — была ли встречная сделка Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘trades’, bot.trades( symbol=’BNBBTC’, limit=1 ))
Сжатая история сделок — /api/v1/aggTrades
Метод позволяет получить суммарную историю сделок. Сделки, выполненные в одно время по одному ордеру и по одной цене будут представлены одной строкой с объединенным количеством. Вес — 1 Ссылка для просмотра в браузере: https://api.binance.com/api/v1/aggTrades?symbol=ETHBTC Принимает параметры: Обязательные: symbol — пара Необязательные: fromID — показывать начиная со сделки № (включительно) startTime — начиная с какого времени (включительно) endTime — заканчивая каким временем (включительно) limit — Кол-во записей (максимум 500, по умолчанию 500) Возвращает данные:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘aggTrades’, bot.aggTrades( symbol=’BNBBTC’, limit=1 ))
Данные по свечам – /api/v1/klines
Вес – 1 Ссылка для просмотра в браузере https://api.binance.com/api/v1/klines?symbol=LTCBTC&interval=5m Параметры: Обязательные: symbol – пара interval – период свечи Допустимые интервалы: • 1m // 1 минута • 3m // 3 минуты • 5m // 5 минут • 15m // 15 минут • 30m // 30 минут • 1h // 1 час • 2h // 2 часа • 4h // 4 часа • 6h // 6 часов • 8h // 8 часов • 12h // 12 часов • 1d // 1 день • 3d // 3 дня • 1w // 1 неделя • 1M // 1 месяц
Необязательные: limit – кол-во свечей (максимум 500, по умолчанию 500) startTime – время начала построения endTime – окончание периода Если не указаны параметры startTime и endTime, то возвращаются самые последние свечи. Пример ответа:
[ [ 1499040000000, // Время открытия «0.01634790», // Цена открытия (Open) «0.80000000», // Максимальная цена (High) «0.01575800», // Минимальная цена (Low) «0.01577100», // Цена закрытия (Close) «148976.11427815», // Объем 1499644799999, // Время закрытия «2434.19055334», // Объем квотируемой валюты 308, // Кол-во сделок «1756.87402397», // Taker buy base asset volume «28.46694368», // Taker buy quote asset volume «17928899.62484339» // Ignore ] ]
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘klines’, bot.klines( symbol=’BNBBTC’, interval=’5m’, limit=1 ))
Статистика за 24 часа — /api/v1/ticker/24hr
Вес – 1, если указана пара, иначе вес равен (количеству всех торгуемых пар)/2. Ссылка для просмотра в браузере: https://api.binance.com/api/v1/ticker/24hr?symbol=BNBBTC Параметры: Необязательные: symbol – пара Если symbol не указан, возвращаются данные по всем парам. В этом случае, считается, что вы сделали столько запросов к бирже, сколько вернулось пар. Пример ответа:
Если пар несколько, то такие словари вкладываются в массив, вот так:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/24hr’, bot.ticker24hr( symbol=’BNBBTC’ ))
Последняя цена по паре (или парам) — /api/v3/ticker/price
Вес — 1 Параметры: Необязательные: symbol – пара Если параметр symbol не указан, то возвращаются цены по всем парам. Ссылка для просмотра в браузере: https://api.binance.com/api/v3/ticker/price?symbol=BNBBTC Пример ответа:
Или (если не указан параметр)
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/price’, bot.tickerPrice( symbol=’BNBBTC’ ))
Лучшие цены покупки/продажи — /api/v3/ticker/bookTicker
Вес 1 Параметры: Необязательные: symbol – пара Если параметр symbol не указан, возвращаются данные по всем парам. Ссылка для просмотра в браузере: https://api.binance.com/api/v3/ticker/bookTicker?symbol=BNBBTC Пример ответа:
Или (если не указан параметр):
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/bookTicker’, bot.tickerBookTicker( symbol=’BNBBTC’ ))
Преимущества и недостатки использования ботов
Основные плюсы работы с торговыми ботами для Бинанс:
К недостаткам можно отнести следующие моменты:
Теперь рассмотрим несколько торговых ботов, которые могут работать в связке с криптовалютной биржей Binance.
Авторизованные запросы:
Создание ордера — /api/v3/order
Для тех, кто будет писать свою библиотеку – обратите внимание, что адрес один и тот же /api/v3/order, но отличается метод – если отправлять данные через POST, это будет создание ордера, через GET – получение информации об ордере, DELETE – отмена ордера. Параметры, соответственно, разные.
Вес – 1 Метод: POST Параметры: Обязательные: symbol – пара side – тип ордера (BUY либо SELL) type – тип ордера (LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT, LIMIT_MAKER) quantity – количество к покупке timestamp – текущее время в миллисекундах (в коде, выложенном здесь, проставляется автоматически, указывать не надо. Необязательные: timeInForce – (GTC, IOC, FOK). По умолчанию GTC. Расшифрую. GTC (Good Till Cancelled) – ордер будет висеть до тех пор, пока его не отменят. IOC (Immediate Or Cancel) – Будет куплено то количество, которое можно купить немедленно. Все, что не удалось купить, будет отменено. FOK (Fill-Or-Kill) – Либо будет куплено все указанное количество немедленно, либо не будет куплено вообще ничего, ордер отменится.
price – цена newClientOrderId – Идентификатор ордера, который вы сами придумаете (строка). Если не указан, генерится автоматически. stopPrice – стоп-цена, можно указывать если тип ордера STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, или TAKE_PROFIT_LIMIT. icebergQty – кол-во для ордера-айсберга, можно указывать, если тип ордера LIMIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT recvWindow – кол-во миллисекунд, которое прибавляется к timestamp и формирует окно действия запроса (см. выше). По умолчанию 5000. newOrderRespType –какую информацию возвращать, если удалось создать ордер. Допустимые значения ACK, RESULT, или FULL, по умолчанию RESULT. Подробности ниже.
В зависимости от типа ордера, некоторые поля становятся обязательными:
Тип ордера Обязательные поля LIMIT timeInForce, quantity, price MARKET quantity STOP_LOSS quantity, stopPrice STOP_LOSS_LIMIT timeInForce, quantity, price, stopPrice TAKE_PROFIT quantity, stopPrice TAKE_PROFIT_LIMIT timeInForce, quantity, price, stopPrice LIMIT_MAKER quantity, price
Ордера типа LIMIT_MAKER – это ордера типа обычного LIMIT, но они отклонятся, если ордер при выставлении может выполниться по рынку. Другими словами, вы никогда не будете тейкером, ордер либо выставится выше/ниже рынка, либо не выставится вовсе. Ордера типа STOP_LOSS и TAKE_PROFIT исполнятся по рынку (ордер типа MARKET), как только будет достигнута цена stopPrice. Любые ордера LIMIT или LIMIT_MAKER могут формировать ордер-айсберг, установив параметр icebergQty. Если установлен параметр icebergQty, то параметр timeInForce ОБЯЗАТЕЛЬНО должен иметь значение GTC.
Для того, что бы выставлять цены, противоположные текущим для ордеров типов MARKET и LIMIT: Цена выше рыночной: STOP_LOSS BUY, TAKE_PROFIT SELL Цена ниже рыночной: STOP_LOSS SELL, TAKE_PROFIT BUY
При создании ордера вернется ответ, в зависимости от параметра newOrderRespType:
rest-api
Table of Contents generated with DocToc
Public Rest API for Binance (2021-08-12)
General API Information#
HTTP Return Codes#
Error Codes#
Sample Payload below:
General Information on Endpoints#
LIMITS
General Info on Limits#
IP Limits#
Order Rate Limits#
Data Sources
These are the three sources, ordered by which is has the most up-to-date response to the one with potential delays in updates.
Some endpoints can have more than 1 data source. (e.g. Memory => Database) This means that the endpoint will check the first Data Source, and if it cannot find the value it’s looking for it will check the next one.
Endpoint security type
SIGNED (TRADE and USER_DATA) Endpoint security
Timing security#
It is recommended to use a small recvWindow of 5000 or less! The max cannot go beyond 60,000!
SIGNED Endpoint Examples for POST /api/v3/order#
Key | Value |
---|---|
apiKey | vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A |
secretKey | NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j |
Parameter | Value |
---|---|
symbol | LTCBTC |
side | BUY |
type | LIMIT |
timeInForce | GTC |
quantity | 1 |
price | 0.1 |
recvWindow | 5000 |
timestamp | 1499827319559 |
Example 1: As a request body#
requestBody: symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
HMAC SHA256 signature:
curl command:
Example 2: As a query string#
queryString: symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
HMAC SHA256 signature:
curl command:
Example 3: Mixed query string and request body#
queryString: symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC
requestBody: quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
HMAC SHA256 signature:
curl command:
Note that the signature is different in example 3. There is no & between «GTC» and «quantity=1».
Public API Endpoints
Terminology#
These terms will be used throughout the documentation, so it is recommended especially for new users to read to help their understanding of the API.
ENUM definitions#
Symbol status (status):
Symbol type:
Order status (status):
Status | Description |
---|---|
NEW | The order has been accepted by the engine. |
PARTIALLY_FILLED | A part of the order has been filled. |
FILLED | The order has been completed. |
CANCELED | The order has been canceled by the user. |
PENDING_CANCEL | Currently unused |
REJECTED | The order was not accepted by the engine and not processed. |
EXPIRED | The order was canceled according to the order type’s rules (e.g. LIMIT FOK orders with no fill, LIMIT IOC or MARKET orders that partially fill) or by the exchange, (e.g. orders canceled during liquidation, orders canceled during maintenance) |
OCO Status (listStatusType):
Status | Description |
---|---|
RESPONSE | This is used when the ListStatus is responding to a failed action. (E.g. Orderlist placement or cancellation) |
EXEC_STARTED | The order list has been placed or there is an update to the order list status. |
ALL_DONE | The order list has finished executing and thus no longer active. |
OCO Order Status (listOrderStatus):
Status | Description |
---|---|
EXECUTING | Either an order list has been placed or there is an update to the status of the list. |
ALL_DONE | An order list has completed execution and thus no longer active. |
REJECT | The List Status is responding to a failed action either during order placement or order canceled |
ContingencyType
Order types (orderTypes, type):
More information on how the order types definitions can be found here: Types of Orders
Order Response Type (newOrderRespType):
Order side (side):
Time in force (timeInForce):
This sets how long an order will be active before expiration.
Status | Description |
---|---|
GTC | Good Til Canceled An order will be on the book unless the order is canceled. |
IOC | Immediate Or Cancel An order will try to fill the order as much as it can before the order expires. |
FOK | Fill or Kill An order will expire if the full order cannot be filled upon execution. |
Kline/Candlestick chart intervals:
Rate limiters (rateLimitType)
Rate limit intervals (interval)
General endpoints#
Test connectivity#
Test connectivity to the Rest API.
Weight: 1
Parameters: NONE
Data Source: Memory
Response:
Check server time#
Test connectivity to the Rest API and get the current server time.
Weight: 1
Parameters: NONE
Data Source: Memory
Response:
Exchange information#
Current exchange trading rules and symbol information
Weight: 10
Parameters:
There are 3 possible options:
If any symbol provided in either symbol or symbols do not exist, the endpoint will throw an error.
Data Source: Memory
Response:
Market Data endpoints#
Order book#
Weight: Adjusted based on the limit:
Limit | Weight |
---|---|
5, 10, 20, 50, 100 | 1 |
500 | 5 |
1000 | 10 |
5000 | 50 |
Parameters:
Name | Type | Mandatory | Description |
---|---|---|---|
symbol | STRING | YES | |
limit | INT | NO | Default 100; max 5000. Valid limits:[5, 10, 20, 50, 100, 500, 1000, 5000] |
Data Source: Memory
Response:
Recent trades list#
Weight: 1
Parameters:
Name | Type | Mandatory | Description |
---|---|---|---|
symbol | STRING | YES | |
limit | INT | NO | Default 500; max 1000. |
Data Source: Memory
Response:
Old trade lookup (MARKET_DATA)#
Weight: 5
Parameters:
Name | Type | Mandatory | Description |
---|---|---|---|
symbol | STRING | YES | |
limit | INT | NO | Default 500; max 1000. |
fromId | LONG | NO | TradeId to fetch from. Default gets most recent trades. |
Data Source: Database
Response:
Compressed/Aggregate trades list#
Get compressed, aggregate trades. Trades that fill at the time, from the same taker order, with the same price will have the quantity aggregated.
Weight: 1
Parameters:
Data Source: Database
Response:
Kline/Candlestick data#
Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.
Weight: 1
Parameters:
Data Source: Database
Response:
Current average price#
Current average price for a symbol.
Weight: 1
Parameters:
Name | Type | Mandatory | Description |
---|---|---|---|
symbol | STRING | YES |
Data Source: Memory
Response:
24hr ticker price change statistics#
24 hour rolling window price change statistics. Careful when accessing this with no symbol.
Weight: 1 for a single symbol; 40 when the symbol parameter is omitted
Parameters:
Data Source: Memory
Response:
Symbol price ticker#
Latest price for a symbol or symbols.
Weight: 1 for a single symbol; 2 when the symbol parameter is omitted
Parameters:
Data Source: Memory
Response:
Symbol order book ticker#
Best price/qty on the order book for a symbol or symbols.
Weight: 1 for a single symbol; 2 when the symbol parameter is omitted
Parameters:
Data Source: Memory
Response:
Account endpoints#
New order (TRADE)#
Send in a new order.
Weight: 1
Parameters:
Some additional mandatory parameters based on order type :
Data Source: Matching Engine