Binanceから仮想通貨のデータ取得してみた

Binance(バイナンス)とは

1日の取引量は3兆円を超えており、取引所取引高ランキングでは何度もNo.1に輝いており、300種類以上のアルトコインが購入可能な取引所

概要

仮想通貨のレートを取得して、データ分析を行いたい。

方法

Binanceのアカウントの作成


参考 : Binanceでアカウントを登録および確認する方法

Binance API の作成

上記URLを参考に作成します。

python-binanceをpipでインストールする

pip install python-binance

.envファイルを作成

api_key=hoge
api_secret=hoge

クライアントを初期化

使用ライブラリをインポートする

import pandas as pd
from binance.client import Client
import os
from dotenv import load_dotenv

envファイルの読み込んで、apiの取得

# .envファイルの内容を読み込みます
load_dotenv()

api_key=os.environ['api_key']
api_secret=os.environ['api_secret']

クライアントにapiをセット

client = Client(api_key, api_secret)

APIからKline/ローソク足のヒストリカルデータを取得

BinanceのAPIから過去データを入手します。

klines_BTC = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_1HOUR, '1 Jan, 2018')

引数には通貨ペア(BTCUSDT,ETHUSDT,BNBBTC…)、時間幅
期間(start time ,end time(終わりを書かなければ現在時刻まで))
を指定します。戻り値としてOHLCV value(list型)が返される。

[[1514764800000,
  '13715.65000000',
  '13715.65000000',
  '13400.01000000',
  '13529.01000000',
  '443.35619900',
  1514768399999,
  '5993909.83603800',
  5228,
  '228.52192100',
  '3090541.10576949',
  '0'],
....
  • 時間幅パラメータ

(1,3,5,15,30)分足:KLINE_INTERVAL_(1,3,5,15,30)MINUTE
(1,2,4,6,8,12)時間足:KLINE_INTERVAL_(1,2,4,6,8,12)HOUR
(1,3)日足:KLINE_INTERVAL_(1,3)DAY
一週間足:KLINE_INTERVAL_1WEEK
月足:KLINE_INTERVAL_1MONTH

  • 期間
    UTCフォーマットでの記入
    例:1 Dec, 2017 1 Jan, 2018

  • OHLCV value

Time – 時間(UNIX時間)
Open – 始値
High – 高値
Low – 安値
Close – 終値
Volume – 出来高(BTC換算)
Close Time – その足の終了時間(UNIX時間)
Quote Volume – 出来高(USDT換算)
Number of Trades – トレード数
Taker buy base asset volume – 板についた注文に対応した人が買手だったトレードの出来高(BTC換算)
Taker buy quote asset volume – 板についた注文に対応した人が買手だったトレードの出来高(USDT換算)
Ignore – 無視してよい

OHLCV valueをDataFrameに変更

df_BTC = pd.DataFrame(klines_BTC, columns = ['Time', 'Open', 'High', 'Low', 'Close', 
'Volume', 'Close Time', 'Quote Volume', 'Number of Trades', 
'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore'])
df_BTC.head()

TimeをUnix表記から日本時間に変更

df_BTC['Time'] = pd.to_datetime(df_BTC['Time'].astype(int), unit='ms')
df_BTC.head()

csvファイルに保存

df_BTC.to_csv('Data/BTCUSDT_hourly.csv')

データ分析用にさまざまなデータを取得

定義

2018年 1月1日から2022年5月1日までのデータ

start_time = '1 Jan, 2018'
end_time =  '1 May 2022'

通貨 : BTC,ETH,BNB,XRP(すべてUSDTとの取引)
期間 : 1分足,5分足,1時間,1日

symbol_list = ['BTCUSDT','ETHUSDT', 'BNBUSDT','XRPUSDT']
interbal_list=[Client.KLINE_INTERVAL_1MINUTE,Client.KLINE_INTERVAL_5MINUTE,Client.KLINE_INTERVAL_1HOUR,Client.KLINE_INTERVAL_1DAY]

それぞれをcsvに保存(かなりの時間がかかります)

for symbol in symbol_list:
    for interbal in interbal_list:
        print(f"Reading {symbol}_{interbal} data")
        klines = client.get_historical_klines(symbol, interbal, start_time,end_time)
        
        # DataFrameに変更
        df = pd.DataFrame(klines, columns = ['Time', 'Open', 'High', 'Low', 'Close', 
'Volume', 'Close Time', 'Quote Volume', 'Number of Trades', 
'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore'])
        
        # 時間を日本時間に
        df['Time'] = pd.to_datetime(df['Time'].astype(int), unit='ms')
        
        # csvに保存
        df.to_csv(f'Data/{symbol}_{interbal}.csv', encoding='utf_8_sig',index=False)
        print(f"Finished reading {symbol}_{interbal} data")

参考

http://algotrade-for-everyone.com/2021/07/14/binance-get-historic-data/