溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Python輕松獲取Binance歷史交易

發(fā)布時(shí)間:2023-04-13 11:10:03 來(lái)源:億速云 閱讀:137 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“如何使用Python輕松獲取Binance歷史交易”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何使用Python輕松獲取Binance歷史交易”吧!

數(shù)據(jù)頻率和平衡

我想說(shuō),交易數(shù)據(jù)端點(diǎn)主要在99.99%的交易所中提供。它是細(xì)粒度的,提供了足夠的詳細(xì)信息(在某些非常特殊的情況下)用于回測(cè)高頻交易(HFT)策略,并且可以用作 OHLC candles(1S至24H或更多,如果你想要的話)的基礎(chǔ)。

交易數(shù)據(jù)是通用的,并且允許使用不同頻率的策略進(jìn)行大量實(shí)驗(yàn)。

為什么選擇Binance?

那只是因?yàn)樗俏矣捎跀?shù)量龐大而傾向于回溯的交易所之一。

我們將要進(jìn)行的編碼

我們將創(chuàng)建一個(gè)Python腳本,該腳本接收對(duì)符號(hào),開始日期和結(jié)束日期作為命令行參數(shù)。它將包含所有交易的CSV文件輸出到磁盤。該過(guò)程可以通過(guò)以下步驟進(jìn)行詳細(xì)說(shuō)明:

1、解析symbol,starting_date和ending_date論據(jù)。

2、獲取開始日期發(fā)生的第一筆交易,以獲取第一筆交易trade_id。

3、循環(huán)獲取每個(gè)請(qǐng)求1000筆交易(Binance API限制),直到ending_date達(dá)到為止。

4、最后,將數(shù)據(jù)保存到磁盤。對(duì)于示例,我們將其保存為CSV,但是你還有其他選擇,不一定保存為CSV。

5、我們將使用pandas,requests,time,sys,和datetime。在代碼段中,將不會(huì)顯示錯(cuò)誤驗(yàn)證,因?yàn)樗粫?huì)為說(shuō)明添加任何值。

編碼時(shí)間

該腳本將使用以下參數(shù):

1、symbol:交易對(duì)的符號(hào),由Binance定義。可以在此處查詢,也可以從Binance Web應(yīng)用程序的URL復(fù)制(不包括 _ 字符)。

如何使用Python輕松獲取Binance歷史交易

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

為了獲取參數(shù),我們將使用內(nèi)置函數(shù)sys(這里沒(méi)有什么花哨的地方),并且為了解析日期,我們將使用datetime庫(kù)。

如何使用Python輕松獲取Binance歷史交易

我們將添加一天并減去一微秒,以使ending_date時(shí)間部分始終處于23:59:59.999,這使得獲取當(dāng)天間隔更加實(shí)用。

提取交易

使用Binance的API并使用aggTrades端點(diǎn),我們可以在一個(gè)請(qǐng)求中獲得最多1000 筆交易,如果我們使用開始和結(jié)束參數(shù),則它們之間的間隔最多為一小時(shí)。

在出現(xiàn)一些失敗之后,通過(guò)使用時(shí)間間隔獲?。ㄔ谀硞€(gè)時(shí)間點(diǎn)或另一個(gè)時(shí)間點(diǎn),流動(dòng)性會(huì)變得瘋狂,我會(huì)失去一些寶貴的交易),我決定嘗試from_id策略。

將aggTrades選擇的端點(diǎn),因?yàn)樗祷貕嚎s行業(yè)。這樣,我們將不會(huì)丟失任何寶貴的信息。

獲得壓縮的總交易。在同一時(shí)間從同一訂單以相同價(jià)格執(zhí)行的交易將匯總數(shù)量。

該from_id策略是這樣的:

我們要得到的第一筆交易starting_date 通過(guò)發(fā)送日期的時(shí)間間隔向終點(diǎn)。之后,我們將從第一個(gè)獲取的交易ID開始獲取1000個(gè)交易。然后,我們將檢查最后一筆交易是否發(fā)生在我們之后ending_date。

