Ini adalah pembungkus Python tidak resmi untuk REST API v3 pertukaran Binance.
Jika Anda datang ke sini mencari pertukaran Binance untuk membeli mata uang kripto, buka di sini. Jika Anda ingin mengotomatiskan interaksi dengan Binance, tetaplah menggunakannya.
Proyek ini didukung oleh
Harap pastikan versi python-binance Anda adalah v.1.0.20 atau lebih tinggi. Versi sebelumnya tidak lagi direkomendasikan karena beberapa titik akhir sudah tidak digunakan lagi.
Pastikan Anda sering memperbarui dan memeriksa Changelog untuk fitur baru dan perbaikan bug.
Kontribusi, saran, dan perbaikan Anda selalu diterima! Jangan ragu untuk membuka masalah GitHub atau menghubungi kami melalui obrolan Telegram kami
Perubahan yang dapat menyebabkan gangguan termasuk migrasi dari titik akhir wapi ke sapi yang terkait dengan titik akhir dompet yang dirinci dalam Dokumen Binance
Perubahan besar lainnya adalah untuk aliran websocket dan Depth Cache Manager yang telah dikonversi untuk menggunakan Manajer Konteks Asinkron. Lihat contoh di bagian Async di bawah atau lihat dokumen websockets dan cache kedalaman.
Daftarkan akun dengan Binance.
Hasilkan Kunci API dan tetapkan izin yang relevan.
Jika Anda menggunakan bursa dari AS, Jepang, atau TLD lainnya, pastikan meneruskan tld='us' saat membuat klien.
Untuk menggunakan Spot, Vanilla Options, atau Futures Testnet, lewati testnet=True saat membuat klien.
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 ()
Untuk lebih lanjut, lihat dokumentasinya.
Baca Dasar-dasar Async untuk Binance untuk informasi lebih lanjut.
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 ())
Perpustakaan ini berada di bawah lisensi MIT, yang berarti pengembang mana pun bebas untuk membuat perangkat lunak komersial dan sumber terbuka di atasnya, namun gunakanlah atas risiko Anda sendiri tanpa jaminan apa pun.
Python-binance juga mendukung orjson untuk mengurai JSON karena jauh lebih cepat daripada perpustakaan bawaan. Hal ini sangat penting ketika menggunakan websockets karena beberapa pertukaran mengembalikan pesan besar yang perlu diurai dan dikirim secepat mungkin.
Namun, orjson tidak diaktifkan secara default karena tidak didukung oleh semua juru bahasa python. Jika Anda ingin ikut serta, Anda hanya perlu menginstalnya (pip install orjson) di lingkungan lokal Anda. Python-binance akan mendeteksi instalasi dan mengambilnya secara otomatis.
Untuk pertanyaan bisnis: [email protected]