本文はバイナンス取引所 API 使用の第二篇で、主にccxtライブラリを使用して取引所をインスタンス化し、過去の K 線データを取得する方法を紹介します。まだバイナンスに登録していない場合は、私の招待リンクを使用して登録してください😘、取引手数料の割引も得られます:https://accounts.binance.com/register?ref=DPVSZVI3
1. ccxt#
プロジェクトアドレス:https://github.com/ccxt/ccxt
ccxtは、暗号通貨取引と電子商取引のための JavaScript / Python / PHP / C# ライブラリで、多くのビットコイン / イーサリアムなどの暗号通貨取引所の API をサポートしています。
このチュートリアルでは Python 言語を使用し、pipまたはcondaでインストールします。
pip install ccxt
# または
conda install ccxt
サポートされている取引所を確認する:
import ccxt
print(ccxt.exchanges) # 利用可能なすべての取引所クラスのリストを表示
(ccxtにはドキュメントがありますが、あまりにもひどいので、最初に使ったときはドキュメントを読むのに大変苦労しました。だからこの一連のブログを書こうと思ったのです。)
2. 取引所インスタンスの初期化#
exchange = ccxt.binance({
'apiKey': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'timeout': 30000,
'enableRateLimit': True,
'options': {'defaultType': 'future'}
})
exchange.load_markets()
ここではccxt.binanceクラスをインスタンス化し、前に作成した API のapiKeyとsecretを使用しています。他のいくつかのパラメータの意味はそれぞれ以下の通りです:
'timeout'はリクエストのタイムアウト時間で、単位はミリ秒です。この時間内にリクエストが応答しない場合、タイムアウトエラーが発生します。'enableRateLimit'はブール値で、True に設定すると ccxt ライブラリは取引所のレート制限を尊重し、過剰なリクエストを送信しないようにします。'options'は辞書で、いくつかの追加オプションを設定するために使用されます。ここでは、'defaultType': 'future'はデフォルトの取引タイプが先物または契約であることを示し、現物取引タイプが必要な場合は値を'spot' に設定します。
exchange.load_markets()メソッドは、バイナンス取引所からすべての利用可能な市場データをロードするために使用されます。このメソッドは通常、取引を開始する前に呼び出され、最新の市場データがあることを確認します。
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))
ここでは、exchangeのfetch_ohlcv()メソッドを使用して必要な K 線データを取得しています。使用するパラメータは以下の通りです:
-
symbolは str 型で、取得するデータの対象シンボルです。例えば、BTC/USDTはビットコイン対 USDT の価格を示します。 -
timeframeも str 型で、取得する K 線の時間スケールを示します。例えば、5 分間は5m、1 日は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 で見るデータはこのようになります:
もし 1000 件では足りない場合は、ループとsinceパラメータを使用してさらに前のデータを取得できます。例えば、ここでは 5 分間のデータで隣接データ間のTimestampが 300000 異なるため、sinceをBTC_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の値を変更することで、必要な回数のデータを取得できます。