BinanceのAPIの有効化

コラム

APIは簡単にいうと情報を共有する仕組みですが、多くの取引所がAPIを通して様々な情報を提供しています。
取引所のAPIと連携させポートフォリオを管理するアプリなどもあり、プログラミングを行わない方でも利用方法自体を知っておいて良いと思います。

前提

今回はBinanceのAPIについて扱うので、Binanceのアカウントを開設していることが前提です。

APIの有効化

トップページの上部右側にある人形のアイコンをクリックし、自身のアカウントのページに移動します。

アカウントページ内の「API」の項目にある「Enable」をクリックし、有効化のプロセスに入ります。

APIの有効化にあたって名前をつける必要があります。名前が決まったら入力し、「Create new key」のボタンをクリックします。

この後、メールでの確認などが行われるのでメールに貼られたリンクをクリックするなど指示された手順に従ってください。

確認が終了すれば「API Key」と「Secret Key」が生成されます。

注意点

まず、Secret Keyは生成時にのみ表示されるもので、後に確認できないものなので表示された際に確りと保存するなりしておきましょう。

もう一点、「Option」の項目に「Enable Withdrawals」とありますが、引き出しの権限が必要ない場合はチェックを外しておいた方が良いでしょう。

以上でAPIの有効化は終了です。アプリとAPIを連携させる場合などは、上記の手順で生成したAPIキーなどを適宜入力すれば良いと思います。

付録

Pythonを利用し、APIから情報を取得してみます。

python-binance

python-binanceというライブラリを開発してくださっている方々がいらっしゃるので、利用させていただきます。

ドキュメントはここです。

インストール

pipを利用してライブラリのインストールを行います。

pip install python-binance

利用にあたって

まずはライブラリのインポートし、APIを有効化した際に表示されたAPIキーとシークレットキーを利用してクライアントの初期化を行います。

from binance.client import Client

api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
secret_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

client = Client(api_key, secret_key)

簡単なグラフ化

色んなエンドポイントが用意されていますが、所有している資産の構成を円グラフ化してみようと思います。
利用するのはこのあたりです。

account_info = client.get_account()
tickers = client.get_all_tickers()

あとはこんな感じで。

df_balances = pd.DataFrame(account_info['balances'])

df_balances['sum'] = df.apply(lambda x: float(x['free']) + float(x['locked']), axis=1)

df_balances = df_balances[df_balances['sum'] > 0]

df_tickers = pd.DataFrame(tickers)

df_tickers['price'] = df_tickers['price'].astype(float)

df_balances['btc'] = df_balances.apply(lambda x: float(df_tickers[df_tickers['symbol'] == x['asset'] + 'BTC']['price']), axis=1)

BTCUSDT = float(df_tickers[df_tickers['symbol'] == 'BTCUSDT']['price'])

df_balances['jpy'] = df_balances.apply(lambda x: x['sum'] * x['btc']  * BTCUSDT * 110.60, axis=1)

matplotlibを利用して描画します。

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.pie(df_balances['jpy'], labels=df_balances['asset'], startangle=90, counterclock=False)