Главная » Ошибки » binance-api-postman from binance – Coder Social

binance-api-postman from binance – Coder Social

binance-api-postman’s People

Настройка бот Binance

Настроек не так много, в API_KEY и API_SECRET нужно прописать ключи, которые вы получили на бирже.
В пары нужно прописать соответственно пары, на которые планируете торговать, максимальную сумму, которую планируете тратить, и желаемый процент прибыли. С этим есть некоторый момент, т.к. вы платите комисиию BNB. Я советую ставить 0.003 (0.3%) и выше, но если у вас есть возможность дешево получать BNB, то можно и меньше.
BUY_LIFE_TIME_SEC – через сколько отменять ордер на покупку (если он не исполнен), в секундах.
STOCK_FEE – комиссия биржи, если вдруг решите торговать без BNB.
USE_BNB_FEES = True – если торгуете с BNB, False – в противном случае.
Источник:

Contributors

2pd avatar
adderall-prozac avatar
aisling11 avatar
ammarbrohi avatar
arturogamrod avatar
chairz avatar
chairz-2 avatar
ishuen avatar
jonte-z avatar
maks1m avatar
maxwelljoslyn avatar
qiyu1030 avatar
tantialex avatar

Stargazers

 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar

How do I get started with the Binance API?

Sign up with Binance

The first step is to create an account with Binance. You only need to enter your email and create a password – https://accounts.binance.com/en/register

Optionally, if you’re interested in using a Referral ID, you can use ZCYOCDMQ to receive a 10% discount off your trading fees.

That’s my Referral ID, thanks for supporting me! – Jignesh

You will be asked if you want to enable two-factor authentication for additional security. We highly recommend that you do. If you’ve never used it before, you will need to install Google Authenticator.

There are tutorials on getting started on things like your first deposit and much more on Binance Academy.

Obtaining an API key

After logging in to your Binance account, click on the profile icon on the top right-hand side of the screen. From there, select API Management.

Next, you will be asked to create a label for the API key. If you plan to create multiple keys, it’s a good idea to use a descriptive name here so that you can easily distinguish it later on.

If you have two-factor authentication enabled, you will be asked to authenticate once again at this point.

Binance will send you an email to confirm the API key creation. Click on the confirmation link from your confirmation email to proceed.

Your API key should be created at this point. Note that this is the only time your API secret will be revealed. If you navigate away from this screen, you will not be able to see it again.

In such a scenario, you will need to delete your API key and start over again by creating a new one.

Guard your API details as you would with any password as anyone can get access to your account if they were able to get a hold of this information.

Before moving forward, there are a few settings here that we need to take a look at.

The Read Only option is selected by default, and you likely won’t be able to uncheck it.

This permits the API to read your account details and is enabled by default. Perhaps it is a bit misleading since it includes the term Only, but you can still perform other operations with this option checked.

There is also an option to Enable Trading, Enable Withdrawals, and Enable Future.

If you’re still testing out the API, it might be a good idea to leave these unchecked. If you’re ready to start trading, then check off the Enable Trading box and the Enable Future box if you plan to trade futures.

For some people, the Enable Future box won’t be shown here. That means the account is not set up for trading futures.

Note: if the Enable Futures box is shown, you should still set up your futures account first before attempting to create an API key (if you plan to trade futures). Otherwise, it may lead to API authentication errors.

It is easy to setup Futures trading on your account if it is not already enabled. From the main Binance login page, click on the Derivatives option in the top menu bar.

From there, click on Futures which should take you to the Futures trading screen. There should be an option on that page to open a Futures account.

If you plan to make withdrawals from within your Python trading script, you will need to enable it. To do so, you have to specify the IP address from where the script will be accessing the API. This is for security purposes.

If you intend on running your script from a virtual private server such as AWS, this shouldn’t be a big problem. However, if you are running the script from your local machine, you could run into issues as most internet service providers do not offer static IP addresses.

There are third-party solutions, such as noip.com that provide a way around not having a static IP.

Installing the python-binance library

The easiest way to install the python-binance library is to use pip. From the command line, simply type:

pip install python-binance

Securing your API keys

We recommend storing your API keys as environment variables. That way, if you upload your code to GitHub, or send it to someone, you don’t run at the risk of revealing your credentials.

This can be done via the command prompt. Here is the syntax for Windows users.

