bitbankのWebsocket(リアルタイムデータ配信API)を非同期で実装してみたのでその備忘録です。
目次
仕様の確認
- socket.ioによって実装されている
- ティッカー、約定履歴、板情報、板情報の差分の4つのチャンネルが配信されている
- 口座情報などのprivateデータは未対応
socket.ioという他の取引所ではあまり見かけないライブラリによって実装されているようです。privateデータが配信されていないので、注文の約定の判定が難しそうな印象です。
非同期で実装
まずはsocket.ioのライブラリをインストールします
pipenv install python-socketio
それでは実装していきましょう。
今回はティッカーのみを受信するように、ほかのチャンネルの接続部分はコメントアウトしています。
以下のスクリプトを実行することで受信する事ができす。
実行すれば早速ティッカー情報が受信されました。
Connect to WebSocket
{'room_name': 'ticker_btc_jpy', 'message': {'data': {'sell': '3955488', 'buy': '3955487', 'open': '3951001', 'high': '3955998', 'low': '3946868', 'last': '3955488', 'vol': '46.7273', 'timestamp': 1695555237278}}}
{'room_name': 'ticker_btc_jpy', 'message': {'data': {'sell': '3955488', 'buy': '3955487', 'open': '3951001', 'high': '3955998', 'low': '3946868', 'last': '3955488', 'vol': '46.7273', 'timestamp': 1695555238962}}}
{'room_name': 'ticker_btc_jpy', 'message': {'data': {'sell': '3955488', 'buy': '3955487', 'open': '3951001', 'high': '3955998', 'low': '3946868', 'last': '3955488', 'vol': '46.7273', 'timestamp': 1695555239898}}}
{'room_name': 'ticker_btc_jpy', 'message': {'data': {'sell': '3955488', 'buy': '3955487', 'open': '3951001', 'high': '3955998', 'low': '3946868', 'last': '3955488', 'vol': '46.7273', 'timestamp': 1695555240565}}}
{'room_name': 'ticker_btc_jpy', 'message': {'data': {'sell': '3955488', 'buy': '3955487', 'open': '3951001', 'high': '3955998', 'low': '3946868', 'last': '3955488', 'vol': '46.7273', 'timestamp': 1695555241570}}}
終わりに
リアルタイムデータの受信はできましたが、Private情報がないのはやはり辛いですね。
websocketだけでは自分のオーダーの約定判定ができないので、オーダー管理やポジション管理が開発の鬼門となりそうです。
色々と工夫していきたいと思います。