Python Binance API 教學- 3. API 函數使用 - 核心引擎學院
文章推薦指數: 80 %
在使用幣安API進行即時交易之前,可以選擇在幣安API測試網上測試您的Python交易腳本。
Python區塊鏈
PythonBinanceAPI教學–3.API函數使用
文章提供:核心引擎
目錄
幣安是否提供模擬帳戶?如何使用幣安API檢索我的賬戶餘額?如何檢索比特幣的最新價格?使用BinanceWebSocket獲取最新的比特幣價格如何以CSV格式獲取比特幣的歷史價格數據?我應該交易期貨還是現貨?有什麼區別?
幣安是否提供模擬帳戶?
在使用幣安API進行即時交易之前,可以選擇在幣安API測試網上測試您的Python交易腳本。
首先存取幣安測試網路網站,您可以在此處找到它:https://testnet.binance.vision/
從那裡,即使您已經擁有Binance.com帳戶,您也必須創建一個帳戶。
我們只看到了使用GitHub帳戶登錄的選項。
登錄后,您必須創建新的API金鑰。
這些將與上一步中創建的密鑰分開,僅用於訪問您的模擬帳戶。
選擇用於生成HMAC金鑰的選項。
在下一步中,輸入金鑰的描述性名稱。
按兩下「生成」後,您將進入顯示金鑰的螢幕。
如果您離開此螢幕,您將無法再次訪問他們的金鑰,並且必須重新開始。
使用密鑰進行設置后,即時API中的所有終結點將與TestnetAPI中的終結點相同。
唯一的區別是您必須使用不同的URL才能訪問測試網。
在撰寫本文時,我們在所有示例中使用的python-binance庫不支持測試網路。
但是,我們將在下一步中討論解決方法。
請注意,測試網路帳戶通常會在每個月初被刪除。
任何未平倉交易將被清除。
有關Spot測試網路的更多詳細資訊,請參閱您建立金鑰的同一頁面。
如何使用幣安API檢索我的賬戶餘額?
現在,我們已經安裝了庫並獲取了API金鑰,現在是時候測試與API的連接了。
我們將啟動一個用戶端,並查看詳細說明不同帳戶餘額的四個函數。
importos
frombinance.clientimportClient
我們從進口開始。
我們需要python-binance庫中的Client類以及os庫來檢索我們存儲為環境變數的API金鑰。
#init
api_key=os.environ.get('binance_api')
api_secret=os.environ.get('binance_secret')
接下來,我們將API金鑰和機密存儲到局部變數。
client=Client(api_key,api_secret)
最後,我們初始化用戶端並傳遞API金鑰和機密。
我們都準備好在他的時間點開始訪問API。
不幸的是,python-binance庫不支援前面討論的演示環境。
但是,我們能夠通過手動更改庫中的API終結點URL進行連接,如下所示:
client.API_URL='https://testnet.binance.vision/api'
或
client.API_URL='https://api.binance.com/api'
如果決定從演示API開始,請確保在初始化用戶端時傳遞測試網路API憑據,而不是即時API金鑰。
#getbalancesforallassets&someaccountinformation
print(client.get_account())
上述代碼將列印出平臺上每種可用貨幣的所有帳戶詳細資訊。
它還將提供一些其他資訊,例如當前的傭金率以及您的帳戶是否啟用了保證金交易。
這可能有點太多了。
如果我們只對BTC餘額感興趣,則可以使用另一個端點。
#getbalanceforaspecificassetonly(BTC)
print(client.get_asset_balance(asset='BTC'))
如果您正在追逐其他資產的餘額詳細資訊,只需將BTC與您所追求的資產切換出去即可。
#getbalancesforfuturesaccount
print(client.futures_account_balance())
期貨帳戶的賬戶餘額與主餘額是分開的,因此需要不同的端點。
同樣,保證金帳戶詳細資訊也是分開的。
以下是您訪問保證金帳戶的方法。
請注意,如果您尚未激活保證金帳戶,則會引發異常。
#getbalancesformarginaccount
print(client.get_margin_account())
如果您不熟悉保證金交易,您可以查看幣安指南:什麼是保證金交易以獲取更多詳細資訊,並查看幣安保證金交易指南以獲取設置說明。
如何檢索比特幣的最新價格?
有幾種方法可以獲得比特幣的最新價格。
最簡單的一個涉及使用該函數。
get_symbol_ticker
如果您追求其他資產,則可以在此處通過任何股票代碼,而不是BTCUSDT。
#getlatestpricefromBinanceAPI
btc_price=client.get_symbol_ticker(symbol="BTCUSDT")
#printfulloutput(dictionary)
print(btc_price)
上面的代碼將列印出包含符號和價格的字典。
下面是一個示例輸出–
{'symbol':'BTCUSDT','price':'9678.08000000'}
我們可以按如下方式訪問價格。
print(btc_price["price"])
在即時Python交易腳本中,我們可能需要我們正在交易的資產的最新價格資訊。
幸運的是,有一個比不斷向API發出請求更好的解決方案。
它涉及使用BinanceWebSocket。
使用BinanceWebSocket獲取最新的比特幣價格
BinanceWebSocket要求我們只發送一次命令來打開流,然後隨著價格的更新,數據將自動流過。
fromtimeimportsleep
frombinanceimportThreadedWebsocketManager
我們需要導入ThreadedSocketManager來使用這個函數,以及來自time模組的sleep函數。
btc_price={'error':False}
接下來,我們將創建一個字典,該字典將保存我們最新的價格數據,並讓我們知道websocket是否存在問題。
defbtc_trade_history(msg):
'''definehowtoprocessincomingWebSocketmessages'''
ifmsg['e']!='error':
print(msg['c'])
btc_price['last']=msg['c']
btc_price['bid']=msg['b']
btc_price['last']=msg['a']
btc_price['error']=False
else:
btc_price['error']=True
然後,我們將創建一個函數,該函數將告訴套接字管理員在接收新數據時要執行的操作。
現在,我們只需將最後的收盤價列印到螢幕上。
我們還將一些專案存儲到我們之前創建的字典檔中。
這允許我們在函數之外訪問數據,這就是您通常從主交易腳本訪問websocket數據的方式。
除了最新的價格,買入價和賣出價外,我們還內置了錯誤檢查功能。
這將使我們知道BinanceWebSocket是否存在錯誤,在這種情況下,我們將需要重新啟動它。
后一個涉及websocket的範例擴展了錯誤檢查部分。
您可能已經注意到幣安不使用完整的變數名稱。
即收盤價在名為「c」而不是「收盤」的變數中來自websocket。
幣安這樣做可能是為了將消息的整體大小保持在最小值,以提高通信速度。
如果您正在嘗試對新的websocket連接進行程式設計,但不確定變數代表什麼,請查看BinanceAPI文件。
它們詳細說明瞭websocket消息的每個元件的用途。
#initandstarttheWebSocket
bsm=ThreadedWebsocketManager()
bsm.start()
下一步是初始化套接字管理器。
當我們這樣做時,庫將創建一個新的線程,我們已經在上面的代碼片段中啟動了該線程。
#subscribetoastream
bsm.start_symbol_ticker_socket(callback=btc_trade_history,symbol='BTCUSDT')
我們將調用具有與我們之前討論的API函數類似的輸出的it。
start_symbol_ticker_socketget_symbol_ticker
我們需要通過一個符號,在本例中為BTCUSDT。
我們還指定它在每次收到新消息時調用我們的自定義函數。
btc_trade_history
如果您正在關注,如果您運行上述代碼,則應在螢幕上看到價格流。
它看起來應該類似於幣安網頁上現貨交易部分下的「交易歷史」框。
在即時Python交易腳本中,您將從函數外部的字典檔中訪問數據,而不是將數據列印到函數的螢幕中。
幣安有幾個websocket流,我們可以輕鬆添加更多。
bsm.start_symbol_ticker_socket(callback=btc_trade_history,symbol='ETHUSDT')
上面的代碼片段訂閱了ETHUSDT的股票代碼。
我們將回調保留為btc_trade_history。
這意味著當ETHUSDT的新消息到達時,它將由我們創建的相同btc_trade_history函數處理。
這隻是出於示例目的,以展示如何輕鬆添加更多流。
如果需要,您可以選擇為其他流創建單獨的函數。
完成WebSocket後,請使用以下語法正確終止它:
#stopwebsocket
bsm.stop()
WebSocket可以提供各種數據。
要獲取可用內容的完整視圖,請在Python終端中鍵入以下內容。
help(ThreadedWebsocketManager)
這將列出所有可用的不同方法,並提供有關返回數據的一些資訊。
下面是start_symbol_ticker_socket的範例:
如您所見,它提供了簡要說明,指向有關該函數的官方Binance文檔的連結,以及有關返回數據的一些詳細資訊。
這是找出返回最佳出價的另一種方法,除了檢查文檔。
msg['b']
如何以CSV格式獲取比特幣的歷史價格數據?
我們將從幣安API請求歷史比特幣價格數據,然後概述將該數據保存到CSV檔的四個選項。
我們想要盡可能追溯的數據。
幸運的是,庫中有一個函數,可以讓我們確定第一個可用的價格點。
#validintervals-1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M
#gettimestampofearliestdatedataisavailable
timestamp=client._get_earliest_valid_timestamp('BTCUSDT','1d')
print(timestamp)
在上面的代碼片段中,我們調用了該函數,並將BTCUSDT作為我們的交易品種,將1d作為我們的時間幀。
輸出將保存到變數中。
._get_earliest_valid_timestamp
#requesthistoricalcandle(orklines)data
bars=client.get_historical_klines('BTCUSDT','1d',timestamp,limit=1000)
接下來,我們調用歷史數據。
我們需要再次通過符號和變數。
此外,還需要開始日期,為此我們使用了時間戳變數。
最後,預設情況下,此函數調用最後500個數據點。
最大值為1000,因此我們將限制增加到最大值。
在後台,此終端節點將在迴圈中連續查詢API,一次收集1000個價位,直到返回從起點到今天的所有數據。
為了對API”友善”,每三次調用後都會內置一個睡眠函數。
因此,如果您從一開始就要查找1分鐘的數據,則可能需要一段時間。
幣安於2017年夏天開始運營,因此這可能是最早的價格點。
以下是根據幣安API文件返回的數據的定義。
現在我們有了日期,讓我們通過四個不同的選項將其保存到檔中。
#option1-savetofileusingjsonmethod
withopen('btc_bars.json','w')ase:
json.dump(bars,e)
第一個涉及使用JSON庫。
這將維護數據的結構,即清單清單。
如果你想保持這種結構,這就是要走的路。
確保.importjson
#option2-saveasCSVfileusingthecsvwriterlibrary
withopen('btc_bars.csv','w',newline='')asf:
wr=csv.writer(f)
forlineinbars:
wr.writerow(line)
第二種方法使用csv編寫器將清單另存為CSV檔。
確保.importcsv
#option3-saveasCSVfilewithoutusingalibrary.
withopen('btc_bars2.csv','w')asd:
forlineinbars:
d.write(f'{line[0]},{line[1]},{line[2]},{line[3]},{line[4]}\n')
第三個選項不使用任何庫。
我們創建了一個f字串,它是Python3及更高版本的本機函數。
這裡有更多的靈活性。
我們利用了它,只保存了前五列:日期,開盤,高,低,關閉。
或者,如果您不需要其他列,也可以將其刪除,如下所示:
#deleteunwanteddata-justkeepdate,open,high,low,close
forlineinbars:
delline[5:]
最後一個選項是利用熊貓的導出到CSV功能。
如果您計劃將數據保存在數據幀中,則使用此選項是有意義的。
#option4-createaPandasDataFrameandexporttoCSV
btc_df=pd.DataFrame(bars,columns=['date','open','high','low','close'])
btc_df.set_index('date',inplace=True)
print(btc_df.head())
我們已將數據傳遞到數據幀中並定義了列。
由於我們刪除了一些不需要的列,因此只需要定義五個列。
這就是我們的數據幀在這一點上的樣子——
日期列已設置為索引,使其成為時間序列索引數據幀。
這樣,以後可以更輕鬆地根據時間範圍進行操作。
當我們將其另存為CSV時,它還會刪除額外的不需要的索引列。
最後,我們可以將數據幀導出為CSV檔。
#exportDataFrametocsv
btc_df.to_csv('btc_bars3.csv')
2021年8月30日更新:幣安推出了一個新網站,該網站託管了現貨和期貨市場的歷史市場數據。
可以透過點選取在點號以點–幣安資料收集
從那裡,選擇相關市場(現貨或期貨)。
然後,您可以選擇資料的時間範圍。
即每月或每天。
此時,您可以選擇要處理的數據類型。
常見的數據類型包括:
aggTrades –聚合成10秒區塊的逐筆報價數據klines –也稱為蠟燭或柱線。
此數據具有OHLC格式(開盤、最高價、最低價、收盤價)交易–所有交易的記錄。
也稱為逐筆報價數據
市場數據可從幣安下載
數據採用ZIP格式。
解壓縮后,它將採用CSV格式。
該網站是批量下載市場數據的好方法。
幣安創建它是為了試圖阻止使用API下載大量數據。
這樣,API就可以優先用於其他用途,例如發送訂單。
如果您確實使用API批量下載歷史數據,您可能會注意到這需要很長時間。
這是因為幣安限制了這些類型的API請求。
此外,python-binance庫在某些市場數據請求(如價格變動數據)中實現延遲,以確保您不會因過載API而意外收到API禁令。
我應該交易期貨還是現貨?有什麼區別?
在期貨市場,您可以輸入合約以在以後購買加密貨幣。
這意味著如果您進行交易,則不會獲得實際擁有權。
事實上,大多數期貨交易者從不持有擁有權。
交易期貨主要用於投機目的,即使它是出於其他原因而設計的。
交易期貨的主要優點是您可以做空您不擁有的資產。
這在套利和對沖策略中很有用。
期貨交易的另一個方面是它是在保證金上完成的。
這意味著您只需要投入一部分交易價值,就可以使用槓桿。
幣安有一個單獨的選擇權,可以以保證金交易現貨市場。
但是,您可以做空的金額有相當低的限制,並且利息(借貸成本)遠高於交易期貨。
由於各種持有成本,期貨價格通常與主要市場不同,或者稱為現貨價格。
然而,價格通常會在期貨合約到期日收斂。
與幣安一起,交易期貨的一大優勢是交易費用比現貨低得多。
因此,交易期貨市場有很多原因。
以下是您可能不想交易期貨的幾個原因:
您計劃交易許多不同的加密貨幣,可能相互對立–幣安目前的期貨產品目前僅限於流行的USDT對。
你想擁有加密貨幣,也許可以將其存儲在離線錢包中。
幣安API使用不同的終端節點進行期貨交易。
但是,如果你使用的是python-binance庫,則這些終結點已在庫中配置。
此外,庫內的期貨功能已被適當標記,以將其與現貨市場區分開來。
例如,如果您正在交易現貨,您可以使用以下函數來訪問您的未結訂單:
client.get_open_orders
如果您正在交易期貨,您將使用:
client.futures_get_open_orders
←上一篇
下一篇→
Python區塊鏈
PythonBinanceAPI教學–4.技術指標分析
如何獲取SMA等技術指標?我們已經討論了如何將DataFrame輸出為CSV檔。
你可以用PythonPandas做更多的事情,計算移動平均線就是其中之一。
下面是一個示例:importbtalibimportpandasaspd#loadDataFramebtc_df=pd.read_csv('btc_bars3.csv',index_col=0)btc_df.set_index('date',inplace=True)btc_df.index=...
PythonBinanceAPI教學–2.開戶及安裝
PythonBinanceAPI坊間有數個第三方函式庫可以使用,最受歡迎的是python-binance另一個流行的庫是CCXT。
該庫支援一百多種不同的交換,並提供許多不同的程式設計語言。
第三個可能鮮為人知的選項是BinanceConnector,它應該是官方推出的庫,因為它託管在Binance的Github頁面。
幣安API文件中還有一個建議和指向它的連結。
但它的格式似乎經常更新,而且學習曲線陡峭,因為沒有大量文檔或例子可供學習。
...
PYTHONBinanceAPI教學–1.介紹
什麼是BinanceAPI?BinanceAPI是獲取幣安數據的方法。
我們可以運用電腦語言例如Python連接到BinanceAPI獲取數據。
有了它,您可以編寫程式自動擷取數據,並自訂你的條件策略,自動化執行交易。
使用BinanceAPI的好處Binance幣安在加密貨幣(Crypto)交易方面已成為市場領導者。
根據coinmarketcap.com,目前它在比特幣交易量中排名第一,在許多其他貨幣中排名很高。
手續費也非常有低廉,您很難找到另一個費用更低的交易所。
...
延伸文章資訊
- 1幣安API - Binance
- 2PYTHON Binance API 教學- 1. 介紹- 核心引擎學院
Binance API 是獲取幣安數據的方法。我們可以運用電腦語言例如Python 連接到Binance API 獲取數據。有了它,您可以編寫程式自動擷取數據,並自訂你的條件策略,自動化 ...
- 3幣安API 系列重點I – 使用Postman 進行現貨交易
了解在不編寫任何程式碼的情況下與幣安API 互動的方法。遵循幣安學院的Postman 教程。
- 4Python Binance API 教學- 3. API 函數使用 - 核心引擎學院
在使用幣安API進行即時交易之前,可以選擇在幣安API測試網上測試您的Python交易腳本。
- 5幣安Binance 程式交易API 設定教學 - 量化通
幣安Binance 程式交易API 設定教學– 量化交易虛擬貨幣x MultiCharts. 上篇文章我們講到如何在幣安開戶,並且進行身分驗證。在進行程式交易串接前, ...