set binance_api=your_api_key_here
set binance_secret=your_api_secret_here

You can verify that the keys are saved right from the command prompt by launching Python. Here is an example:

And this is how you can store environment variables on a Mac or in a Linux environment using the terminal.

Syntax:

export binance_api=”your_api_key_here”
export binance_secret=”your_api_secret_here”

Example:

We can later retrieve these values from within our Python trading script by using the os library.

Why should I use the Binance API?

Binance has established itself as a market leader when it comes to cryptocurrency trading. It currently ranks number one for Bitcoin volume according to coinmarketcap.com and ranks well for many other currencies.

Commissions are very competitive and you may be hard-pressed to find another exchange with lower fees.

Lastly, Binance has a good track record of security. There have only been a few instances of Binance getting hacked which is something that all exchanges are susceptible to due to the nature of the business.

The most important part, when Binance got hacked in 2019, and more than $40 million was stolen, Binance covered the users that were impacted.

How do I retrieve my account balance using the Binance API?

Now that we’ve installed the library and obtained API keys, it’s time to test out a connection to the API. We will start up a client and check out four functions that detail different account balances.

import os

from binance.client import Client

We start with our imports. We will need the Client class from the python-binance library as well as the os library to retrieve the API keys that we stored as environment variables.

# init
api_key = os.environ.get(‘binance_api’)
api_secret = os.environ.get(‘binance_secret’)

Next, we store our API key and secret to local variables.

client = Client(api_key, api_secret)

And finally, we initialize our client and pass through the API key and secret. We are all set to start accessing the API at t his point.

Unfortunately, the python-binance library does not have support for the demo environment previously discussed. However, we were able to connect by manually changing the API endpoint URL in the library like this:

client.API_URL = ‘https://testnet.binance.vision/api’

If you decide to start with the demo API, make sure you are passing through your Test Network API credentials when initializing the Client and not the live API keys.

# get balances for all assets & some account information
print(client.get_account())

The above code will print out all of our account details for every currency available on the platform. It will also provide some other info such as the current commission rate and if your account is enabled for margin trading.

This might be a bit too much information. If we are only interested in our BTC balance, we can use another endpoint.

# get balance for a specific asset only (BTC)
print(client.get_asset_balance(asset=’BTC’))

If you’re after the balance details of another asset, simply switch out BTC with the asset you are after.

# get balances for futures account
print(client.futures_account_balance())

Account balances for futures accounts are separate from the main balance and therefore require a different endpoint.

Similarly, margin account details are separated as well. Here is how you can access your margin account. Note that an exception will be raised if you have not activated a margin account.

# get balances for margin account
print(client.get_margin_account())

If you’re not familiar with margin trading, you can check out the Binance guide: What is Margin Trading for more details and the Binance Margin Trading Guide for setup instructions.

What are the alternatives to using the Binance API?

Coinmarketcap has more than 300 exchanges listed in its database, and many of them offer an API. So there isn’t a shortage of alternatives.

Some of the names that stand out from their list as well-established exchanges include Coinbase, Kraken, Bitfinex, Bitstamp, and Bittrex.

Futures traders may also want to take a look at Bitmex which is a popular exchange with competitive commissions. They even pay you for certain order types rather than charging a trading fee.

» Before you run your strategies, you need data to design and backtest them. Quandl provides (mostly) free data that can be useful.

Here is a guide: Quandl: A Step-by-Step Guide

(Yes, Quandl has crypto data such as this and this)

Watchers

 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar
 avatar

Why shouldn’t I use the Binance API?

While security is a big plus point for Binance when it comes to exchanges, there are better alternatives, depending on your needs.

If your primary interest is trading Bitcoin, you might be better off trading Bitcoin futures with a regulated broker like Interactive Brokers for example.

The benefit of a regulated broker is that they have insurance schemes in place to protect the consumer.

If trading futures is not your thing, there are several regulated brokers that offer CFD trading on cryptocurrencies which can be a good alternative.

It should be noted that these options don’t have nearly as extensive of an offering as Binance. And in most cases, the trading fees are significantly higher.

Another challenge with API trading at Binance is that API changes occur often.

API changes are generally a good thing. It means the exchange is trying to update and improve their infrastructure (most of the time).

