仮想通貨の時系列データを取得する

時系列データ / 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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA