banner
stmoonar

stmoonar

无心而为
github
telegram
email
zhihu
x

币安Binance APIの使用(二、取引所のインスタンスとデータ取得)

本文はバイナンス取引所 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 のapiKeysecretを使用しています。他のいくつかのパラメータの意味はそれぞれ以下の通りです:

  • '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))

ここでは、exchangefetch_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 で見るデータはこのようになります:

image

もし 1000 件では足りない場合は、ループとsinceパラメータを使用してさらに前のデータを取得できます。例えば、ここでは 5 分間のデータで隣接データ間のTimestampが 300000 異なるため、sinceBTC_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の値を変更することで、必要な回数のデータを取得できます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。