However, this involves keeping a close eye on Binance’s API announcements and updating our trading algorithms as required. Not all changes will lead to our code breaking, but some of them certainly can.

There are also outages. In late 2020, Binance took its API offline roughly once a month for a few hours each time for planned updates. This requires manual intervention and additional position management for algo traders.

In early 2021, amidst a surge in crypto prices, Binance experienced outages during volatile times due to an influx of new users signing up and a sharp rise in trading volume.

Binance CEO Changpeng Zhao, better known as CZ, has commented several times that outages are normal in a growing industry such as crypto, and that users should expect it could happen again in the future.

Вводная информация

В отличии от многих других бирж, Binance лимитирует не только количество запросов к API, но и «вес» запросов. Причем, это не какие-то фиксированные единицы, но целый комплекс (как они заявляют, англ). Например, если вы постоянно запрашиваете свечи но не торгуете, то ваш вес накапливается и вас могут забанить. И вообще они суровые — если вы постоянно перебиваете лучшую цену на минимальную ставку, или создаете/отменяете ордера но не покупаете и продаете и т.п. то вас настигнут санкции. Так что будьте аккуратны при тестировании ботов. Впрочем, пока я тестировал, ничего плохого не случилось, хотя я порой и жестил.

Если биржа захочет вам намекнуть, что пора бы снизить пыл, она вернет 429 ответ сервера. Если вы будете игнорировать этот ответ и ломиться в закрытую дверь, то вас забанят по IP на срок от 2 минут до 3 дней.

Подключение к API биржи идет через https://api.binance.com, для авторизованных запросов нужно отправлять ключ в заголовке X-MBX-APIKEY, и подписывать тело запроса SHA256.

Что бы вы не заморачивались с этим, я написал код, который позволяет все указанные запросы выполнять. Для его работы нужно установить Python версии 3.6+ с официального сайта, потом в командной строке выполнить pip install requests. Создайте папку (для удобства), создайте новый файл binance_api.py, и вставьте туда этот код:

