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

2021-10-06 06:33:39 字數 3294 閱讀 8214

在制定交易策略時,即使用過去的資料執行我們的策略並分析收益和其他重要因素時,我們必須確保我們擁有合適的資料型別。鑑於某些策略需要一定水平的技術資料,而其他資料可能只需要花費乙個小時的時間,該過程並不總是那麼簡單,而基礎架構,可用性和連線性等元素可能會因資料型別的不同而大相徑庭。

資料頻率和平衡

我想說,交易資料端點主要在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,如果是,則我們:

清潔和儲存

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

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

並執行我們的資料清理:

現在,我們可以使用以下to_csv方法將其儲存到檔案中:

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

最後:驗證你的資料

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

在**段中,我們將其轉換dataframe為numpy陣列,並逐行迭代,檢查交易id是否每行遞增1。

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

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

文源網路,僅供學習之用,侵刪。

python中bin函式如何使用?

二進位制對於大家再熟悉不過了,它是我們計算機程式設計中必要的語言,只有將其他進製轉換為二進位制,計算機才得以工作。本文主要介紹能夠返回二進位制表示的bin 函式,bin 函式用於獲取數字的二進位制值,接受數字並返回等效的二進位制字元。具體請看下文。1 bin 函式 是python的乙個內建函式,主要...

Windows XP中輕鬆獲取未使用的IP位址

在我們解決windows 作業系統的dhcp故障時,有時要找出某個位址範圍內有哪些位址沒有被使用。只需建立乙個批處理檔案,要求它只返回那些未用的ip位址,然後再將 命令 的結果輸入到乙個文字檔案中。作為網管員,在我們解決windows 作業系統的dhcp故障時,有時要找出某個位址範圍內有哪些位址沒有...

python計算bin檔案CRC

usr bin env python coding utf 8 import binascii import os import sys def crc2hex crc res for i in range 4 t crc 0xff crc 8 res 02x s t,res return res ...