Python Binance API 教學- 3. API 函數使用 - 核心引擎學院

文章推薦指數: 80 %
投票人數:10人

在使用幣安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,目前它在比特幣交易量中排名第一,在許多其他貨幣中排名很高。

手續費也非常有低廉,您很難找到另一個費用更低的交易所。

...



請為這篇文章評分?