見出し画像

Coincheck用板情報取得クラス(socket_io、websocket)python

2022/03/20 接続できていなかったので、コード見直し。

こんにちは、はぐです。

以前noteで書いたアビトラbotで問い合わせがあり、ここ1週間ほどCoincheckの板情報のズレに悩まされていました。

Coincheckの板情報は差分しか送られてこないです。
約定履歴から板情報を削ってみたりしてもズレがありました。
結局ズレは、本来あるはずのpriceの板情報がない事でずれていました。
ではなぜその価格がないのか、というと
配信されていないんじゃない?
という考えに落ち着き、webはズレていないと考えるならば、webと同じことしよう、と考えました。

公式ドキュメントでは、websocketを使用していますが、webの方は解析してみるとsocket_ioです(って当たり前か ^^;)。
pythonでsocket_ioライブラリは使ったことが無かったので、いろいろ調べることから始めましたので少し時間がかかりました。

あと、webでは60秒毎にAPIから板情報を取得しに行っていますが、本コードではそれはしていません。
APIからの情報はすでに遅延しており、そこから差分を行っていくと取得した直後はズレているからです。
一応、API取得部分のコードを入れていますが、現在は無効にしています。
有効にしたければ、コードの最初の方、

# APIより板情報を取得し、差し替える時間間隔[sec]。0で無効。webでは60秒になっている。
API_UPDATE_INTERVAL = 0

これを0以上に書き換えてみてください。

使用モジュールはpython-socketioです。

pip install python-socketio

一応、公式のwebsocket版もつけておきます。
こちらは最新のwebsocketモジュールで動くようにしています。(0.47以前とかの縛りはないです。)
両方立ち上げてみて、違いを見てみてください。
受信部分以外はコードは同じです。
websocketとsockt_ioの接続のサンプルにもなると思います。
両方共通信エラー時は再接続するようになっています。
ちなみに公式のwebsocketは、切断すると一定時間サーバーから接続が拒否されます。
socket_ioの方はwebでも使われているのですぐ再接続できます。

板の処理はSortedDictを使ってます。
くもすけさんのbotフレームワークを参考にさせていただきました。
ありがとうございます。
なので、こちらも必要です。

pip install sortedcontainers

最初はlistで頑張ってソートしてたのですが、こんな便利なものがあったなんて・・・・

いろいろwebを解析してみると、隠しAPIとかも発見できて面白かったです。
使えそうなのはohlcvの取得ぐらいかな。

下記有料部分にコードを置いておきます。


ここから先は

36字 / 1ファイル

¥ 1,000

サポートしていただけると励みになります。 頂いたサポートは有益な他の方のnote購入代に当てさせて頂き、回していきたいと思います。