import ssl import time import json import urllib import hmac, hashlib import requests from urllib.parse import urlparse, urlencode from urllib.request import Request, urlopen class Binance(): methods = { # public methods ‘ping’: {‘url’:’api/v1/ping’, ‘method’: ‘GET’, ‘private’: False}, ‘time’: {‘url’:’api/v1/time’, ‘method’: ‘GET’, ‘private’: False}, ‘exchangeInfo’: {‘url’:’api/v1/exchangeInfo’, ‘method’: ‘GET’, ‘private’: False}, ‘depth’: {‘url’: ‘api/v1/depth’, ‘method’: ‘GET’, ‘private’: False}, ‘trades’: {‘url’: ‘api/v1/trades’, ‘method’: ‘GET’, ‘private’: False}, ‘historicalTrades’: {‘url’: ‘api/v1/historicalTrades’, ‘method’: ‘GET’, ‘private’: False}, ‘aggTrades’: {‘url’: ‘api/v1/aggTrades’, ‘method’: ‘GET’, ‘private’: False}, ‘klines’: {‘url’: ‘api/v1/klines’, ‘method’: ‘GET’, ‘private’: False}, ‘ticker24hr’: {‘url’: ‘api/v1/ticker/24hr’, ‘method’: ‘GET’, ‘private’: False}, ‘tickerPrice’: {‘url’: ‘api/v3/ticker/price’, ‘method’: ‘GET’, ‘private’: False}, ‘tickerBookTicker’: {‘url’: ‘api/v3/ticker/bookTicker’, ‘method’: ‘GET’, ‘private’: False}, # private methods ‘createOrder’: {‘url’: ‘api/v3/order’, ‘method’: ‘POST’, ‘private’: True}, ‘testOrder’: {‘url’: ‘api/v3/order/test’, ‘method’: ‘POST’, ‘private’: True}, ‘orderInfo’: {‘url’: ‘api/v3/order’, ‘method’: ‘GET’, ‘private’: True}, ‘cancelOrder’: {‘url’: ‘api/v3/order’, ‘method’: ‘DELETE’, ‘private’: True}, ‘openOrders’: {‘url’: ‘api/v3/openOrders’, ‘method’: ‘GET’, ‘private’: True}, ‘allOrders’: {‘url’: ‘api/v3/allOrders’, ‘method’: ‘GET’, ‘private’: True}, ‘account’: {‘url’: ‘api/v3/account’, ‘method’: ‘GET’, ‘private’: True}, ‘myTrades’: {‘url’: ‘api/v3/myTrades’, ‘method’: ‘GET’, ‘private’: True}, # wapi ‘depositAddress’: {‘url’: ‘wapi/v3/depositAddress.html’, ‘method’:’GET’, ‘private’:True}, ‘withdraw’: {‘url’: ‘wapi/v3/withdraw.html’, ‘method’:’POST’, ‘private’:True}, ‘depositHistory’: {‘url’: ‘wapi/v3/depositHistory.html’, ‘method’:’GET’, ‘private’:True}, ‘withdrawHistory’: {‘url’: ‘wapi/v3/withdrawHistory.html’, ‘method’:’GET’, ‘private’:True}, ‘assetDetail’: {‘url’: ‘wapi/v3/assetDetail.html’, ‘method’:’GET’, ‘private’:True}, ‘tradeFee’: {‘url’: ‘wapi/v3/tradeFee.html’, ‘method’:’GET’, ‘private’:True}, ‘accountStatus’: {‘url’: ‘wapi/v3/accountStatus.html’, ‘method’:’GET’, ‘private’:True}, ‘systemStatus’: {‘url’: ‘wapi/v3/systemStatus.html’, ‘method’:’GET’, ‘private’:True}, ‘assetDust’: {‘url’: ‘sapi/v1/asset/dust’, ‘method’:’POST’, ‘private’:True}, ‘dustLog’: {‘url’: ‘wapi/v3/userAssetDribbletLog.html’, ‘method’:’GET’, ‘private’:True}, ‘assetAssetDividend’: {‘url’: ‘sapi/v1/asset/assetDividend’, ‘method’:’GET’, ‘private’:True}, #sapi ‘marginTransfer’: {‘url’: ‘sapi/v1/margin/transfer’, ‘method’: ‘POST’, ‘private’:True}, ‘marginLoan’: {‘url’: ‘sapi/v1/margin/loan’, ‘method’: ‘POST’, ‘private’: True}, ‘marginLoanGet’: {‘url’: ‘sapi/v1/margin/loan’, ‘method’: ‘GET’, ‘private’: True}, ‘marginRepay’: {‘url’: ‘sapi/v1/margin/repay’, ‘method’: ‘POST’, ‘private’: True}, ‘marginRepayGet’: {‘url’: ‘sapi/v1/margin/repay’, ‘method’: ‘GET’, ‘private’: True}, ‘marginCreateOrder’: {‘url’: ‘sapi/v1/margin/order’, ‘method’: ‘POST’, ‘private’:True}, ‘marginCancelOrder’: {‘url’: ‘sapi/v1/margin/order’, ‘method’: ‘DELETE’, ‘private’:True}, ‘marginOrderInfo’: {‘url’: ‘sapi/v1/margin/order’, ‘method’: ‘GET’, ‘private’:True}, ‘marginAccount’: {‘url’: ‘sapi/v1/margin/account’, ‘method’: ‘POST’, ‘private’:True}, ‘marginOpenOrders’: {‘url’: ‘sapi/v1/margin/openOrders’, ‘method’: ‘GET’, ‘private’:True}, ‘marginAllOrders’: {‘url’: ‘sapi/v1/margin/allOrders’, ‘method’: ‘GET’, ‘private’:True}, ‘marginAsset’: {‘url’: ‘sapi/v1/margin/asset’, ‘method’: ‘POST’, ‘private’:True}, ‘marginPair’: {‘url’: ‘sapi/v1/margin/pair’, ‘method’: ‘POST’, ‘private’:True}, ‘marginPriceIndex’: {‘url’: ‘sapi/v1/margin/priceIndex’, ‘method’: ‘POST’, ‘private’:True}, ‘marginMyTrades’: {‘url’: ‘sapi/v1/margin/myTrades’, ‘method’: ‘GET’, ‘private’:True}, ‘marginMaxBorrowable’: {‘url’: ‘sapi/v1/margin/maxBorrowable’, ‘method’: ‘GET’, ‘private’:True}, ‘marginmaxTransferable’: {‘url’: ‘sapi/v1/margin/maxTransferable’, ‘method’: ‘GET’, ‘private’:True}, #futures ‘futuresExchangeInfo’: {‘url’: ‘fapi/v1/exchangeInfo’, ‘method’: ‘GET’, ‘private’: False, ‘futures’: True}, ‘futuresKlines’: {‘url’: ‘fapi/v1/klines’, ‘method’: ‘GET’, ‘private’: False, ‘futures’: True}, ‘futuresCreateOrder’: {‘url’: ‘fapi/v1/order’, ‘method’: ‘POST’, ‘private’: True, ‘futures’: True}, ‘futuresAccount’: {‘url’: ‘fapi/v1/account’, ‘method’: ‘POST’, ‘private’: True, ‘futures’: True}, ‘futuresBalance’: {‘url’: ‘fapi/v1/balance’, ‘method’: ‘GET’, ‘private’: True, ‘futures’: True}, ‘futuresSymbolPriceTicker’: {‘url’: ‘fapi/v1/ticker/price’, ‘method’: ‘GET’, ‘private’: True, ‘futures’: True}, ‘futuresOrderInfo’: {‘url’: ‘fapi/v1/order’, ‘method’: ‘GET’, ‘private’: True, ‘futures’: True}, ‘futuresCancelOrder’: {‘url’: ‘fapi/v1/order’, ‘method’: ‘DELETE’, ‘private’: True, ‘futures’: True}, } def __init__(self, API_KEY, API_SECRET): self.API_KEY = API_KEY self.API_SECRET = bytearray(API_SECRET, encoding=’utf-8′) self.shift_seconds = 0 def __getattr__(self, name): def wrapper(*args, **kwargs): kwargs.update(command=name) return self.call_api(**kwargs) return wrapper def set_shift_seconds(self, seconds): self.shift_seconds = seconds def call_api(self, **kwargs): command = kwargs.pop(‘command’) base_url =’https://api.binance.com/’ if self.methods[command].get(‘futures’): base_url = ‘https://fapi.binance.com/’ api_url = base_url + self.methods[command][‘url’] payload = kwargs хедерs = {} payload_str = urllib.parse.urlencode(payload) if self.methods[command][‘private’]: payload.update({‘timestamp’: int(time.time() + self.shift_seconds — 1) * 1000}) payload_str = urllib.parse.urlencode(payload).encode(‘utf-8’) sign = hmac.new( key=self.API_SECRET, msg=payload_str, digestmod=hashlib.sha256 ).hexdigest() payload_str = payload_str.decode(«utf-8») + «&signature=»+str(sign) хедерs = {«X-MBX-APIKEY»: self.API_KEY, «Content-Type»:»application/x-www-form-urlencoded»} if self.methods[command][‘method’] == ‘GET’ or self.methods[command][‘url’].startswith(‘sapi’): api_url += ‘?’ + payload_str response = requests.request(method=self.methods[command][‘method’], url=api_url, data=»» if self.methods[command][‘method’] == ‘GET’ else payload_str, хедерs=хедерs) if ‘code’ in response.text: raise Exception(response.text) return response.json()

Читайте также:  Технический анализ криптовалют. Какие существуют методы

Для тестирования методов, создайте в этой же папке второй файл, например, 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. Но, думаю, это мало кому понадобится.


курсы валют через Power Query
курсы валют через Power Query
курсы валют через Power Query
курсы валют через Power Query
курсы валют через Power Query
курсы валют через Power Query
курсы валют через Power Query

Публичные запросы

Проверка связи — /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 Возвращает словарь с текущим временем:

{ «serverTime»: 1499827319559 }

Код для проверки:

from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.time())

