이는 Binance Exchange REST API v3용 비공식 Python 래퍼입니다.
암호화폐를 구매하기 위해 바이낸스 거래소를 찾으셨다면 여기로 가세요. Binance와의 상호 작용을 자동화하고 싶다면 계속 사용하십시오.
이 프로젝트는
Python-binance 버전이 v.1.0.20 이상 인지 확인하세요 . 일부 엔드포인트가 더 이상 사용되지 않으므로 이전 버전은 더 이상 권장되지 않습니다.
자주 업데이트하고 변경 로그에서 새로운 기능과 버그 수정을 확인하세요.
귀하의 기여, 제안 및 수정 사항은 언제나 환영합니다! 주저하지 말고 GitHub 문제를 열거나 Telegram 채팅을 통해 문의해 주세요.
주요 변경 사항에는 Binance Docs에 자세히 설명된 지갑 엔드포인트와 관련된 wapi에서 sapi 엔드포인트로의 마이그레이션이 포함됩니다.
다른 주요 변경 사항은 비동기 컨텍스트 관리자를 사용하도록 변환된 웹소켓 스트림 및 깊이 캐시 관리자에 대한 것입니다. 아래 비동기 섹션의 예를 보거나 웹소켓 및 깊이 캐시 문서를 확인하세요.
바이낸스에 계정을 등록하세요.
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 ()
자세한 내용은 설명서를 확인하세요.
자세한 내용은 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는 내장 라이브러리보다 훨씬 빠르기 때문에 JSON 구문 분석을 위해 orjson도 지원합니다. 이는 웹소켓을 사용할 때 특히 중요합니다. 일부 교환에서는 가능한 한 빨리 구문 분석하고 전달해야 하는 큰 메시지를 반환하기 때문입니다.
그러나 orjson은 모든 Python 인터프리터에서 지원되지 않기 때문에 기본적으로 활성화되어 있지 않습니다. 옵트인하려면 로컬 환경에 설치(pip install orjson)만 하면 됩니다. Python-binance는 설치를 감지하고 자동으로 선택합니다.
비즈니스 문의: [email protected]