時系列データ / Historical Data / 過去データ
Binanceの時系列データ
時系列データが欲しい人は、おそらく自分で分析したい人だと思います。となると、種類がいっぱいあったほうがいい。というわけで、私はBinanceの過去データを使ってます。
ココに行って、ほしい時系列データ(Historical Data)をダウンロードしましょう。
ただし、Binanceは円のペアを扱っていない!BTC/JPYやETH/JPYはないので、その点注意してください。
また、ドルもないのですが、バイナンスドル(BUSD)ペアで代替可能かと思います。対ドルのETHが欲しい場合は、ETH/BUSDです。
ファイルフォーマット
時間データ(Open日時/Close日時)は、エポックミリ秒という形で入っています。
また、ヘッダは入っておらず、以下のリンクから情報を得ました。
https://stackoverflow.com/questions/50374993/what-are-the-column-header-names-in-from-historical-klines-websocket-in-binance
Pythonで取り込む場合、以下のコードを参考にしてください。
import os
import pandas as pd
import datetime as dt
# データ読み込み
data = pd.read_csv('ETHBTC-5m-2022-09-22.csv', header=None)
data.columns = [
'open_time'
, 'Open', 'High', 'Low', 'Close'
, 'Volume'
, 'close_time'
, 'qav'
, 'num_trades'
, 'taker_base_vol'
, 'taker_quote_vol'
, 'ignore'
]
# open_timeをインデックスにセット
data = data.set_index(
pd.to_datetime(
data['open_time']/1000
, unit='s', utc=True
)
)
# 不要カラム削除
data = data.drop(columns=['open_time','close_time','ignore'])
# 確認
print(data[:2])
# 日本のタイムゾーン
print(data.tz_convert('Asia/Tokyo')[:2])
APIで取得(要Binanceアカウント)
もしBinanceにアカウントがあれば、APIで取得できます。
APIキーが必要になります。アカウントを作成したら、アカウント管理画面からAPIキーを作成しましょう。
まずは、PythonにBinanceのライブラリをインストールします。
$ pip3 install python-binance
次のコードを参考に、ローソク足データを取得してみてください。ちなみに、間隔設定は以下の通りです。
KLINE_INTERVAL_4HOUR : 4時間足
KLINE_INTERVAL_1HOUR : 1時間足
KLINE_INTERVAL_5MINUTE : 5分足
その他、ココを参考にしてください。直接’5m’とかを指定してもOKです。
# ライブラリ読み込み
from binance.client import Client
# APIキー設定
api_key = 'Binanceから発行されたAPI Key'
api_secret = 'Binanceから発行されたSecret Key'
# Client作成
client = Client(api_key, api_secret)
# ローソクチャートのデータ取得(4時間足)
data = \
pd.DataFrame(
client.get_historical_klines(
"ETHBTC"
, Client.KLINE_INTERVAL_4HOUR
, "2022-09-20"
, "2022-09-21"
)
)
関数にしたものもご参考までに載せておきます。
import pandas as pd
import yaml
from binance.client import Client
def GetHistoricalData_Binance(api_key, api_secret, pair, sdt_from, sdt_to, interval, f_timezone_tokyo = False) :
# interval : 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1s, 1M
# sdt : yyyy-mm-dd 形式の文字列
# f_timezone_tokyo : Trueの場合、東京時間にする
# Client作成
client = Client(api_key, api_secret)
# ローソクチャートのデータ取得
data = \
pd.DataFrame(
client.get_historical_klines(
pair
, interval
, sdt_from
, sdt_to
)
)
# 成形
data.columns = [
'open_time'
, 'open', 'high', 'low', 'close'
, 'volume'
, 'close_time'
, 'qav'
, 'num_trades'
, 'taker_base_vol'
, 'taker_quote_vol'
, 'ignore'
]
data = data.drop(columns=['close_time','ignore'])
# open_timeをインデックスにセット
data = data.set_index(
pd.to_datetime(
data.open_time/1000
, unit='s'
, utc=True
)
)
data = data.drop(columns=['open_time'])
# 日本のタイムゾーンに変換する場合
if f_timezone_tokyo == True :
data = data.tz_convert('Asia/Tokyo')
return data