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://public.bybit.com/trading/
しかし、CSVでは「清算による約定が含まれていない」という検証結果(※)があります。このようなデータをバックテストに利用するのは少々適さない部分があるので、当スクリプトを利用するといいと思います。
※詳しくはまとめていませんが、pybotters Discordでの議論を参照してください。
https://discord.com/channels/832651305155297331/832653694839160892/847654678644260884
事前準備
①MongoDBをコンピューターにインストールする
公式ドキュメント
https://docs.mongodb.com/manual/administration/install-community/
またはDockerコンテナでMongoDBを起動します
https://hub.docker.com/_/mongo
②pybottersとmotor(MongoDBドライバー)をPythonにインストールする
スクリプト
通貨はリニア契約「BTCUSDT」を指定しています。
「send_json」引数の箇所を書き換えるとことで通貨を変更したり増やすことができます。
USDT契約を指定するにはURLを変更する必要があります(※BybitのAPIドキュメントを参照してください)
スクリプトを終了する場合はCtrl+Cを入力してください。
データは「bybit」データベースの「linear」コレクションに保存されます。
データの参照方法
データ参照についてはGUIツールの場合は「MongoDB Compass」などが便利です。
botやバックテストで利用する場合は、Python上から参照することになります。簡単なサンプルコードです。
(pymongoはmotorインストール時に自動的にインストールされていると思います)
拡張性
ハンドラクラスのコードを変更することでFTXやBinanceなど他の取引所にも簡単に対応できると思います。興味がある方は是非試してみてください!
おわりに
本noteのコンテンツは以上です!
是非Twitterのフォロー・Discordの参加お願いします🙇♂️
noteサポートして頂けると励みになります🙇♂️