هذا عبارة عن غلاف Python غير رسمي لـ Binance Exchange REST API v3.
إذا أتيت إلى هنا بحثًا عن منصة Binance لشراء العملات المشفرة، فانتقل هنا. إذا كنت تريد أتمتة التفاعلات مع Binance، فاستمر في ذلك.
هذا المشروع مدعوم من
يرجى التأكد من أن إصدار python-binance لديك هو v.1.0.20 أو أعلى. لم يعد يوصى بالإصدارات السابقة لأنه تم إهمال بعض نقاط النهاية.
تأكد من قيامك بالتحديث بشكل متكرر وتحقق من سجل التغيير للحصول على الميزات الجديدة وإصلاحات الأخطاء.
مساهماتك واقتراحاتك وإصلاحاتك مرحب بها دائمًا! لا تتردد في فتح مشكلة GitHub أو التواصل معنا عبر دردشة Telegram
تتضمن التغييرات العاجلة الترحيل من نقاط نهاية wapi إلى نقاط نهاية sapi المرتبطة بنقاط نهاية المحفظة المفصلة في مستندات Binance
التغيير العاجل الآخر مخصص لتدفقات websocket وDepth Cache Manager التي تم تحويلها لاستخدام مديري السياق غير المتزامنين. راجع الأمثلة في قسم Async أدناه أو اعرض مآخذ الويب ومستندات ذاكرة التخزين المؤقت العميقة.
قم بتسجيل حساب في Binance.
قم بإنشاء مفتاح واجهة برمجة التطبيقات (API Key) وقم بتعيين الأذونات ذات الصلة.
إذا كنت تستخدم بورصة من الولايات المتحدة أو اليابان أو نطاق TLD آخر، فتأكد من تمرير tld='us' عند إنشاء العميل.
لاستخدام Spot أو Vanilla Options أو Futures Testnet، قم بتمرير 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 ()
لمزيد من التحقق من الوثائق.
اقرأ أساسيات Async لـ 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 ())
المكتبة خاضعة لترخيص من معهد ماساتشوستس للتكنولوجيا (MIT)، وهذا يعني أنه مجاني تمامًا لأي مطور إنشاء برامج تجارية ومفتوحة المصدر فوقها، ولكن استخدامها على مسؤوليتك الخاصة دون أي ضمانات، كما هي.
يدعم Python-binance أيضًا orjson لتحليل JSON لأنه أسرع بكثير من المكتبة المضمنة. يعد هذا مهمًا بشكل خاص عند استخدام مقابس الويب لأن بعض عمليات التبادل تُرجع رسائل كبيرة تحتاج إلى تحليل وإرسالها في أسرع وقت ممكن.
ومع ذلك، لا يتم تمكين orjson افتراضيًا لأنه غير مدعوم من قبل جميع مترجمي python. إذا كنت ترغب في الاشتراك، فأنت بحاجة فقط إلى تثبيته (pip install orjson) على بيئتك المحلية. سوف يكتشف Python-binance التثبيت ويلتقطه تلقائيًا.
للاستفسارات التجارية: [email protected]