Читайте также:  Профессиональный обзор на криптовалютную биржу CoinEx: отзывы пользователей о трейдинге

Настройки и лимиты биржи — /api/v1/exchangeInfo

Ссылка для просмотра в браузере https://api.binance.com/api/v1/exchangeInfo Вес — 1 Возвращает структуру данных:

{ «timezone»: «UTC», «serverTime»: 1508631584636, «rateLimits»: [{ «rateLimitType»: «REQUESTS», «interval»: «MINUTE», «limit»: 1200 }, { «rateLimitType»: «ORDERS», «interval»: «SECOND», «limit»: 10 }, { «rateLimitType»: «ORDERS», «interval»: «DAY», «limit»: 100000 } ], «exchangeFilters»: [], «symbols»: [{ «symbol»: «ETHBTC», «status»: «TRADING», «baseAsset»: «ETH», «baseAssetPrecision»: 8, «quoteAsset»: «BTC», «quotePrecision»: 8, «orderTypes»: [«LIMIT», «MARKET»], «icebergAllowed»: false, «filters»: [{ «filterType»: «PRICE_FILTER», «minPrice»: «0.00000100», «maxPrice»: «100000.00000000», «tickSize»: «0.00000100» }, { «filterType»: «LOT_SIZE», «minQty»: «0.00100000», «maxQty»: «100000.00000000», «stepSize»: «0.00100000» }, { «filterType»: «MIN_NOTIONAL», «minNotional»: «0.00100000» }] }] }

