使用Python輕鬆取得Binance歷史交易
鑑於某些策略需要一定程度的技術數據,而其他數據可能只需要花費一個小時的時間,該過程並不總是那麼簡單,而基礎架構,可用性和連接性等元素可能會因資料類型的不同而大相徑庭。
但是為什麼本文只涉及取得「交易」數據,為什麼我們使用Binance API?你可能對我的文章內容有些疑問。
資料頻率和平衡
我想說,交易資料端點主要在99.99%的交易所中提供。它是細粒度的,提供了足夠的詳細資訊(在某些非常特殊的情況下)用於回測高頻交易(HFT)策略,並且可以用作OHLC candles(1S至24H或更多,如果你想要的話)的基礎。
交易資料是通用的,並且允許使用不同頻率的策略進行大量實驗。
為什麼選擇Binance?
那隻是因為它是我由於數量龐大而傾向於回溯的交易所之一。
我們將要進行的編碼
我們將建立一個Python腳本,該腳本接收對符號,開始日期和結束日期作為命令列參數。它將包含所有交易的CSV檔案輸出到磁碟。過程可以透過以下步驟進行詳細說明:
1、解析symbol,starting_date和ending_date論點。
2、取得開始日期發生的第一筆交易,以取得第一筆交易trade_id。
3、循環取得每個請求1000筆交易(Binance API限制),直到ending_date達到為止。
4、最後,將資料儲存到磁碟。對於範例,我們將其儲存為CSV,但是你還有其他選擇,不一定要儲存為CSV。
5、我們將使用pandas,requests,time,sys,和datetime。在程式碼段中,將不會顯示錯誤驗證,因為它不會為說明添加任何值。
編碼時間
此腳本將使用下列參數:
1、symbol:交易對的符號,由Binance定義。可以在此處查詢,也可以從Binance Web應用程式的URL複製(不包括 _ 字元)。
-starting_date and ending_date:不言自明。期望的格式為mm/dd/yyyy,或使用Python lang語為%m/%d/%Y。
為了取得參數,我們將使用內建函數sys(這裡沒有什麼花俏的地方),為了解析日期,我們將使用datetime函式庫。
我們將增加一天並減去一微秒,以使ending_date時間部分始終處於23:59:59.999,這使得獲取當天間隔更加實用。
提取交易
使用Binance的API並使用aggTrades端點,我們可以在一個請求中獲得最多1000 筆交易,如果我們使用開始和結束參數,則它們之間的間隔最多為一小時。
在出現一些失敗之後,透過使用時間間隔來獲取(在某個時間點或另一個時間點,流動性會變得瘋狂,我會失去一些寶貴的交易),我決定嘗試from_id策略。
將aggTrades選擇的端點,因為它回到壓縮產業。這樣,我們將不會失去任何寶貴的資訊。
獲得壓縮的總交易。在同一時間從同一訂單以相同價格執行的交易將匯總數量。
該from_id策略是這樣的:
我們要得到的第一筆交易starting_date 透過發送日期的時間間隔向終點。之後,我們將從第一個取得的交易ID開始取得1000個交易。然後,我們將檢查最後一筆交易是否發生在我們之後ending_date。
如果是這樣,我們已經遍歷了所有時間段,可以將結果儲存到檔案中。否則,我們將更新from_id變數以取得最後的交易ID,然後重新開始迴圈。
取得第一個交易編號
#首先,我們建立一個new_end_date。那是因為我們aggTrades是透過傳遞a startTime和endTime 參數來使用。
現在,我們只需要知道該期間的第一個交易編號,因此我們將增加60秒。在低流動性貨幣對中,可以更改此參數,因為不能保證在請求的第一天發生交易。
然後,使用我們的輔助函數解析日期,以使用該calendar.timegm函數將日期轉換為Unix毫秒錶示形式。此timegm函數是首選函數,因為它將日期保留為UTC。
請求的回應是按日期排序的貿易物件列表,格式如下:
因此,由於我們需要第一個交易ID ,因此我們將傳回該response[0]["a"]值。
主循環
現在我們有了第一個交易ID,我們可以一次提取1000個交易,直到達到ending_date。以下程式碼將在我們的主循環中呼叫。它將使用from_id參數,放棄startDate和endDate參數,並執行我們的請求。
現在,這是我們的主循環,它將執行請求並建立我們的DataFrame。
我們檢查是否current_time包含最近取得的交易日期大於to_date,如果是,則我們:
- 使用from_id參數取得交易
- 使用最新交易中取得的資訊來更新from_id和current_time參數
- 列印nice偵錯訊息
- pd.concat 這些交易與我們之前的交易DataFrame
- 使用sleep讓Binance不會給我們一個429 HTTP回應
清潔與儲存
#組裝完之後DataFrame,我們需要執行簡單的資料清理。我們將刪除重複trim的交易和之後發生的交易to_date(我們有這個問題,因為我們要獲取1000筆交易中的大部分,因此,我們預計在目標結束日期之後執行一些交易)。
我們可以封裝我們的trim功能:
並執行我們的資料清理:
現在,我們可以使用以下to_csv方法將其保存到文件中:
我們還可以使用其他資料存儲機制,例如Arctic。
最後:驗證你的數據
在使用交易策略時,我們必須信任我們的數據,這一點很重要。透過應用以下驗證,我們可以輕鬆地利用獲取的交易資料來做到這一點:
#在程式碼片段中,我們將其轉換DataFrame為NumPy數組,並逐行迭代,檢查交易ID是否每行遞增1。
Binance交易ID是以遞增方式編號的,並且是為每個交易品種創建的,因此,很容易驗證資料是否正確。
PS:創建成功的交易策略的第一步是擁有正確的資料。
以上是使用Python輕鬆取得Binance歷史交易的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

