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'],
....
時間幅パラメータ
期間
UTCフォーマットでの記入
例:1 Dec, 2017 1 Jan, 2018
OHLCV value
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")