banner
stmoonar

stmoonar

无心而为
github
telegram
email
zhihu
x

币安Binance API使用(二、交易所實例及數據獲取)

本文是幣安交易所 API 使用的第二篇,主要介紹如何使用ccxt實例化交易所並獲取歷史 K 線數據,如果還沒有註冊幣安的話,歡迎使用我的邀請鏈接註冊😘 ,還可以獲得交易手續費減免https://accounts.binance.com/register?ref=DPVSZVI3

1. ccxt#

項目地址:https://github.com/ccxt/ccxt

ccxt是一個用於加密貨幣交易和電子商務的 JavaScript / Python / PHP / C# 庫,支持許多比特幣 / 以太坊等加密貨幣交易所的 API。

本教程使用 python 語言,使用使用pipconda安裝

pip install ccxt
# or
conda install ccxt

查看支持的交易所:

import ccxt
print(ccxt.exchanges) # print a list of all available exchange classes

(雖然ccxt有文檔,但是感覺寫的太爛了,一開始用的時候看文檔費了很大勁,所以才想寫這一系列博客。)

2. 交易所實例初始化#

exchange = ccxt.binance({
    'apiKey': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'timeout': 30000,
    'enableRateLimit': True,
    'options': {'defaultType': 'future'}
})
exchange.load_markets()

這裡實例化了一個ccxt.binance類,用到了我們前面創建的 API 的apiKeysecret,其它幾個參數的意思分別是:

  • 'timeout'是請求超時時間,單位是毫秒。如果在這段時間內請求未得到響應,那麼將會拋出一個超時錯誤。
  • 'enableRateLimit'是一個布爾值,如果設置為 True,那麼 ccxt 庫將會尊重交易所的速率限制,避免發送過多的請求。
  • 'options'是一個字典,用於設置一些額外的選項。在這裡,'defaultType': 'future'表示默認的交易類型是期貨或者說合約,如果需要現貨交易類型就把值設置為'spot'。

exchange.load_markets()這個方法,用於從 Binance 交易所加載所有可用的市場數據。這個方法通常在開始交易之前調用,以確保有最新的市場數據。

3. 獲取 K 線數據#

為了方便對數據進行處理,我們需要用到pandas庫,使用命令pip install pandas安裝,然後再import pandas as pd引入這個庫,之後就可以用pd來調用裡面的類和方法了。

BTC_df= pd.DataFrame(exchange.fetch_ohlcv(symbol='BTC/USDT', timeframe='5m', limit=1000))

這裡使用exchangefetch_ohlcv()方法來獲取我們需要的 K 線數據,其中用到的參數有:

  • symbol是 str 類型,是我們需要獲取數據的標的符號,如BTC/USDT標識比特幣對 USDT 的價格。

  • timeframe也是 str 類型,表示我們需要獲取的 K 線的時間尺度,例如 5 分鐘 ——5m,一天 ——1d(默認值為 1m)。

  • limit是 int 類型,表示獲取數據的條數,上限似乎是 1500 還是 1000,這個我沒有測試,大家可以試試看。

  • 此外還有:

    • since:int 類型,表示開始獲取數據的 timestamp。
    • params:字典,存放額外的參數,一般用不到。

上面的示例代碼就是獲取比特幣對 USDT 的最近 1000 條(沒有since參數默認就是最近的limit條數據)5 分鐘級別 K 線數據。

得到的每一條數據依次包含以下條目:'Timestamp'(時間戳), 'Open'(開盤價), 'High'(最高價), 'Low'(最低價), 'Close'(收盤價), 'Vol'(交易量)。

為了方便對這些數據進行處理,我們使用pandas設置一下列名:

BTC_df = pd.DataFrame(exchange.fetch_ohlcv('BTC/USDT', timeframe='5m', limit=1000))
BTC_df.columns = ['Timestamp', 'Open', 'High', 'Low', 'Close', 'Vol']

在 Jupiter NoteBook 裡面看到的數據就是這樣:

image

如果 1000 條不夠用的話,可以使用循環以及since參數獲取更前的數據,例如這裡我們可以看到在 5 分鐘級別數據上,相鄰數據之間Timestamp相差 300000,因此我們可以指定sinceBTC_df['Timestamp'][0]-1000*300000來獲取更早的 1000 條數據,並和後面的數據拼接起來,代碼如下:

COUNT = 3  # 需要獲取數據的次數
BTC_df = pd.DataFrame(exchange.fetch_ohlcv(symbol='BTC/USDT', timeframe='5m', limit=1000))
for i in range(COUNT - 1):
    BTC_df = pd.concat([pd.DataFrame(exchange.fetch_ohlcv(symbol='BTC/USDT', 
                                                          timeframe='5m', 
                                                          since=COIN_df['Timestamp'][0]-1000*300000,
                                                          limit=1000)), BTC_df], ignore_index=True)
    time.sleep(1)
BTC_df.columns = ['Timestamp', 'Open', 'High', 'Low', 'Close', 'Vol']

通過修改變量COUNT的值,就可以獲取相應次數的數據。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。