全球十大加密貨幣交易平台包括Binance、OKX、Gate.io、Coinbase、Kraken、Huobi Global、Bitfinex、Bittrex、KuCoin和Poloniex,均提供多種交易方式和強大的安全措施。

Binance、OKX、gate.io等十大數字貨幣交易所完善系統、高效多元化交易和嚴密安全措施嚴重推崇。

瑞波幣(XRP)由Ripple公司創建,用於跨境支付,快速且費用低,適合小額交易支付。註冊錢包和交易所後,可進行購買和存儲。

比特幣的價格在20,000到30,000美元之間。 1. 比特幣自2009年以來價格波動劇烈,2017年達到近20,000美元,2021年達到近60,000美元。 2. 價格受市場需求、供應量、宏觀經濟環境等因素影響。 3. 通過交易所、移動應用和網站可獲取實時價格。 4. 比特幣價格波動性大,受市場情緒和外部因素驅動。 5. 與傳統金融市場有一定關係,受全球股市、美元強弱等影響。 6. 長期趨勢看漲,但需謹慎評估風險。

靠谱的数字货币交易平台推荐:1. OKX,2. Binance,3. Coinbase,4. Kraken,5. Huobi,6. KuCoin,7. Bitfinex,8. Gemini,9. Bitstamp,10. Poloniex,这些平台均以其安全性、用户体验和多样化的功能著称,适合不同层次的用户进行数字货币交易

推薦的炒幣看行情軟件前十名是:1. OKX,2. Binance,3. Coinbase,4. KuCoin,5. Huobi,6. Crypto.com,7. Kraken,8. Bitfinex,9. Bybit,10. Gate.io。這些app均提供實時的市場數據和交易工具,適合不同層次的用戶使用。

2025年全球十大加密貨幣交易所包括Binance、OKX、Gate.io、Coinbase、Kraken、Huobi、Bitfinex、KuCoin、Bittrex和Poloniex,均以高交易量和安全性著稱。