Ключ rateLimits ведет на массив с лимитами — сколько запросов в секунду/минуту/день можно делать. Ключ symbols содержит настройки для каждой пары — рассмотрим одну, ETHBTC

{ «symbol»: «ETHBTC», «status»: «TRADING», «baseAsset»: «ETH», «baseAssetPrecision»: 8, «quoteAsset»: «BTC», «quotePrecision»: 8, «orderTypes»: [ «LIMIT», «LIMIT_MAKER», «MARKET», «STOP_LOSS_LIMIT», «TAKE_PROFIT_LIMIT» ], «icebergAllowed»: true, «filters»: [ { «filterType»: «PRICE_FILTER», «minPrice»: «0.00000100», «maxPrice»: «100000.00000000», «tickSize»: «0.00000100» }, { «filterType»: «LOT_SIZE», «minQty»: «0.00100000», «maxQty»: «100000.00000000», «stepSize»: «0.00100000» }, { «filterType»: «MIN_NOTIONAL», «minNotional»: «0.00100000» } ] }

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 Возвращает значения:

{ «lastUpdateId»: 1027024, «bids»: [ [ «4.00000000», // PRICE «431.00000000», // QTY [] // Ignore. ] ], «asks»: [ [ «4.00000200», «12.00000000», [] ] ] }

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»: 28457, «price»: «4.00000100», «qty»: «12.00000000», «time»: 1499865549590, «isBuyerMaker»: true, «isBestMatch»: true } ]

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) Возвращает данные:

Читайте также:  Exmo — обзор биржи. Как на ней торговать? Особенности работы

