ビットバンクのAPIにリアルタイム情報受け取ることができるリアルタイムAPIが用意されています。今回はそのAPIを使ってみましたので紹介します。
私もしっかり理解して使用している訳ではないので、使ってみるとどうなるのかの参考にしていただきたいです。
思ったよりも簡単にできました。
ビットバンクの口座が無いと発注などの操作は使用できませんので、自動売買をするには口座開設を先に行う必要があります。
ビットバンクのサイトへ → 仮想通貨ならビットバンク
ビットバンクのリアルタイムAPI
取得できる情報
ビットバンクの用意しているリアルタイムAPIでは、以下の情報を取得することができます。
- ティッカー情報
- 約定履歴
- 板情報の差分
- 板情報
この4つの情報をリアルタイムで取得する事ができ、ビットバンクのリアルタイムAPIでは資産情報や注文情報など個人の情報は取得しないので、APIキーは必要ありません。
このリアルタイムの価格情報を取得することで、仮想通貨の自動売買などに役立てる事が可能です。
使用方法
リアルタイム情報を取得するにはsoketioというライブラリを使用します。
これまでは1分足データなど欲しいデータをこちらから指定して、サーバーから指定したデータが返ってくるという流れでしたが、soketioでは一度サーバーと接続を行うとリアルタイムデータが次々と送られてきます。
その送られてきたデータから必要な情報を抽出し、トレードなどに使用します。
soketioとは
公式ページには以下のように書かれています。
Socket.IOは、クライアントとサーバー間の低遅延、双方向、およびイベントベースの通信を可能にするライブラリです。
https://socket.io/docs/v4/ 原文を翻訳しました。
これだけだとよくわかりませんが、クライアントとサーバーでの双方向通信を行うための仕組みということです。チャットのアプリは、この仕組みを利用しているものがあるようです。
チャットをクライアントからサーバーへ送信し、サーバーから宛先のクライアントへ送信を行うという流れを考えると、クライアントとサーバーの双方向通信というのは理解できますね。
イベントベースというのは、簡単にいうと何かしらのアクションがあった場合に動作するというイメージです。
チャットの例だとサーバーがクライアントからのチャットを受信すること、逆にクライアントがサーバーからのチャットを受信することがイベントとなります。
ビットバンクからチャットが一方的に、連続で送られてくるようなイメージになります。
リアルタイムAPIを使ってみる
百聞は一見にしかずで、実際にビットバンクのリアルタイム情報を取得してみます。
soketioライブラリをインストールする
soketioを使用するにはライブラリをインストールする必要があります。以下のコマンドをコマンドプロンプトに打ち込んで実行させます。
pip install "python-socketio[client]"
もし開発環境の構築が行われていない方はこちらも参照ください。
soketioでビットバンクからデータを受け取る
ビットバンクのサーバーとsoketioで接続して情報を取得するサンプルコードです。
コピペで動きます。
import socketio
# インスタンスの作成
sio = socketio.Client(reconnection=True, reconnection_attempts=0, reconnection_delay=1, reconnection_delay_max=30)
# 接続時の動作
@sio.event
def connect():
print('接続しました')
sio.emit('join-room','ticker_btc_jpy') #ティッカー情報
sio.emit('join-room','transactions_btc_jpy') #約定履歴
sio.emit('join-room','depth_diff__btc_jpy') #板の差分情報
sio.emit('join-room','depth_whole_btc_jpy') #板情報
# 情報取得時に動作する関数
@sio.event
def message(data):
print(data)
# 切断時の動作
@sio.event
def disconnect():
print('切断されました')
# 接続処理
sio.connect('wss://stream.bitbank.cc', transports = ['websocket'])
# データが送られてくるのを待つ
sio.wait()
データを受け取って画面に表示するだけなのでシンプルなプログラムになっています。実際に実行すると以下のようなデータが次々と送られてくると思います。
先ほどのプログラムでは、ビットバンクのリアルタイムAPIで得られる全ての情報(ティッカー情報など)を取得していますが、実際に使用する際にはあなたが必要とするものだけを取得すればOKです。(必要なものだけ取る方法も解説しています)
コードの解説
簡単にですがコードの解説を上から順に行います。
import socketio
インストールしたsoketioを読込みますが、もしここでエラーが発生した場合は、soketioがインストールが正しくできていない可能性がありますので確認してください。
# 接続時の動作
@sio.event
def connect():
print('接続しました')
sio.emit('join-room','ticker_btc_jpy') #ティッカー情報
sio.emit('join-room','transactions_btc_jpy') #約定履歴
sio.emit('join-room','depth_diff__btc_jpy') #板の差分情報
sio.emit('join-room','depth_whole_btc_jpy') #板情報
接続時に実行される部分です。
どんなデータを取得するかをビットバンクの公式ドキュメントを参考に「ticker_btc_jpy」などで指定します。
実際に使用する際には4種類の内、必要なものだけを残してあとは削除してしまえばOKです。
# 情報取得時に動作する関数
@sio.event
def message(data):
print(data)
データ受信した際に実行される関数です。受信したデータは変数「data」に入れられprintで画面上に出力します。
# 切断時の動作
@sio.event
def disconnect():
print('切断されました')
切断時に実行される関数です。今回の例では切断動作が無いため意図的には実行されませんが、通信上切断されることがちょくちょくありますのでその際にも実行されます。
ただ自動的に再接続されるのでそれほど問題は発生しません。
# 接続処理
sio.connect('wss://stream.bitbank.cc', transports = ['websocket'])
接続の処理です。URLを設定し接続方法を指定して接続を行います。transportsはwebsoketを指定します。
# データが送られてくるのを待つ
sio.wait()
次のデータが送られてくるまで待つ処理です。
メインの動作もここで止まってデータの受信を待つ事になるので、他にも行いたい処理がある場合は、これ以降に書くと実行されないので注意が必要です。
ビットバンクのリアルタイムAPIまとめ
ビットバンクの情報をリアルタイムで取得するためのAPIの紹介でした。
soketioという初めて使用するものでしたが、比較的簡単に実装することができました。サンプルコードをコピペすればデータ受信まではできますので、試しにやってみてコードをいじってみるとより理解が進むと思います。
送られてきたデータから必要なデータの抜き出しなどは、以前の自動売買ツールで行っていたためスムーズにできました。もし気になる方は以下のリンクを飛ぶと自動売買ツールのサンプルコードがありますのでご参照ください。