BybitのPython用自動取引モジュール - pybybit

こんにちは、まちゅけん(@mtkn1btcfx)です。
pybitflyerみたく、Pythonで簡単にBybit APIを叩けるモジュールを作ってみました。
興味がある方は以下の説明を読んで使ってみてください。

何ができるの?
Bybit HTTP APIのそれぞれのエンドポイントをメソッドレベルで作成しました。メソッドを呼び出すだけでAPIを叩けます。
Bybit WebScoket APIに接続できます。受信したデータを加工して保持するようにしているので、各トピックのデータをメソッド呼び出しで取得できます。

もっと分かりやすく
HTTP API
・オーダーの送信/取得/キャンセル
・条件付きオーダー(STOP)の送信/取得/キャンセル
・レバレッジの確認/変更
・ポジションの取得
・ファンディングレートの取得
・ローソク足データの取得(※開発中API)
WebSocket API
・板情報の取得(Pandasでデータ加工)
・リアルタイムローソク足の取得
・約定履歴の取得
・ティッカー情報(instrument)の取得
・ポジションの取得
・約定履歴(プライベート)の取得
・オーダー情報の取得
その他
・本番環境/testnet環境の切り替え可能

外部モジュールのインストール
requests, pandas, websocket-clientが必要です。

pip install requests pandas websocket-client

モジュール本体
右上のRawからダウンロードしてください。
https://gist.github.com/MtkN1/50923f4366c3390a1cf4310f77ea7440

このモジュールを使用するPythonファイルと同じフォルダに pybybit.py を置いてください。(以下にサンプルコードあり)

使い方
pybybitを試すためのサンプルコードです。(view rawからダウンロードしてください)

ポジションを取得して表示

板情報(買い板)を取得して表示

最寄りの買い値-100ドルの価格に指値注文

5秒後、注文をキャンセル

インスタンス生成時のパラメーターの内容

api_key : 発行したAPIキー
secret : 発行した秘密鍵
symbol : 取引対象の銘柄
ws : WebSocketに接続(未指定の場合:接続する)
test : testnetの使用(未指定の場合:使用しない)

HTTP API用メソッドの詳細
詳細はBybitの公式ドキュメントを参照してください。
(メソッド名は変更してますが、上から順に対応してます)
HTTP APIなのでレート制限に注意してください。
developingのAPIは正常に動作するか分かりません。(オーダーは動作せず、ローソク足は本番環境のみ動作)

#
# Http Apis
#

place_active_order(side=None, symbol=None, order_type=None,
                      qty=None, price=None,
                      time_in_force='GoodTillCancel', take_profit=None,
                      stop_loss=None, order_link_id=None)
   """
   オーダーを送信
   """

get_active_order(order_id=None, order_link_id=None, symbol=None,
                    sort=None, order=None, page=None, limit=None,
                    order_status=None)
   """
   オーダーを取得
   """

cancel_active_order(order_id=None)
   """
   オーダーをキャンセル
   """

place_conditional_order(side=None, symbol=None, order_type=None,
                           qty=None, price=None, base_price=None,
                           stop_px=None, time_in_force='GoodTillCancel',
                           close_on_trigger=None, reduce_only=None,
                           order_link_id=None)
   """
   条件付きオーダーを送信
   """

get_conditional_order(stop_order_id=None, order_link_id=None,
                         symbol=None, sort=None, order=None, page=None,
                         limit=None)
   """
   条件付きオーダーを取得
   """

cancel_conditional_order(order_id=None)
   """
   条件付きオーダーをキャンセル
   """

get_leverage()
   """
   レバレッジを取得
   """

change_leverage(symbol=None, leverage=None)
   """
   レバレッジを変更
   """

get_position_http()
   """
   ポジションを取得(HTTP版)
   """

change_position_margin(symbol=None, margin=None)
   """
   ポジションマージンを変更
   """