[ { «a»: 26129, // tradeId строки «p»: «0.01633102», // Цена «q»: «4.70443515», // Количество «f»: 27781, // Первая tradeId «l»: 27781, // Последняя tradeId «T»: 1498793709153, // Время «m»: true, // Was the buyer the maker? «M»: true // Was the trade the best price match? } ]

Пример кода:

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 не указан, возвращаются данные по всем парам. В этом случае, считается, что вы сделали столько запросов к бирже, сколько вернулось пар. Пример ответа:

{ «symbol»: «BNBBTC», // пара «priceChange»: «-94.99999800», // изменение цены за сутки «priceChangePercent»: «-95.960», // изменение цены за сутки % «weightedAvgPrice»: «0.29628482», //Средневзвешенная цена «prevClosePrice»: «0.10002000», // Предыдущая цена закрытия «lastPrice»: «4.00000200», // Последняя цена «lastQty»: «200.00000000», // Последний объем «bidPrice»: «4.00000000», // Цена покупки «askPrice»: «4.00000200», // Цена продажи «openPrice»: «99.00000000», // Цена открытия «highPrice»: «100.00000000», // Самая высокая цена «lowPrice»: «0.10000000», // Самая низкая цена «volume»: «8913.30000000», // Объем торгов базовой валюты «quoteVolume»: «15.30000000», // Объем торгов квотируемой «openTime»: 1499783499040, // Время открытия «closeTime»: 1499869899040, // Время закрытия «fristId»: 28385, // Id первой сделки «lastId»: 28460, // Id последней сделки «count»: 76 // Кол-во сделок }

Если пар несколько, то такие словари вкладываются в массив, вот так:

[ { «symbol»: «BNBBTC», … }, { «symbol»: «LTCBTC», … }, ]

Пример кода:

from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/24hr’, bot.ticker24hr( symbol=’BNBBTC’ ))

Are there any Python libraries available for the Binance API?

There are several third-party libraries available, the most popular is python-binance.

There is an interesting story on how this library came to be the most popular Python library for Binance.

When Binance launched in 2017, they held a contest to see who can come up with the best library for various different programming languages. The winners were each rewarded 1000 Binance coins (BNB). 

At the time of the contest, BNB was trading below $2 but it surged to a high $691 in the first half of 2021!

There were several good submissions for the Python category but python-binance ultimately won.

This was a clever approach to ensure the best developers worked hard to create a good library. 

Another popular library is CCXT. This library supports over a hundred different exchanges and is available in many different programming languages.

A third and perhaps lesser known option is Binance Connector which appears like it could be an official library as it is hosted under Binance’s Github page. There is also a recommendation and link to it in the Binance API documentation.

CCXT is a good option if you plan to trade on multiple exchanges, or want the flexibility of switching to another exchange down the road without having to fully relearn another library.

The advantage to Python Binance is that a lot of people use it so it’s easy to get support and help from other users.

Lastly, Binance connector seems like it is often updated and a great library all around. The downside, however, is that the learning curve for it might be steep as there isn’t a lot of documentation or usage examples available for it.

How can I retrieve the latest price for Bitcoin?

There are several methods to get the latest price for Bitcoin. The simplest one involves using the get_symbol_ticker function.

You can pass through any ticker here as opposed to BTCUSDT if you’re after another asset.

# get latest price from Binance API
btc_price = client.get_symbol_ticker(symbol=”BTCUSDT”)
# print full output (dictionary)
print(btc_price)

The code above will print out a dictionary that contains the symbol and the price. Here is an example output – 

{‘symbol’: ‘BTCUSDT’, ‘price’: ‘9678.08000000’}

We can access just the price as follows.

print(btc_price[“price”])

In a live Python trading script, we would likely need up to date price information for the asset that we are trading. Fortunately, there is a better solution than constantly making requests to the API. It involves using Binance WebSocket.

Using the Binance WebSocket for the latest Bitcoin price

The Binance WebSocket requires us to only send a command once to open up a stream, and then data will automatically stream over as prices get updated.

from time import sleep

from binance import ThreadedWebsocketManager

We need to import the ThreadedSocketManager to use this function, along with the sleep function from the time module.

btc_price = {‘error’:False}

Next we will create a dictionary that will hold our latest price data and also let us known if there is a problem with the websocket.

def btc_trade_history(msg):
”’ define how to process incoming WebSocket messages ”’
if msg[‘e’] != ‘error’:
print(msg[‘c’])
btc_price[‘last’] = msg[‘c’] btc_price[‘bid’] = msg[‘b’] btc_price[‘last’] = msg[‘a’] btc_price[‘error’] = False
else:
btc_price[‘error’] = True

Then, we will create a function that will tell the socket manager what to do when it receives new data.

For now, we will just print the last closing price to the screen.

We are also storing a few items to the dictionary file that we created earlier. This allows us to access the data outside the function and this is how you would typically access websocket data from your main trading script.

Aside from the latest price, bid, and ask, we also have error checking built in. This will let us know if there is an error with the Binance WebSocket, in which case we will need to restart it.

A latter example involving the websocket expands on the error checking part.

You may have noticed that Binance doesn’t use full variable names. IE the close price comes over the websocket in a variable called ‘c’ rather than ‘close’. Binance probably did this to keep the overall size of the message minimal in an attempt to boost communication speed.

If you’re ever trying to program a new websocket connection and are unsure what the variables stand for, check out the Binance API documentation. They have a detailed explanation of what each component of the websocket message is used for.

# init and start the WebSocket
bsm = ThreadedWebsocketManager()
bsm.start()

The next step is to initialize the socket manager. When we do that, the library will create a new thread which we’ve started in the code snippet above.

# subscribe to a stream
bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol=’BTCUSDT’)

We will call the start_symbol_ticker_socket which has similar output to the get_symbol_ticker function of the API that we discussed earlier.

We need to pass through a symbol, which in this case is BTCUSDT. We also specify it to call our custom btc_trade_history function every time a new message comes in.

If you’re following along, you should see a stream of prices on your screen if you run the above code. It should look similar to the Trade History box that is on the Binance webpage under the spot trading section.

In a live Python trading script, you will access the data from the dictionary file outside the function as opposed to printing the data to screen from the function.

Binance has several websocket streams and we can easily add more.

bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol=’ETHUSDT’)

