本文はバイナンス取引所 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
の値を変更することで、必要な回数のデータを取得できます。