見出し画像

BybitのWebSocketから約定履歴をデータベースに溜め込むスクリプト【pybotters】

こんにちは、まちゅけん(@MtkN1XBt)です。
現在開発中の仮想通貨botter向けPythonライブラリ「pybotters」を利用して、BybitのWebSocketから約定履歴をデータベースに溜め込むスクリプトを公開します🙌

対象

取引所: Bybit
データベース: MongoDB
Python: 3.7以上

このスクリプトを使うメリット

約定履歴をデータベースに溜め込むことで...
・バックテストができる
・botから約定データを参照できる
・約定データからローソク足を自炊できる

データ保存にCSVではなくデータベースを利用することで...
・複数のプログラムからデータを利用できる
 (テキストファイルだと書き込み/読み込みが競合する可能性がある)
・データベースのクエリ機能で柔軟な検索ができる

pybottersを利用することで...
・WebSocketの自動再接続が組み込まれているので永続的に実行される
・チョットしたasyncioの参考になる

既存のpybottersユーザー向け...
pybottersのデータストア(pybotters.BybitDataStore)のハンドラを利用せず、新たにカスタムハンドラクラスを利用する実装をしています。pybottersを拡張する実装例として参考になると思います。

Bybitのcsv.gzについて

Bybitでは約定履歴のCSVファイルが公開されています。
https://bybit-exchange.github.io/docs/inverse/#t-archivedata
しかし、CSVでは「清算による約定が含まれていない」という検証結果(※)があります。このようなデータをバックテストに利用するのは少々適さない部分があるので、当スクリプトを利用するといいと思います。

※詳しくはまとめていませんが、pybotters Discordでの議論を参照してください。
https://discord.com/channels/832651305155297331/832653694839160892/847654678644260884

事前準備

①MongoDBをコンピューターにインストールする
公式ドキュメント
https://docs.mongodb.com/manual/administration/install-community/

pybottersmotor(MongoDBドライバー)をPythonにインストールする

スクリプト

通貨はインバース契約「BTCUSD」を指定しています。
「send_json」引数の箇所を書き換えるとことで通貨を変更したり増やすことができます。
USDT契約を指定するにはURLを変更する必要があります(※BybitのAPIドキュメントを参照してください)
スクリプトを終了する場合はCtrl+Cを入力してください。

データは「bybit」データベースの「inverse」コレクションに保存されます。

データの参照方法

データ参照についてはGUIツールの場合は「MongoDB Compass」などが便利です。

画像1

botやバックテストで利用する場合は、Python上から参照することになります。簡単なサンプルコードです。
(pymongomotorインストール時に自動的にインストールされていると思います)

拡張性

ハンドラクラスのコードを変更することでFTXやBinanceなど他の取引所にも簡単に対応できると思います。興味がある方は是非試してみてください!

おわりに

本noteのコンテンツは以上です!
是非Twitterのフォロー・Discordの参加お願いします🙇‍♂️
noteサポートして頂けると励みになります🙇‍♂️


この記事が気に入ったらサポートをしてみませんか?