- Как создать криптовалютный дашборд с помощью Plotly и API Binance
- Как установить API Binance
- Настраиваем реальный API Binance
- Настраиваем тестовый API Binance
- Как получить данные с помощью API Binance
- Устанавливаем библиотеку python-binance
- Получаем информацию об аккаунте
- Получаем архивные данные
- Получаем данные в реальном времени
- Как создать дашборд с помощью Plotly
- Как создать API ключ для фьючерсов на бирже Binance?
- Вводная информация
- Binance Futures — что это? Общее описание
- Публичные запросы
- Проверка связи — /api/v1/ping
- Получение времени биржи — /api/v1/time
- Настройки и лимиты биржи — /api/v1/exchangeInfo
- Открытые ордера на бирже — /api/v1/depth
- Последние (чужие) сделки — /api/v1/trades
- Сжатая история сделок — /api/v1/aggTrades
- Данные по свечам – /api/v1/klines
- Статистика за 24 часа — /api/v1/ticker/24hr
- Последняя цена по паре (или парам) — /api/v3/ticker/price
- Лучшие цены покупки/продажи — /api/v3/ticker/bookTicker
- Преимущества и недостатки использования ботов
- Авторизованные запросы:
- Создание ордера — /api/v3/order
Как создать криптовалютный дашборд с помощью Plotly и API Binance
Упрощаем отслеживание активов
Как установить API Binance
Binance предоставляет два типа доступа к API: реальный и тестовый.
Настраиваем реальный API Binance
Реальный API обеспечивает прямой доступ к аккаунту. В нем будут отражены любые сделки, совершенные через этот API. Поэтому использовать его следует с осторожностью.
Для начала нужно зарегистрироваться на Binance.
После регистрации вам будет предложено установить двухфакторную аутентификацию (2FA). Вы также можете подключить ее самостоятельно в настройках безопасности.
Затем переходим во вкладку API Management в настройках. Вам будет предложено установить метки для ключей API. Эта функция пригодится тем, у кого есть несколько ключей, связанных с одним аккаунтом.
Указываем метки и нажимаем Create API. После этого нужно пройти аутентификацию еще раз. Затем отобразятся API Key и Secret Key. Скопируйте их в безопасное место. По умолчанию получить доступ к ключам можно следующим способом, который можно изменить:
Мы будем использовать ключи как реального, так и тестового API, чтобы понять, как с ними работать. С целью не засорять реальный аккаунт установим доступ только для чтения для ключей реального API:
Сохранять ключи реального API мы будем в файл secret.cfg , как показано ниже. Не забывайте, что нельзя ни с кем делиться этим файлом.
Настраиваем тестовый API Binance
Тестовый API Binance полностью имитирует взаимодействие с реальным API. Рекомендуем для начала повзаимодействовать с ним, чтобы убедиться в корректности работы приложения.
Для начала необходимо войти в систему: https://testnet.binance.vision/ (на данный момент вход поддерживается только с GitHub).
Затем нажмите на Generate HMAC_SHA256 Key (Сгенерировать ключ HMAC_SHA256) и снова укажите метки для ключей. Отобразившиеся после создания ключи также скопируйте в безопасное место. Все подробности о тестовом API можно прочитать на главной странице.
Теперь добавим ключи тестового API в файл secret.cfg , как показано ниже:
Мы успешно настроили ключи реального и тестового API и сохранили их в файле secret.cfg . Теперь можно переходить к получению данных.
Как получить данные с помощью API Binance
Устанавливаем библиотеку python-binance
Binance не предоставляет библиотеку Python для взаимодействия с API. Поэтому мы воспользуемся популярным сторонним инструментом под названием python-binance .
Устанавливаем python-binance с помощью следующей команды:
Получаем информацию об аккаунте
В этом разделе мы воспользуемся тестовым аккаунтом. По умолчанию в нем будет отображаться баланс различных криптовалют. У python-binance нет доступа к тестовому API, поэтому мы поменяем URL-адрес конечной точки.
Код ниже предоставляет информацию о тестовом аккаунте:
Мы получаем такие важные данные, как тип аккаунта ( accountType ), баланс, разрешение и прочие.
Теперь получим баланс ETH:
Библиотека python-binance предоставляет много возможностей. Подробную информацию о ней можно найти в документации.
Получаем архивные данные
Тестовый API выдает фиктивные архивные данные. Поэтому мы воспользуемся реальным API и его ключами.
Ниже показано, как получить стоимость ETH на Binance с самой ранней даты до текущего дня:
Вывод выше представляет следующие параметры, упомянутые в документации Binance API:
Преобразовываем полученные данные в датафрейм и сохраняем его как файл CSV:
Получаем данные в реальном времени
Чтобы передавать данные в реальном времени, можно воспользоваться WebSocket Binance. Вот как это сделать:
Ниже показано, как остановить потоковую передачу данных и закрыть WebSocket:
Итак, мы научились получать данные несколькими способами. Теперь можно переходить к созданию дашборда Plotly.
Как создать дашборд с помощью Plotly
В этом разделе мы создадим дашборд с помощью Plotly, который будет отслеживать криптовалютный портфель тестового аккаунта в реальном времени и изменять его общую стоимость в зависимости от получаемых данных.
Вот как будет выглядеть финальная версия дашборда. Детали внешнего вида можно изменить позднее:
В дашборд включены следующие функции:
- Индикатор: общая стоимость портфеля в USDT.
- Индикатор: общая стоимость портфеля в BTC.
- Индикатор: конвертация BNB/USDT.
- Круговая диаграмма: распределение портфеля (в USDT).
- Столбчатая диаграмма: распределение токенов.
Теперь рассмотрим код.
- Импортируем все необходимые библиотеки:
2. Прочитываем все ключи, устанавливаем соединение и получаем информацию об аккаунте:
3. Определяем функции, которые будут обрабатывать потоковые данные и рассчитывать показатели на их основе:
4. Начинаем передавать данные в реальном времени:
5. Определяем макет, графики и хостинг:
Вот и все! Этот код позволяет отслеживать криптовалютный портфель тестового аккаунта. Его можно с легкостью настроить и для реального аккаунта без изменения URL-адреса конечной точки.
Весь код можно найти в репозитории на GitHub.
Источник
Как создать 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())
(Или возьмите с гитхаба)
После этого код можно запускать. К примеру, если вы только установили Python и не знаете, что делать, найдите редактор Idle (он устанавливается вместе с питоном), в нем File -> Open, откройте файл binance_test.py и нажмите F5. Код, представленный выше, вернет информацию по вашему аккаунту — подробности ниже.
Еще немного общей информации: практически во всех подписанных запросах необходимо указывать параметр 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
symbol — непосредственно пара status — TRADING -разрешена торговля baseAsset — базовая валюта baseAssetPrecision — требуемое количество символов базовой валюты после запятой при создании ордера (для цены и количества) quoteAsset — квотируемая валюта quotePrecision — требуемое количество символов квотируемой валюты после запятой при создании ордера (для цены и количества) «orderTypes»: [ «LIMIT», «LIMIT_MAKER», «MARKET», «STOP_LOSS_LIMIT», «TAKE_PROFIT_LIMIT» ] — допустимые виды ордеров по паре icebergAllowed — разрешено ли создание айсбергов (ордеров с невидимой частью) filters — ограничение ордеров PRICE_FILTER — ограничение цены создаваемого ордера. Цена ордера должна быть в диапазоне min_price и max_price, и шаг торговли должен быть кратен tickSize. Да да, тут нельзя ставить ордера с произвольной ценой. LOT_SIZE — ограничение объема создаваемого ордера. Объем должен быть в диапазоне minQty и maxQty, и быть кратен stepSize. MIN_NOTIONAL — итоговая сумма ордера (объем*цена) должна быть выше minNotional. Код для проверки:
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’ ))
Преимущества и недостатки использования ботов
Основные плюсы работы с торговыми ботами для Бинанс:
- Это полезно для рынка в целом. Эксперты признают, что автоматизированные системы делают рынок более эффективным, инклюзивным и здоровым. Благодаря массовому использованию ботов, в последние годы значительно сократился ценовой спред на бирже.
- Бот работает всегда, даже когда человек спит. Таким образом не теряется ни минуты времени для прибыльной торговли.
- Роботы избавляют от рутины. Ни один человек не сможет выдержать монотонное совершение однотипных действий месяцами.
- Высокая точность входа и выхода из позиций.
- Отсутствие эмоций, которые иногда заставляют трейдера совершать необдуманные поступки.
- Большая ликвидность, создаваемая в результате торговли ботами, привлекает в индустрию новые лица и компании.
К недостаткам можно отнести следующие моменты:
- Бот не на 100% самостоятелен, он все равно нуждается в наблюдении и настройке. Для этого нужны определенные технические и финансовые познания.
- Качество торговли напрямую зависит от качества алгоритмов, то есть профессионализма команды разработчиков робота.
- Потенциальные слабые места в безопасности. Если блокчейн для хакеров практически неуязвим, то боты и другое ПО могут быть подвержены взломам.
Теперь рассмотрим несколько торговых ботов, которые могут работать в связке с криптовалютной биржей 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:
Источник