筆者在前幾篇文章中經常提到回測各種策略在比特幣的表現,但筆者忽略了有些讀者不知從何獲取比特幣價格數據,進而無法進行回測。筆者將介紹2種可以獲取比特幣價格數據的方式,讀者請自行選擇能夠解決你個人需求的方式。
第一種方式:從網站上下載
網站1:investing.com

在蒐索欄中輸入"BTC/USD"就會出現以上選擇,根據你想要那家交易所的比特幣價格進行選擇,不同交易所的比特幣價格都會有些微差距,數據來源最好選擇你用來進行交易的交易所。

具體步驟:
- 點擊 "GENERAL"
- 選擇“Historical Data”
- 選擇你想要獲取那個時間段的比特幣價格數據 (僅支持日,週,月)
- 設置獲取比特幣數據的範圍
- 下載數據
- 打開下載好的EXCEL後,裡麵的數據是從新到舊排序,讀者需要自行處理數據。
優點
- 操作簡單,容易上手。
- 僅支持比特幣幣本位數據(BTC/USD)
缺點
- 無法獲取分鐘,小時級別的比特幣數據。
- 無法獲取比特幣U本位的數據(BTC/USDT)。
- 如讀者想要獲取其他虛擬貨幣的價格數據,可能此網站沒有提供該幣種價格數據。
網站2:https://data.binance.vision/
第一步:筆者可以自行選擇需要的數據如

期貨數據 - futures
期權數據 - option
現貨數據 - spot
第二步:選擇U本位或幣本位

cm : COIN-Margined (COINM) 也可以稱之爲“幣本位”, "BTC/USD"
um : USDⓂ-Margined (USDM) 也可以稱之爲“U本位”, "BTC/USDT"
第三步:選擇數據範圍

daily 就是 1天的數據 (這裡的1天不是指你想要獲取的數據的時間級別,而是指時間範圍)
1天有24小時,假設讀者在這裡選擇daily,下下一步才是選擇你想要獲取的數據的時間級別,假設讀者在下下一步選擇1h,那你最後下載的EXCEL就會有24根1小時的K線數據
以此類推,monthly 就是 一個月的數據 (這裡的1個月不是指你想要獲取的數據的時間級別,而是指時間範圍)
1個月有720小時,假設讀者在這裡選擇monthly,下下一步才是選擇你想要獲取的數據的時間級別,假設讀者在下下一步選擇1h,那你最後下載的EXCEL就會有720根1小時的K線數據
第四步:選擇數據類型

價格數據爲“KLINES", 如讀者對其他的數據感興趣,請自行研究~
第五步:選擇幣種

筆者將以比特幣數據進行示範:

選擇後麵沒有帶日期的,BTCUSDT/ 代表着永續合約。有日期的代表着交割合約,想必有接觸股票的讀者應該比筆者還熟悉交割合約吧!而這也是虛擬貨幣和股票的不同之處。
第六步:選擇數據的時間級別

這次則是筆者想要獲得的時間範圍了,按需求自行選擇:
h - hour - 小時
m - minute - 分鐘
第七步:下載ZIP FILE(後麵沒有CHECKSUM的)

經過以上步驟,讀者便可獲取比特幣數據。
優點:
- 可以獲取所有虛擬貨幣的價格數據(數據源 - 幣安Binance)。
- 可以獲取所有分鐘至小時級別的數據。
缺點:
- 假設讀者需要大範圍的數據,讀者需自行拼接數據。
當然,讀者能堅持閱讀到這裡,想必是有此需求或者想了解如何解決上方方法的痛點。
接下來筆者將介紹第二種獲取比特幣價格數據的方式,並且其能完美解決上方所述方法的痛點。
第二種方式:通過HTTP請求,跟交易所拿數據
這一步驟需要通過PYTHON代碼來實現。假設讀者具有PYTHON代碼能力,可以直接看步驟三。新手讀者則需自行去安裝PYTHON在自己的電腦上,可以考慮安裝3.12.4之後的PYTHON版本,並選擇且安裝一個你喜歡的PYTHON IDE。(YOUTUBE上很多教程喲~)
假設讀者已經安裝好python和 python IDE後,你可以創建一個PYTHON FILE在你安裝的PYTHON IDE 如: Vscode,Pycharm,Jupyter notebook, Spyder等以便安裝庫(INSTALL PACKAGES).
步驟一:通過CMD進行安裝庫的操作 (FOR WINDOWS ONLY) / 在IDE創建虛擬環境後在terminal 輸入以下指令進行安裝。
- 先安裝PIP:python get-pip.py
- 然後 PIP INSTALL PANDAS
- 和 PIP INSTALL REQUESTS
步驟二: 導入庫
import requests
import datetime
import pandas as pd
步驟三:在幣安API文檔找到接口 (相當於流浪者想跟收容所討飯吃,流浪者也需要知道收容所會在何地給予食物),接口就是交易所的地址,獲取K線數據 = 跟交易所討飯吃
base endpoint is: https://fapi.binance.com 這個是U本位期貨數據的總接口。
下方圖片展示出了獲取K線數據的接口“/fapi/v1/klines”,需要通過GET請求獲取。

*總接口: https://fapi.binance.com是所有關於U本位期貨數據
*K線數據的接口“/fapi/v1/klines”是U本位期貨數據中的其中一個數據罷了

運行上方代碼後會打印出 “200“
若打印出 “ConnectTimeout: HTTPSConnectionPool(host=''fapi.binance.com'', port=443): Max retries exceeded with url: /fapi/v1/klines?symbol=BTCUSDT&interval=1h&limit=1000 (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x00000214748FDA60>, ''Connection to fapi.binance.com timed out. (connect timeout=None)''))”的情況,請使用VPN,並將地區轉換爲日本,再重新運行代碼。
讀者可根據自己的需求,在INTERVAL選擇所需要的時間級別,獲取對應的K線數據。
步驟四:獲取最新1000條K線數據

步驟五:通過WHILE LOOP進行分頁請求,以便一次性獲取指定範圍的數據。
最後,將數據存儲爲CSV FILE / JSON 文件就好啦。
# 將過濾後的數據保存爲CSV文件
df.to_csv('BTCUSDT_1h.csv', index=False)
print("數據已成功保存爲CSV文件")
閱讀到這裡的讀者,筆者是否有解決到你所麵對的睏境呢?
有的話,請給此文章按一個大大的愛心並追踪筆者。
您的支持就是我保持更新的最大動力喲~
(若想直接獲取完整的代碼,請聯繫筆者)