Skip to content

Repository files navigation

Welcome to python-binance v1.0.17

Updated 21st Feb 2023

This is an unofficial Python wrapper for the Binance exchange REST API v3. I am in no way affiliated with Binance, use at your own risk.

If you came here looking for the Binance exchange to purchase cryptocurrencies, then go here. If you want to automate interactions with Binance stick around.

If you're interested in Binance's new DEX Binance Chain see my python-binance-chain library

Source code
https://github.com/sammchardy/python-binance
Documentation
https://python-binance.readthedocs.io/en/latest/
Binance API Telegram
https://t.me/binance_api_english
Blog with examples including async
https://sammchardy.github.io

Make sure you update often and check the Changelog for new features and bug fixes.

Features

  • Implementation of all General, Market Data and Account endpoints.
  • Asyncio implementation
  • Testnet support for Spot, Futures and Vanilla Options
  • Simple handling of authentication include RSA keys
  • No need to generate timestamps yourself, the wrapper does it for you
  • Response exception handling
  • Websocket handling with reconnection and multiplexed connections
  • Symbol Depth Cache
  • Historical Kline/Candle fetching function
  • Withdraw functionality
  • Deposit addresses
  • Margin Trading
  • Futures Trading
  • Vanilla Options
  • Support other domains (.us, .jp, etc)

Upgrading to v1.0.0+

The breaking changes include the migration from wapi to sapi endpoints which related to the wallet endpoints detailed in the Binance Docs

The other breaking change is for websocket streams and the Depth Cache Manager which have been converted to use Asynchronous Context Managers. See examples in the Async section below or view the websockets and depth cache docs.

Quick Start

Register an account with Binance.

Generate an API Key and assign relevant permissions.

If you are using an exchange from the US, Japan or other TLD then make sure pass tld='us' when creating the client.

To use the Spot or Vanilla Options Testnet, pass testnet=True when creating the client.

pip install python-binance
frombinanceimportClient, ThreadedWebsocketManager, ThreadedDepthCacheManagerclient=Client(api_key, api_secret)
# get market depthdepth=client.get_order_book(symbol='BNBBTC')
# place a test market buy order, to place an actual order use the create_order functionorder=client.create_test_order(
symbol='BNBBTC',
side=Client.SIDE_BUY,
type=Client.ORDER_TYPE_MARKET,
quantity=100)
# get all symbol pricesprices=client.get_all_tickers()
# withdraw 100 ETH# check docs for assumptions around withdrawalsfrombinance.exceptionsimportBinanceAPIExceptiontry:
result=client.withdraw(
asset='ETH',
address='<eth_address>',
amount=100)
exceptBinanceAPIExceptionase:
print(e)
else:
print("Success")
# fetch list of withdrawalswithdraws=client.get_withdraw_history()
# fetch list of ETH withdrawalseth_withdraws=client.get_withdraw_history(coin='ETH')
# get a deposit address for BTCaddress=client.get_deposit_address(coin='BTC')
# get historical kline data from any date range# fetch 1 minute klines for the last day up until nowklines=client.get_historical_klines("BNBBTC", Client.KLINE_INTERVAL_1MINUTE, "1 day ago UTC")
# fetch 30 minute klines for the last month of 2017klines=client.get_historical_klines("ETHBTC", Client.KLINE_INTERVAL_30MINUTE, "1 Dec, 2017", "1 Jan, 2018")
# fetch weekly klines since it listedklines=client.get_historical_klines("NEOBTC", Client.KLINE_INTERVAL_1WEEK, "1 Jan, 2017")
# socket manager using threadstwm=ThreadedWebsocketManager()
twm.start()
# depth cache manager using threadsdcm=ThreadedDepthCacheManager()
dcm.start()
defhandle_socket_message(msg):
print(f"message type: {msg['e']}")
print(msg)
defhandle_dcm_message(depth_cache):
print(f"symbol {depth_cache.symbol}")
print("top 5 bids")
print(depth_cache.get_bids()[:5])
print("top 5 asks")
print(depth_cache.get_asks()[:5])
print("last update time {}".format(depth_cache.update_time))
twm.start_kline_socket(callback=handle_socket_message, symbol='BNBBTC')
dcm.start_depth_cache(callback=handle_dcm_message, symbol='ETHBTC')
# replace with a current options symboloptions_symbol='BTC-210430-36000-C'dcm.start_options_depth_cache(callback=handle_dcm_message, symbol=options_symbol)
# join the threaded managers to the main threadtwm.join()
dcm.join()

