Skip to content
This repository was archived by the owner on Dec 19, 2022. It is now read-only.

Quickstart

MtkN1 edited this page Mar 21, 2021 · 6 revisions

Quickstart

APIクライアントクラスの生成

PyBybitを使うには、まずAPIクラスを生成します。そうすることで各種機能を呼び出せるようになります。

引数keyにはAPIキー、secretにはAPIシークレットの文字列を渡します。

import pybybit
client = pybybit.API(key='YOUR_API_KEY', secret='YOUR_API_SECRET')

引数keysecretが空でもAPIを利用できます。その場合はパブリックAPIは利用できますが、プライベートAPIは未認証エラーになります。

client = pybybit.API()

引数testnetTrueに指定することで、Bybitのテストネット環境を利用できます。

※テストネット環境はAPIキーとシークレットが本番環境とは異なることに注意してください。

client = pybybit.API(key='YOUR_TESTNET_API_KEY', secret='YOUR_TESTNET_API_SECRET', testnet=True)

REST APIの呼び出し

REST APIを呼び出すことで、注文を送信したり、各種情報を取得することができます。

以下のようにしてREST APIを呼び出すことが出来ます。

引数にはAPIのパラメーターを指定します。

# インバース無期限 ポジション情報取得
response = client.rest.inverse.private_position_list(symbol='BTCUSD')
print(response.json())
# リニア無期限 ポジション情報取得
response = client.rest.linear.private_position_list(symbol='BTCUSDT')
print(response.json())
# インバース先物 ポジション情報取得
response = client.rest.futures.private_position_list(symbol='BTCUSDM21')
print(response.json())

インバース無期限のAPIはclient.rest.inverse、リニア無期限のAPIはclient.rest.linear、インバース先物のAPIはclient.rest.futures、からメソッドを呼び出します。

その他の注文送信のAPIなど、全てのAPIのメソッド名は、Endpoints のWikiページをご覧ください。

パラメーター(引数)やレスポンスの形式については Bybit API Docs をご覧ください。

パラメーターがPythonの予約語と競合している場合は、引数にアンダーバー(_)を付与して指定します。
例: client.rest.inverse.public_tradingrecords(symbol='BTCUSD', from_=268217252)

レスポンスについて

レスポンスはrequestsモジュールのResponseクラスをインターフェースとして使用しています。

APIの結果を辞書形式で受け取る為には、responce.json()で取得できることだけ把握できていればPyBybitを利用できます。

data = response.json()
print(data['result'])

インタフェースの詳細が知りたい場合はrequestsのリファレンス をご覧ください。

WebSocket APIの呼び出し

WebSocket APIを呼び出すことで、各種情報をリアルタイムに受信することができます。

以下のようにしてWebSocket APIを呼び出すことが出来ます。WebSocketは新しいスレッドを作成して常駐します。

引数topicsには購読するトピックを指定します。

# インバース無期限・先物(パブリック・プライベート共通)
client.ws.run_forever_inverse(topics=[
    'orderBookL2_25.BTCUSD', 'trade.BTCUSD', 'insurance', 'instrument_info.100ms.BTCUSD', 'klineV2.1.BTCUSD',
    'position', 'execution', 'order', 'stop_order',
])
# リニア無期限(パブリック)
client.ws.run_forever_linear_public(topics=[
    'orderBookL2_25.BTCUSDT', 'trade.BTCUSDT', 'instrument_info.100ms.BTCUSDT', 'candle.1.BTCUSDT',
])
# リニア無期限(プライベート)
client.ws.run_forever_linear_private(topics=[
    'position', 'execution', 'order', 'stop_order', 'wallet',
])

しかしWebSocket APIを呼び出しただけでは受信したデータは処理されません。

受信データに何かの処理を行いたい場合はコールバック関数を追加する必要があります。

以下はパブリックなトレード情報を購読し、それをprintして表示する処理の例です。

client.ws.add_callback(lambda msg, ws: print(msg))
client.ws.run_forever_inverse(topics=['trade.BTCUSD'])
# 対話モード(REPL)でない場合スクリプトが終了する為、input関数で停止させる
input()

コールバック関数には第一引数に受信データ(文字列)、第二引数にwebsoclet.WebSocketクラスが渡されます。

WebSocket APIの受信データはREST APIとは違い、差分データを含んでいます。差分データがあると整合性の取れたデータを保管するには多くの実装を必要とします。

そこでPyBybitにはそれらを実装し、自動でデータを処理するデータストアクラスの機能があります。

データストアクラスの使い方

以下は板情報を購読、受信するまで待機し、板のベスト値を表示する例です。

store = pybybit.DataStore()
client.ws.add_callback(store.onmessage)
client.ws.run_forever_inverse(topics=['orderBookL2_25.BTCUSD'])
while len(store.orderbook) == 0:
    store.wait()
print(store.orderbook.getbest(symbol='BTCUSD'))

詳細は DataStore のWikiページをご覧ください。

Clone this wiki locally