如果是這樣,我們已經(jīng)遍歷了所有時(shí)間段,可以將結(jié)果保存到文件中。否則,我們將更新from_id變量以獲取最后的交易ID,然后重新開始循環(huán)。

取得第一個(gè)交易編號(hào)

如何使用Python輕松獲取Binance歷史交易

首先,我們創(chuàng)建一個(gè)new_end_date。那是因?yàn)槲覀僡ggTrades通過(guò)傳遞a startTime和endTime 參數(shù)來(lái)使用。

現(xiàn)在,我們只需要知道該期間的第一個(gè)交易編號(hào),因此我們將增加60秒。在低流動(dòng)性貨幣對(duì)中,可以更改此參數(shù),因?yàn)椴荒鼙WC在請(qǐng)求的第一天發(fā)生交易。

然后,使用我們的輔助函數(shù)解析日期,以使用該calendar.timegm函數(shù)將日期轉(zhuǎn)換為Unix毫秒表示形式。該timegm函數(shù)是首選函數(shù),因?yàn)樗鼘⑷掌诒A魹閁TC。

如何使用Python輕松獲取Binance歷史交易

請(qǐng)求的響應(yīng)是按日期排序的貿(mào)易對(duì)象列表,格式如下:

如何使用Python輕松獲取Binance歷史交易

因此,由于我們需要第一個(gè)交易ID ,因此我們將返回該response[0]["a"]值。

主循環(huán)

現(xiàn)在我們有了第一個(gè)交易ID,我們可以一次提取1000個(gè)交易,直到達(dá)到ending_date。以下代碼將在我們的主循環(huán)中調(diào)用。它將使用from_id參數(shù),放棄startDate和endDate參數(shù),執(zhí)行我們的請(qǐng)求。

如何使用Python輕松獲取Binance歷史交易

現(xiàn)在,這是我們的主循環(huán),它將執(zhí)行請(qǐng)求并創(chuàng)建我們的DataFrame。

如何使用Python輕松獲取Binance歷史交易

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

  • 使用from_id參數(shù)獲取交易

  • 使用從最新交易中獲取的信息來(lái)更新from_id和current_time參數(shù)

  • 打印nice調(diào)試消息

  • pd.concat 這些交易與我們之前的交易 DataFrame

  • 使用sleep讓Binance不會(huì)給我們一個(gè)429 HTTP響應(yīng)

清潔和保存

組裝完之后DataFrame,我們需要執(zhí)行簡(jiǎn)單的數(shù)據(jù)清理。我們將刪除重復(fù)trim的交易和之后發(fā)生的交易to_date(我們有這個(gè)問(wèn)題,因?yàn)槲覀円@取1000筆交易中的大部分,因此,我們有望在目標(biāo)結(jié)束日期之后執(zhí)行一些交易)。

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

如何使用Python輕松獲取Binance歷史交易

并執(zhí)行我們的數(shù)據(jù)清理:

如何使用Python輕松獲取Binance歷史交易

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

如何使用Python輕松獲取Binance歷史交易

我們還可以使用其他數(shù)據(jù)存儲(chǔ)機(jī)制,例如Arctic。

最后:驗(yàn)證你的數(shù)據(jù)

在使用交易策略時(shí),我們必須信任我們的數(shù)據(jù),這一點(diǎn)很重要。通過(guò)應(yīng)用以下驗(yàn)證,我們可以輕松地利用獲取的交易數(shù)據(jù)來(lái)做到這一點(diǎn):

如何使用Python輕松獲取Binance歷史交易

在代碼段中,我們將其轉(zhuǎn)換DataFrame為NumPy數(shù)組,并逐行迭代,檢查交易ID是否每行遞增1。

Binance交易ID是以遞增方式編號(hào)的,并且是為每個(gè)交易品種創(chuàng)建的,因此,很容易驗(yàn)證數(shù)據(jù)是否正確。

PS:創(chuàng)建成功的交易策略的第一步是擁有正確的數(shù)據(jù)。

到此,相信大家對(duì)“如何使用Python輕松獲取Binance歷史交易”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI