Dies ist ein inoffizieller Python-Wrapper für die Binance Exchange REST API v3.
Wenn Sie auf der Suche nach der Binance-Börse zum Kauf von Kryptowährungen hierher gekommen sind, dann klicken Sie hier. Wenn Sie Interaktionen mit Binance automatisieren möchten, bleiben Sie hier.
Dieses Projekt wird unterstützt von
Bitte stellen Sie sicher, dass Ihre Python-Binance-Version v.1.0.20 oder höher ist . Die Vorgängerversionen werden nicht mehr empfohlen, da einige Endpunkte veraltet sind.
Stellen Sie sicher, dass Sie häufig aktualisieren und im Änderungsprotokoll nach neuen Funktionen und Fehlerbehebungen suchen.
Ihre Beiträge, Vorschläge und Korrekturen sind immer willkommen! Zögern Sie nicht, ein GitHub-Problem zu eröffnen oder uns über unseren Telegram-Chat zu kontaktieren
Zu den bahnbrechenden Änderungen gehört die Migration von Wapi- zu Sapi-Endpunkten, die sich auf die in den Binance-Dokumenten beschriebenen Wallet-Endpunkte bezog
Die andere wichtige Änderung betrifft Websocket-Streams und den Depth Cache Manager, die für die Verwendung asynchroner Kontextmanager konvertiert wurden. Sehen Sie sich Beispiele im Abschnitt „Async“ unten an oder sehen Sie sich die Websockets- und Tiefen-Cache-Dokumente an.
Registrieren Sie ein Konto bei Binance.
Generieren Sie einen API-Schlüssel und weisen Sie relevante Berechtigungen zu.
Wenn Sie eine Börse aus den USA, Japan oder einer anderen TLD verwenden, stellen Sie sicher, dass Sie beim Erstellen des Clients tld='us' übergeben.
Um das Spot-, Vanilla-Options- oder Futures-Testnetz zu verwenden, übergeben Sie beim Erstellen des Clients testnet=True.
pip install python-binance
from binance import Client , ThreadedWebsocketManager , ThreadedDepthCacheManager
client = Client ( api_key , api_secret )
# get market depth
depth = client . get_order_book ( symbol = 'BNBBTC' )
# place a test market buy order, to place an actual order use the create_order function
order = client . create_test_order (
symbol = 'BNBBTC' ,
side = Client . SIDE_BUY ,
type = Client . ORDER_TYPE_MARKET ,
quantity = 100 )
# get all symbol prices
prices = client . get_all_tickers ()
# withdraw 100 ETH
# check docs for assumptions around withdrawals
from binance . exceptions import BinanceAPIException
try :
result = client . withdraw (
asset = 'ETH' ,
address = '' ,
amount = 100 )
except BinanceAPIException as e :
print ( e )
else :
print ( "Success" )
# fetch list of withdrawals
withdraws = client . get_withdraw_history ()
# fetch list of ETH withdrawals
eth_withdraws = client . get_withdraw_history ( coin = 'ETH' )
# get a deposit address for BTC
address = client . get_deposit_address ( coin = 'BTC' )
# get historical kline data from any date range
# fetch 1 minute klines for the last day up until now
klines = client . get_historical_klines ( "BNBBTC" , Client . KLINE_INTERVAL_1MINUTE , "1 day ago UTC" )
# fetch 30 minute klines for the last month of 2017
klines = client . get_historical_klines ( "ETHBTC" , Client . KLINE_INTERVAL_30MINUTE , "1 Dec, 2017" , "1 Jan, 2018" )
# fetch weekly klines since it listed
klines = client . get_historical_klines ( "NEOBTC" , Client . KLINE_INTERVAL_1WEEK , "1 Jan, 2017" )
# create order through websockets
order_ws = client . ws_create_order ( symbol = "LTCUSDT" , side = "BUY" , type = "MARKET" , quantity = 0.1 )
# get account using custom headers
account = client . get_account ( headers = { 'MyCustomKey' : 'MyCustomValue' })
# socket manager using threads
twm = ThreadedWebsocketManager ()
twm . start ()
# depth cache manager using threads
dcm = ThreadedDepthCacheManager ()
dcm . start ()
def handle_socket_message ( msg ):
print ( f"message type: { msg [ 'e' ] } " )
print ( msg )
def handle_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 symbol
options_symbol = 'BTC-241227-41000-C'
dcm . start_options_depth_cache ( callback = handle_dcm_message , symbol = options_symbol )
# join the threaded managers to the main thread
twm . join ()
dcm . join ()
Weitere Informationen finden Sie in der Dokumentation.
Weitere Informationen finden Sie unter Async-Grundlagen für Binance.
import asyncio
import json
from binance import AsyncClient , DepthCacheManager , BinanceSocketManager
async def main ():
# initialise the client
client = await AsyncClient . create ()
# run some simple requests
print ( json . dumps ( await client . get_exchange_info (), indent = 2 ))
print ( json . dumps ( await client . get_symbol_ticker ( symbol = "BTCUSDT" ), indent = 2 ))
# initialise websocket factory manager
bsm = BinanceSocketManager ( client )
# create listener using async with
# this will exit and close the connection after 5 messages
async with bsm . trade_socket ( 'ETHBTC' ) as ts :
for _ in range ( 5 ):
res = await ts . recv ()
print ( f'recv { res } ' )
# get historical kline data from any date range
# fetch 1 minute klines for the last day up until now
klines = 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 now
async for kline in await client . get_historical_klines_generator ( "BNBBTC" , AsyncClient . KLINE_INTERVAL_1MINUTE , "1 day ago UTC" ):
print ( kline )
# fetch 30 minute klines for the last month of 2017
klines = await client . get_historical_klines ( "ETHBTC" , Client . KLINE_INTERVAL_30MINUTE , "1 Dec, 2017" , "1 Jan, 2018" )
# fetch weekly klines since it listed
klines = await client . get_historical_klines ( "NEOBTC" , Client . KLINE_INTERVAL_1WEEK , "1 Jan, 2017" )
# create order through websockets
order_ws = await client . ws_create_order ( symbol = "LTCUSDT" , side = "BUY" , type = "MARKET" , quantity = 0.1 )
# setup an async context the Depth Cache and exit after 5 messages
async with DepthCacheManager ( client , symbol = 'ETHBTC' ) as dcm_socket :
for _ in range ( 5 ):
depth_cache = await dcm_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 one
options_symbol = 'BTC-241227-41000-C'
async with OptionsDepthCacheManager ( client , symbol = options_symbol ) as dcm_socket :
for _ in range ( 5 ):
depth_cache = await dcm_socket . recv ()
count += 1
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 ])
await client . close_connection ()
if __name__ == "__main__" :
loop = asyncio . get_event_loop ()
loop . run_until_complete ( main ())
Die Bibliothek steht unter MIT-Lizenz, das heißt, es ist für jeden Entwickler völlig kostenlos, kommerzielle und Open-Source-Software darauf zu erstellen, die Nutzung erfolgt jedoch auf eigenes Risiko und ohne Gewährleistung.
Python-binance unterstützt auch orjson zum Parsen von JSON, da es viel schneller ist als die integrierte Bibliothek. Dies ist besonders wichtig bei der Verwendung von Websockets, da einige Börsen große Nachrichten zurückgeben, die so schnell wie möglich analysiert und versendet werden müssen.
Orjson ist jedoch standardmäßig nicht aktiviert, da es nicht von jedem Python-Interpreter unterstützt wird. Wenn Sie sich anmelden möchten, müssen Sie es nur in Ihrer lokalen Umgebung installieren (pip install orjson). Python-binance erkennt die Installation und holt sie automatisch ab.
Für geschäftliche Anfragen: [email protected]