搜尋
首頁後端開發Python教學使用Python輕鬆取得Binance歷史交易

使用Python輕鬆取得Binance歷史交易

Apr 12, 2023 pm 10:16 PM
python程式碼binance

使用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複製(不包括 _ 字元)。

使用Python輕鬆取得Binance歷史交易

-starting_date and ending_date:不言自明。期望的格式為mm/dd/yyyy,或使用Python lang語為%m/%d/%Y。

為了取得參數,我們將使用內建函數sys(這裡沒有什麼花俏的地方),為了解析日期,我們將使用datetime函式庫。

使用Python輕鬆取得Binance歷史交易

我們將增加一天並減去一微秒,以使ending_date時間部分始終處於23:59:59.999,這使得獲取當天間隔更加實用。

提取交易

使用Binance的API並使用aggTrades端點,我們可以在一個請求中獲得最多1000 筆交易,如果我們使用開始和結束參數,則它們之間的間隔最多為一小時。

在出現一些失敗之後,透過使用時間間隔來獲取(在某個時間點或另一個時間點,流動性會變得瘋狂,我會失去一些寶貴的交易),我決定嘗試from_id策略。

將aggTrades選擇的端點,因為它回到壓縮產業。這樣,我們將不會失去任何寶貴的資訊。

獲得壓縮的總交易。在同一時間從同一訂單以相同價格執行的交易將匯總數量。

該from_id策略是這樣的:

我們要得到的第一筆交易starting_date 透過發送日期的時間間隔向終點。之後,我們將從第一個取得的交易ID開始取得1000個交易。然後,我們將檢查最後一筆交易是否發生在我們之後ending_date。

如果是這樣,我們已經遍歷了所有時間段,可以將結果儲存到檔案中。否則,我們將更新from_id變數以取得最後的交易ID,然後重新開始迴圈。

取得第一個交易編號

使用Python輕鬆取得Binance歷史交易

#首先,我們建立一個new_end_date。那是因為我們aggTrades是透過傳遞a startTime和endTime 參數來使用。

現在,我們只需要知道該期間的第一個交易編號,因此我們將增加60秒。在低流動性貨幣對中,可以更改此參數,因為不能保證在請求的第一天發生交易。

然後,使用我們的輔助函數解析日期,以使用該calendar.timegm函數將日期轉換為Unix毫秒錶示形式。此timegm函數是首選函數,因為它將日期保留為UTC。

使用Python輕鬆取得Binance歷史交易

請求的回應是按日期排序的貿易物件列表,格式如下:

使用Python輕鬆取得Binance歷史交易

因此,由於我們需要第一個交易ID ,因此我們將傳回該response[0]["a"]值。

主循環

現在我們有了第一個交易ID,我們可以一次提取1000個交易,直到達到ending_date。以下程式碼將在我們的主循環中呼叫。它將使用from_id參數,放棄startDate和endDate參數,並執行我們的請求。

使用Python輕鬆取得Binance歷史交易

現在,這是我們的主循環,它將執行請求並建立我們的DataFrame。

使用Python輕鬆取得Binance歷史交易

我們檢查是否current_time包含最近取得的交易日期大於to_date,如果是,則我們:

  •  使用from_id參數取得交易
  •  使用最新交易中取得的資訊來更新from_id和current_time參數
  • 列印nice偵錯訊息
  •  pd.concat 這些交易與我們之前的交易DataFrame
  •  使用sleep讓Binance不會給我們一個429 HTTP回應

清潔與儲存

#組裝完之後DataFrame,我們需要執行簡單的資料清理。我們將刪除重複trim的交易和之後發生的交易to_date(我們有這個問題,因為我們要獲取1000筆交易中的大部分,因此,我們預計在目標結束日期之後執行一些交易)。

我們可以封裝我們的trim功能:

使用Python輕鬆取得Binance歷史交易

並執行我們的資料清理:

使用Python輕鬆取得Binance歷史交易

現在,我們可以使用以下to_csv方法將其保存到文件中:

使用Python輕鬆取得Binance歷史交易

我們還可以使用其他資料存儲機制,例如Arctic。

最後:驗證你的數據

在使用交易策略時,我們必須信任我們的數據,這一點很重要。透過應用以下驗證,我們可以輕鬆地利用獲取的交易資料來做到這一點:

使用Python輕鬆取得Binance歷史交易

#在程式碼片段中,我們將其轉換DataFrame為NumPy數組,並逐行迭代,檢查交易ID是否每行遞增1。

Binance交易ID是以遞增方式編號的,並且是為每個交易品種創建的,因此,很容易驗證資料是否正確。

PS:創建成功的交易策略的第一步是擁有正確的資料。

以上是使用Python輕鬆取得Binance歷史交易的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python 3.6加載Pickle文件報錯"__builtin__"模塊未找到怎麼辦?Python 3.6加載Pickle文件報錯"__builtin__"模塊未找到怎麼辦?Apr 02, 2025 am 07:12 AM

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何提高jieba分詞在景區評論分析中的準確性?如何提高jieba分詞在景區評論分析中的準確性?Apr 02, 2025 am 07:09 AM

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?如何使用正則表達式匹配到第一個閉合標籤就停止?Apr 02, 2025 am 07:06 AM

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...

如何繞過Investing.com的反爬蟲機制獲取新聞數據?如何繞過Investing.com的反爬蟲機制獲取新聞數據?Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用