The code snippet above subscribes to the ticker price for ETHUSDT. We kept the callback as btc_trade_history. That means when a new message arrives for ETHUSDT, it will get handled by the same btc_trade_history function we created.

This is just for example purposes, to show how you can easily add more streams. You can choose to create a separate function for other streams if need be.

When you’re done with the WebSocket, use the following syntax to properly terminate it:

# stop websocket
bsm.stop()

The WebSocket can deliver various data. To get a full view of what is available, type the following in your Python terminal.

help(ThreadedWebsocketManager)

This will list all the different methods available as well as give some information about the returned data.

Here is an example for the start_symbol_ticker_socket:

As you can see it gives a brief description, a link to the official Binance documentation about that function, and some details about the returned data.

This is another way to figure out that msg[‘b’] returns the best bid, besides checking the documentation.

Forkers

adderall-prozac

donaldww

carlosalejandromiranda

purplefox-blockchain

a791508825

stacyalt

m92972311

davithuroyan

huobiwangyuzhi

satoshinakamoto007

heiyevip

mervynrwtw

andme0623

phonbopit

mcunni

helpme67

aak-dev

nitro813

sinan2aydin

alipjx

fghcdp

bachpx195

bornin66

koradiya-kaushal

yuki1030

maxwelljoslyn

lesteryehgood

growboxpa

oweeks123

nirvananimbusa

broodj3kaas

notadevelopr

adamhanafi

sdgoh

florienzh4x

aduraline

amithossein

ammarbrohi

jash90

pikob

dotkt

kunderian

kimiko88

thangbk111

knwins

andreaxe

azakeri

2pd

whocoded

lochy89

jmrezaee

oliveiraallex

replytojain

alexquang

andyshenas

zafergurkan

yangfan0095

wdcpclover

maitdaddy

hsm-yixuan

blockchain-tc

almapab

tbourass

sumonst21

sandbagger

danielmathiesen

jonathandotbz

baany

reynholds

sagar117

sharma-rajat

sechibueze

cferrer101

m0ckupc0de

kaziq1988

alexvnsky

abjox

marcoscurvello

menuc

giovanni-orciuolo

aadorian

yakejiao

tchanxx

tradeon061

mendesbarreto

karunais13

chairz

dosrd

gomesmatheuss

yuma300

h4ppysmile

vvsuperman

isaozler

m0exn

bigvava

khssnv

magjack

joaopfsilva

piterskiy

pipijua

binance-api-postman’s Issues

Sockets answers empty even when ACCOUNT_UPDATE action is occured

Hello, I’m using non-standart language and communicate with HTTP by plain хедерs. I’m wanted to get some futures methods info (for example positionRisk) via sockets, but gets an empty answer even my balance is changing (I have some futures open orders). I’m sending the following хедерs to the server:

GET /ws/L7Awe0UboTNATaoiutuz9lSZg6wRYO1A1PquzoS4SjIg8Cq2lRsabadIQcYlFWI9 HTTP/1.1rn
Host: stream.binance.comrn
Accept: */*rn
Connection: Upgradern
Upgrade: WebSocketrn
Pragma: no-cachern
Sec-WebSocket-Version: 13rn
Sec-WebSocket-Key: 6DLUcxfnOxFAet7PJDrXYg==rn
rn
rn

And getting the correct answer хедерs, but answer body is empty.

HTTP/1.1 101 Switching Protocols
Date: Fri, 28 May 2021 14:26:44 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: KFe2yYd1Hu9qNmIaaZR56apFrCQ=

I’m tried both of the endpoints to generate listen key (fapi/v1/listenKey and api/v3/userDataStream) and with testnet too with no luck.

What it can be, because, for example, pairs trade info (/[email protected]_1m) working good?

Thanks.

Problem to import files

I’m getting Error while importing: format not recognized

Postman version: v7.23.0

Any idea?

Academy link is down

This link is break in the README.md:
https://academy.binance.com/economics/binance-api-series-pt-1-spot-trading-with-postman

Источники

  • https://qwazer.ru/birzhi/binance-api-russkoe-opisanie.html
  • https://coder.social/binance/binance-api-postman
  • https://algotrading101.com/learn/binance-python-api-guide/
[свернуть]
Решите Вашу проблему!


×
Adblock
detector