快速获取csv数量_【数量技术宅|数据爬虫系列分享】如何获取免费的数字货币历史数据...
更多精彩內(nèi)容,歡迎關(guān)注公眾號(hào):數(shù)量技術(shù)宅
數(shù)字貨幣歷史數(shù)據(jù)的重要性
以BTC、ETH為代表數(shù)字貨幣作為一個(gè)新興市場(chǎng),散戶參與度高、市場(chǎng)效率低,表現(xiàn)在價(jià)格上時(shí)常會(huì)走出高波動(dòng)率,和一大波的趨勢(shì)行情。相比較股票、期貨市場(chǎng),數(shù)字貨幣更容易開(kāi)發(fā)出實(shí)盤(pán)盈利能力強(qiáng)的量化投資策略。
我們研究量化策略,拿到歷史數(shù)據(jù)進(jìn)行回測(cè),是第一步。然而,主流的金融平臺(tái)、三方回測(cè)平臺(tái),幾乎都不提供數(shù)字貨幣的歷史數(shù)據(jù),例如萬(wàn)德并不提供OKEX、火幣、幣安等大交易所的數(shù)字貨幣歷史數(shù)據(jù)。
此外,數(shù)字貨幣的數(shù)據(jù),特別是高頻數(shù)據(jù),數(shù)據(jù)量極大,數(shù)字貨幣Tick數(shù)據(jù),最高推送頻率可達(dá)到每秒10筆,每筆150檔買賣盤(pán)口,相比較股票市場(chǎng)3秒/筆,以及期貨市場(chǎng)的0.5秒/筆的推送頻率,可謂是快了很多。第三方平臺(tái)也很難支持如此大規(guī)模、大容量歷史數(shù)據(jù)的讀取。因此,我們研究數(shù)字貨幣量化投資策略,第一步也是最關(guān)鍵的一步,需要自行收集數(shù)字貨幣的歷史數(shù)據(jù),如果收集的是Tick數(shù)據(jù),則還要配備大容量的數(shù)據(jù)存儲(chǔ)設(shè)備。
大周期(日線、小時(shí))K線數(shù)據(jù)的獲取
如果策略僅僅需要相對(duì)大周期的數(shù)字貨幣歷史數(shù)據(jù)進(jìn)行測(cè)試,幸運(yùn)的是,我們可以從一個(gè)http://www.cryptodatadownload.com的地址免費(fèi)的下載到大周期的歷史K線數(shù)據(jù)。該網(wǎng)站提供了免費(fèi)的日線、小時(shí)線的數(shù)字貨幣K線數(shù)據(jù)的下載,數(shù)據(jù)格式是很友好的csv格式,可以直接用Python的Pandas庫(kù)讀入進(jìn)行下一步的處理。
網(wǎng)站覆蓋了主流的歐美、亞太的數(shù)字貨幣交易所,例如CoinBase、Bitfinex、幣安、OKEX等等。我們以Bitfinex為例,提供了BTC/USD、ETH/USD、LTC/USD、LTC/BTC、XRP/BTC這5個(gè)主流貨幣對(duì)的日線以及小時(shí)線的K線數(shù)據(jù)。
我們從Bitfinex交易所提供的數(shù)字貨幣品種中,隨機(jī)選擇一個(gè)BTC/USD的小時(shí)線數(shù)據(jù)下載,打開(kāi)下載好的csv文件可以看到,數(shù)據(jù)包含了我們進(jìn)行量化策略研究所需要的完整K線數(shù)據(jù)字段:時(shí)間、開(kāi)盤(pán)價(jià)、最高價(jià)、最低價(jià)、收盤(pán)價(jià)以及成交量,我們?cè)賹⒃摂?shù)據(jù)讀入Pandas,就能進(jìn)入下一步策略研發(fā)階段了。
利用Python第三方API獲取任意周期K線、Tick歷史數(shù)據(jù)
如果在我們的策略中,要用到比小時(shí)K線更精確的數(shù)據(jù)顆粒,我們就需要調(diào)用API來(lái)開(kāi)發(fā)數(shù)據(jù)接收程序了。我們先來(lái)看一個(gè)強(qiáng)大的Python第三方API:CCXT。CCXT是一個(gè)支持全球120余家主流數(shù)字貨幣交易所的jsp、python、php的三方庫(kù)。在github搜索CCXT,即可查看、下載該三方庫(kù)的源代碼以及說(shuō)明文檔。
CCXT的安裝,我們以技術(shù)宅大部分粉絲熟悉的Python為例,只需要在控制臺(tái)或Anaconda中輸入pip install ccxt(必要時(shí)更換更快速的安裝源)即可完成安裝。
安裝后import ccxt,并print(ccxt.exchanges),如果控制臺(tái)打印出了一系列ccxt支持的交易所的名稱,說(shuō)明此時(shí)ccxt已經(jīng)成功安裝。
我們使用ccxt,能夠獲取到三種類型的行情數(shù)據(jù):OrderBook、PriceTicker、KLine。ccxt接口對(duì)于這三類數(shù)據(jù),都采用Rest的獲取方式,即請(qǐng)求1次、返回1條最新數(shù)據(jù)信息。
首先來(lái)看OrderBook(訂單簿)的數(shù)據(jù)獲取。通過(guò)CCXT的幫助文檔,我們可以查到應(yīng)該調(diào)用API中的哪個(gè)方法,來(lái)獲取OrderBook,而OrderBook獲取方法所返回的數(shù)據(jù)結(jié)構(gòu),是怎么樣的。
通過(guò)API的幫助文檔,我們知道應(yīng)該使用fetch_order_book的方法,傳入我們相要獲取的數(shù)字貨幣幣種symbol作為參數(shù),而返回的是帶有'bids'、‘a(chǎn)sks’、'datatime'等關(guān)鍵數(shù)據(jù)字段的dict格式的數(shù)據(jù)。我們自行編寫(xiě)Python代碼并print驗(yàn)證。
我們?cè)跍y(cè)試代碼時(shí),獲取huobipro(火幣網(wǎng))所有數(shù)字貨幣幣種Orderbook數(shù)據(jù)并打印,從打印結(jié)果來(lái)看,我們成功取到了所有的Orderbook數(shù)據(jù),并且返回的數(shù)據(jù)結(jié)構(gòu)也與說(shuō)明文檔中一致。
接著來(lái)看PriceTicker (逐筆數(shù)據(jù))的獲取方式,同樣先找到幫助文檔對(duì)應(yīng)的API函數(shù)、并閱讀返回結(jié)構(gòu)。
同樣以火幣pro為例,我們調(diào)用API文檔所提示的函數(shù)(方法),獲取BTC/USDT的Ticker數(shù)據(jù)。
對(duì)于Tick數(shù)據(jù),由于包含的字段較多,返回的數(shù)據(jù)內(nèi)容也相應(yīng)較長(zhǎng),我們同樣將其print出來(lái)以驗(yàn)證數(shù)據(jù)結(jié)構(gòu)。
最后一種ccxt支持的數(shù)據(jù)獲取類型是k線數(shù)據(jù)的獲取,我們同樣查詢API文檔,其對(duì)應(yīng)的方法是fetch_ohlcv的方法。該方法傳入兩個(gè)參數(shù),分別是所要獲取數(shù)據(jù)的數(shù)字貨幣品種,以及獲取數(shù)據(jù)所對(duì)應(yīng)的K線周期。在獲取到K線數(shù)據(jù)后,我們將其轉(zhuǎn)換為pandas的DataFrame標(biāo)準(zhǔn)數(shù)據(jù)格式,并將最終的結(jié)果存入csv文件。后續(xù)的回測(cè)模塊只需要讀取該數(shù)據(jù)即可。
如果不存儲(chǔ)csv文件,我們同樣可以將所返回的數(shù)據(jù)打印出來(lái),以此來(lái)驗(yàn)證我們使用接口的方法,是正確的。
利用交易所API,直接獲取交易所推送數(shù)據(jù)
由于ccxt免費(fèi)獲取數(shù)據(jù),只支持Rest的模式,即請(qǐng)求1次、返回1次對(duì)應(yīng)的數(shù)據(jù)。如果我們請(qǐng)求數(shù)據(jù)的頻率低于數(shù)據(jù)發(fā)送的頻率,或是請(qǐng)求由于網(wǎng)絡(luò)問(wèn)題未送達(dá)ccxt,就可能造成行情數(shù)據(jù)的缺失,特別是收集高頻數(shù)據(jù)的時(shí)候,數(shù)字貨幣最高0.1秒/筆的合約高頻數(shù)據(jù),該問(wèn)題將無(wú)限放大。
因此,收集中、高頻數(shù)據(jù)的最佳途徑,是數(shù)字貨幣交易所提供的API。數(shù)字貨幣交易所的直連API,提供除Rest以外的另一種訂閱模式:Websocket。Websocket模式只需要一次訂閱,數(shù)據(jù)更新即推送,接收到的數(shù)據(jù)質(zhì)量相比較Rest更高。
本文技術(shù)宅以O(shè)KEX交易所的Python API接口為例,OKEX的API說(shuō)明可以參考交易所在github發(fā)布的幫助文檔。
OKEX交易所的Websocket demo程序已經(jīng)為我們定義好了基礎(chǔ)的功能函數(shù)。我們對(duì)接API開(kāi)發(fā),只需要調(diào)用功能函數(shù),確定需要訂閱的行情內(nèi)容,就可以立即用python接收到交易所推送的Websocket行情數(shù)據(jù)。我們以O(shè)KEX交易所Websocket接口,獲取ETH-USDT的Tick數(shù)據(jù)為例,一次訂閱,實(shí)現(xiàn)數(shù)據(jù)的不斷推送,為檢查數(shù)據(jù)推送功能是否正確,我們將接收到的Tick數(shù)據(jù)打印在控制臺(tái),當(dāng)然有興趣使用該數(shù)據(jù)做回測(cè)的同學(xué),也可以將接收到的數(shù)據(jù),落地到本地的數(shù)據(jù)庫(kù)。
以上,就是我們本文分享的所有內(nèi)容。總結(jié)一下,對(duì)于數(shù)字貨幣大周期的K線,我們可以采用三方網(wǎng)站直接下載獲取,而對(duì)于小周期的K線、甚至是Tick數(shù)據(jù),更推薦大家使用ccxt、或交易所API獲取。
如果對(duì)本次技術(shù)宅分享的內(nèi)容感興趣或有疑問(wèn),歡迎評(píng)論區(qū)留言與小編交流。
“數(shù)量技術(shù)宅”往期分享干貨
數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|量化投資策略系列分享】擺脫打工人命運(yùn)之成熟交易者期貨持倉(cāng)跟隨策略?zhuanlan.zhihu.com數(shù)量技術(shù)宅:多周期共振量化交易策略?zhuanlan.zhihu.com數(shù)量技術(shù)宅:為什么中證500(IC)是最適合長(zhǎng)期做多的股票指數(shù)?zhuanlan.zhihu.com數(shù)量技術(shù)宅:大宗商品現(xiàn)貨數(shù)據(jù)不好拿?商品季節(jié)性難跟蹤?Python爬蟲(chóng)一鍵解決沒(méi)煩惱?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|金融數(shù)據(jù)分析系列分享】如何正確抄底商品期貨、大宗商品?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|量化投資策略系列分享】股指期貨IF分鐘波動(dòng)率統(tǒng)計(jì)策略?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅 | Python爬蟲(chóng)系列分享】實(shí)時(shí)監(jiān)控股市重大公告的Python爬蟲(chóng)?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的快速获取csv数量_【数量技术宅|数据爬虫系列分享】如何获取免费的数字货币历史数据...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 爬虫软件python彻底卸载_Pytho
- 下一篇: 如何判断两个平面相交_七年级下册相交线与