นี่เป็น wrapper Python อย่างไม่เป็นทางการสำหรับการแลกเปลี่ยน Binance REST API v3
หากคุณมาที่นี่เพื่อค้นหาการแลกเปลี่ยน Binance เพื่อซื้อ cryptocurrencies ให้ไปที่นี่ หากคุณต้องการโต้ตอบกับ Binance โดยอัตโนมัติ
โครงการนี้ขับเคลื่อนโดย
โปรดตรวจสอบให้แน่ใจว่า เวอร์ชัน python-binance ของคุณเป็น v.1.0.20 หรือสูงกว่า ไม่แนะนำให้ใช้เวอร์ชันก่อนหน้านี้อีกต่อไป เนื่องจากปลายทางบางรายการเลิกใช้งานแล้ว
ตรวจสอบให้แน่ใจว่าคุณอัปเดตบ่อยครั้งและตรวจสอบบันทึกการเปลี่ยนแปลงเพื่อดูคุณสมบัติใหม่และการแก้ไขข้อบกพร่อง
เรายินดีรับฟังความคิดเห็น ข้อเสนอแนะ และการแก้ไขของคุณเสมอ! อย่าลังเลที่จะเปิดปัญหา GitHub หรือติดต่อเราทางแชท Telegram ของเรา
การเปลี่ยนแปลงที่สำคัญ ได้แก่ การย้ายจากจุดสิ้นสุด Wapi ไปยัง Sapi ซึ่งเกี่ยวข้องกับจุดสิ้นสุดกระเป๋าสตางค์ที่มีรายละเอียดใน Binance Docs
การเปลี่ยนแปลงที่สำคัญอื่นๆ สำหรับสตรีม websocket และ Depth Cache Manager ซึ่งได้รับการแปลงให้ใช้ Asynchronous Context Managers ดูตัวอย่างในส่วน Async ด้านล่างหรือดูเว็บซ็อกเก็ตและเอกสารแคชเชิงลึก
ลงทะเบียนบัญชีกับ Binance
สร้างคีย์ API และกำหนดสิทธิ์ที่เกี่ยวข้อง
หากคุณใช้การแลกเปลี่ยนจากสหรัฐอเมริกา ญี่ปุ่น หรือ 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 เนื่องจากเร็วกว่าไลบรารี่ในตัวมาก นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อใช้ websockets เนื่องจากการแลกเปลี่ยนบางแห่งส่งคืนข้อความขนาดใหญ่ที่จำเป็นต้องแยกวิเคราะห์และส่งโดยเร็วที่สุด
อย่างไรก็ตาม orjson ไม่ได้เปิดใช้งานตามค่าเริ่มต้น เนื่องจากล่ามหลามทุกตัวไม่รองรับ หากคุณต้องการเลือกใช้ คุณเพียงแค่ต้องติดตั้งมัน (pip install orjson) บนสภาพแวดล้อมท้องถิ่นของคุณ Python-binance จะตรวจจับการติดตั้งและรับมันโดยอัตโนมัติ
สำหรับการสอบถามข้อมูลทางธุรกิจ: [email protected]