get_prev_funding_rate(symbol=None)
   """
   ファンディングレートを取得
   """

get_prev_funding(symbol=None)
   """
   アカウントのファンディングレートを取得
   """

get_predicted_funding(symbol=None)
   """
   予測資金調達レートと資金調達手数料を取得
   """

get_my_execution(order_id=None)
   """
   アカウントの約定情報を取得
   """

#
# New Http Apis (developing)
#

symbols():
   """
   シンボル情報を取得
   """

kline(, symbol=None, interval=None, _from=None, limit=None):
   """
   ローソク足を取得 (developing)
   """

place_active_order_v2(, symbol=None, side=None, order_type=None,
                         qty=None, price=None,
                         time_in_force='GoodTillCancel',
                         order_link_id=None):
   """
   オーダーを送信 v2 (developing)
   """

cancel_active_order_v2(order_id=None):
   """
   オーダーをキャンセル v2 (developing)
   """

WebScoket API
各トピックの購読データを独自に加工して保持しています。
WebSocketなのでレート制限はありません。

・板情報(order_book_25L1)
 Pandas DataFrameで配信データを更新したり削除してます。
・ポジション(position), ティッカー情報(instrument)
 配信データで常に辞書を上書きするような処理にしています。
・約定履歴(trade), プライベート約定履歴(execution), オーダー情報(order)
 配信された新規データをdeque(最大値200のリスト)にappendして溜め込んでるだけです。使いにくいかも。(改良したい)

※ロジックは_on_message()を参照
get_trade()
   """
   約定履歴を取得
   """

get_instrument()
   """
   ティッカー情報を取得
   """

get_orderbook(side=None)
   """
   板情報を取得する
   sideに'Sell'または'Buy'を指定可能
   ※データ型: Pandas DataFrame形式
   """

get_position()
   """
   ポジションを取得
   """

get_my_executions()
   """
   アカウントの約定履歴を取得
   """

get_order()
   """
   オーダー情報を取得
   """

本番環境とtestnet環境
test=Trueでtestnet環境でトレードできますが、testnetは本番とはアカウントとAPIは別なので注意してください。入金の所からtestnet用BTCを送付してAPIをテストできます。(↓testnetのURL)

Bybit豆知識
・APIキーの発行は、右上メニュー→アカウント&セキュリティ→API管理から
・APIキーの発行には2段階認証が必要。Bybitには「Google認証」と書かれているけど、普通にAuthyで可能(いちいちスマホ開くの面倒ですよね)。
・APIキーの発行の際ホワイトリストのIPアドレスの紐づけが登録が必要だが、「サードパーティアプリ紐づけ」アプリ名「TradingView」を選ぶとホワイトリストが不要に。これでも普通に注文通ります。

おわり
モジュールの説明は以上です。質問があったりやバグを発見した場合はTwitter(@mtkn1btcfx)にリプかDMを下さい。
モジュールのテストは行いましたが、まちゅけん自体まだトレーディングbotに組み込んでの運用はまだしてないので、バグやコードの堅牢性などについてはご容赦ください。
このモジュールによって損失が発生しても当方は責任を負いません的な決まり文句以下略。
誰も作ってないから作ってみたい衝動に駆られたました。なので正直Bybit botを運用するかどうかは分かりません(笑)
弱botterのクソコードですが、必要な方は是非使って見て下さい!

今後の予定
・オーダー情報はWSのデータを溜め込んでるだけで使いにくいと思うので改良したい。
・gistじゃない方のgithubに登録してpip install できるようにしたい。
・ドキュメンテーション文字列の加筆修正
・あと、GMOコインのAPIも気になる。

もしこのモジュールで儲かって良い気分になった方はtipいただけると幸いです。
BTCアドレス: 
33cQxknWWwz4oAddWTKWvEFDpigq6DG34F
アフィリエイトリンク: 


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

32

まちゅけん

仮想通貨

3つ のマガジンに含まれています

コメント1件

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。