For more check out the documentation.

Async Example

Read Async basics for Binance for more information.

importasyncioimportjsonfrombinanceimportAsyncClient, DepthCacheManager, BinanceSocketManagerasyncdefmain():
# initialise the clientclient=awaitAsyncClient.create()
# run some simple requestsprint(json.dumps(awaitclient.get_exchange_info(), indent=2))
print(json.dumps(awaitclient.get_symbol_ticker(symbol="BTCUSDT"), indent=2))
# initialise websocket factory managerbsm=BinanceSocketManager(client)
# create listener using async with# this will exit and close the connection after 5 messagesasyncwithbsm.trade_socket('ETHBTC') asts:
for_inrange(5):
res=awaitts.recv()
print(f'recv {res}')
# get historical kline data from any date range# fetch 1 minute klines for the last day up until nowklines=client.get_historical_klines("BNBBTC", AsyncClient.KLINE_INTERVAL_1MINUTE, "1 day ago UTC")
# use generator to fetch 1 minute klines for the last day up until nowasyncforklineinawaitclient.get_historical_klines_generator("BNBBTC", AsyncClient.KLINE_INTERVAL_1MINUTE, "1 day ago UTC"):
print(kline)
# fetch 30 minute klines for the last month of 2017klines=client.get_historical_klines("ETHBTC", Client.KLINE_INTERVAL_30MINUTE, "1 Dec, 2017", "1 Jan, 2018")
# fetch weekly klines since it listedklines=client.get_historical_klines("NEOBTC", Client.KLINE_INTERVAL_1WEEK, "1 Jan, 2017")
# setup an async context the Depth Cache and exit after 5 messagesasyncwithDepthCacheManager(client, symbol='ETHBTC') asdcm_socket:
for_inrange(5):
depth_cache=awaitdcm_socket.recv()
print(f"symbol {depth_cache.symbol} updated:{depth_cache.update_time}")
print("Top 5 asks:")
print(depth_cache.get_asks()[:5])
print("Top 5 bids:")
print(depth_cache.get_bids()[:5])
# Vanilla options Depth Cache works the same, update the symbol to a current oneoptions_symbol='BTC-210430-36000-C'asyncwithOptionsDepthCacheManager(client, symbol=options_symbol) asdcm_socket:
for_inrange(5):
depth_cache=awaitdcm_socket.recv()
count+=1print(f"symbol {depth_cache.symbol} updated:{depth_cache.update_time}")
print("Top 5 asks:")
print(depth_cache.get_asks()[:5])
print("Top 5 bids:")
print(depth_cache.get_bids()[:5])
awaitclient.close_connection()
if__name__=="__main__":
loop=asyncio.get_event_loop()
loop.run_until_complete(main())

Donate

If this library helped you out feel free to donate.

  • ETH: 0xD7a7fDdCfA687073d7cC93E9E51829a727f9fE70
  • LTC: LPC5vw9ajR1YndE1hYVeo3kJ9LdHjcRCUZ
  • NEO: AVJB4ZgN7VgSUtArCt94y7ZYT6d5NDfpBo
  • BTC: 1Dknp6L6oRZrHDECRedihPzx2sSfmvEBys

Other Exchanges

If you use Binance Chain check out my python-binance-chain library.

If you use Kucoin check out my python-kucoin library.

If you use IDEX check out my python-idex library.

https://ga-beacon.appspot.com/UA-111417213-1/github/python-binance?pixel&useReferer

About

Binance Exchange API python implementation for automated trading

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages