見出し画像

Bybit入門API編 ※2022年6月23日更新

どうも、一年ぶりの更新です。そろそろWSOTの時期でもあり、APIの仕様にも変更があるかもしれないと思い、ドキュメントをアップデートしようと思います。

本人、仮想通貨では裁量取引はしないので、APIドキュメントを読むついでに本記事にまとめようと思います。

更新内容

本記事では2022年6月23日時点では、最新のccxtで動作しなかったため、2022年6月23日に動作するように更新いたしました。ccxtはバージョンの変化が激しいため、指定しているバージョンにすることをお勧めいたします。
ここではccxt==1.49.66です。

登録方法

WSOTやbybitでの取引に興味ある方は是非こちらからご登録してくださると嬉しいです。

API発行手順

bybitのアカウント&セキュリティ
→API管理
→新しいキーの作成
→名前:お好きな名前
→IPに接続(ホワイトリスト、無ければ省略)
→キー許可(発注する場合はアクティブな注文は必要です、読み込むだけならポジションです)


インストール手順

今回はPythonとccxtライブラリを使用します。

!pip install ccxt==1.49.66

インポートと設定

import ccxt

bybit = ccxt.bybit({"apiKey":"***", "secret":"***"})

残高取得

bybit.fetch_balance()

>>>
{'info': {'ret_code': '0',
 'ret_msg': 'OK',
 'ext_code': '',
 'ext_info': '',
 'result': {'ADA': {'equity': '0',
   'available_balance': '0',
   'used_margin': '0',
   'order_margin': '0',
   'position_margin': '0',
   'occ_closing_fee': '0',
   'occ_funding_fee': '0',
   'wallet_balance': '0',
   'realised_pnl': '0',
   'unrealised_pnl': '0',
   'cum_realised_pnl': '0',
   'given_cash': '0',
   'service_cash': '0'},
  'BIT': {'equity': '0',
   'available_balance': '0',
   'used_margin': '0',
   'order_margin': '0',
   'position_margin': '0',
   'occ_closing_fee': '0',
   'occ_funding_fee': '0',
   'wallet_balance': '0',
   'realised_pnl': '0',
   'unrealised_pnl': '0',
   'cum_realised_pnl': '0',
   'given_cash': '0',
   'service_cash': '0'},
  'BTC': {'equity': '0',
   'available_balance': '0',
   'used_margin': '0',
   'order_margin': '0',
   'position_margin': '0',
   'occ_closing_fee': '0',
   'occ_funding_fee': '0',
   'wallet_balance': '0',
   'realised_pnl': '0',
   'unrealised_pnl': '0',
   'cum_realised_pnl': '0',
   'given_cash': '0',
   'service_cash': '0'},
   ...

USDT等の残高を取得したい場合は、以下の方法で取得できます。

balance = bybit.fetch_balance()
usdt_balance = balance["USDT"]

>>>
{'free': 500.00, 'used': 0.0, 'total': 500.00}

ティッカー情報取得

細かいティッカー情報(シンボルや出来高、現在価格等の情報)は次のように取得できます。

bybit.fetch_tickers() # こちらだと辞書形式

pd.DataFrame(bybit.fetch_tickers()) # こちらでデータフレームとして扱うことができます。

板取得

取引したいティッカーを見つけましたら、板情報は次のように取得できます。基本的にはデリバティブの方のデータが返されます。

bybit.fetch_order_book("BTC/USDT")

>>>
{'symbol': 'BTC/USDT',
'bids': [[20645.0, 17.797],
 [20644.5, 0.013],
 [20644.0, 2.12],
 [20643.5, 1.788],
 [20643.0, 0.56],
 [20642.5, 1.855],
 [20642.0, 0.649],
 [20641.5, 0.12],
 [20641.0, 3.95],
 [20640.5, 6.081],
 [20640.0, 3.131],
 [20639.5, 3.754],
 [20639.0, 1.006],
 [20638.5, 2.14],
 [20638.0, 0.195],
 [20637.5, 0.935],
 [20637.0, 0.215],
 [20636.5, 0.324],
 [20636.0, 1.758],
 [20635.5, 12.781],
 [20635.0, 10.109],
 [20634.5, 0.486],
 [20634.0, 0.139],
 [20633.5, 1.418],
 [20633.0, 1.318]],
'asks': [[20645.5, 14.19],
 [20646.0, 0.177],
 [20647.0, 0.63],
 [20647.5, 3.737],
 [20648.0, 4.127],
 [20648.5, 0.683],
 [20649.0, 0.303],
 [20649.5, 0.222],
 [20650.0, 4.437],
 [20650.5, 1.196],
 [20651.0, 1.157],
 [20651.5, 0.992],
 [20652.0, 2.79],
 [20652.5, 3.557],
 [20653.0, 0.12],
 [20653.5, 0.318],
 [20654.0, 0.829],
 [20654.5, 0.985],
 [20655.0, 1.419],
 [20655.5, 1.096],
 [20656.0, 1.436],
 [20656.5, 2.631],
 [20657.0, 0.391],
 [20657.5, 0.185],
 [20658.0, 0.125]],
'timestamp': 1655983915234,
'datetime': '2022-06-23T11:31:55.234Z',
'nonce': None}


ローソク足取得

こちら最大200本しか取得できません。

import time
import pandas as pd
kline = bybit.public_get_kline_list({"symbol":"BTCUSD","interval":"1", "from":int(time.time())-24*3600})
pd.DataFrame(kline["result"])

画像2

新規注文

※2022年6月23日更新
新規注文は次のように出来ます。

symbol = "BTC/USDT"
order_type = "limit"
side = "buy"
amount = 0.1
price = 10000

order = bybit.create_order(
   symbol,
   order_type,
   side,
   amount,
   price,
   {"qty": amount, "reduce_only": False, "time_in_force": "PostOnly"},
)
order

>>>
{'info': {'order_id': 'xxx',
 'user_id': '29043408',
 'symbol': 'BTCUSDT',
 'side': 'Buy',
 'order_type': 'Limit',
 'price': '10000',
 'qty': '0.1',
 'time_in_force': 'PostOnly',
 'order_status': 'Created',
 'last_exec_price': '0',
 'cum_exec_qty': '0',
 'cum_exec_value': '0',
 'cum_exec_fee': '0',
 'reduce_only': False,
 'close_on_trigger': False,
 'order_link_id': '',
 'created_time': '2022-06-23T11:48:54Z',
 'updated_time': '2022-06-23T11:48:54Z',
 'take_profit': '0',
 'stop_loss': '0',
 'tp_trigger_by': 'UNKNOWN',
 'sl_trigger_by': 'UNKNOWN',
 'position_idx': '1'},
'id': 'xxx',
'clientOrderId': None,
'timestamp': None,
'datetime': None,
'lastTradeTimestamp': None,
'symbol': 'BTC/USDT',
'type': 'limit',
'timeInForce': 'PO',
'postOnly': True,
'side': 'buy',
'price': 10000.0,
'stopPrice': None,
'amount': 0.1,
'cost': 0.0,
'average': None,
'filled': 0.0,
'remaining': 0.1,
'status': 'open',
'fee': {'cost': 0.0, 'currency': 'USDT'},
'trades': None,
'fees': [{'cost': 0.0, 'currency': 'USDT'}]}
order_type: limitかmarketにしてください。marketにした場合は、価格は不要です。
side: フォーマットはbuyまたはsell。
price: 価格
time_in_force: GoodTillCancel, ImmediateOrCancel, FillOrKill, PostOnly

注文状況取得

bybit.fetch_open_orders("BTC/USDT")

自身の取引履歴取得

bybit.fetch_my_trades("BTC/USDT")

在庫取得

bybit.fetch_positions()

キャンセル注文

一個ずつキャンセル。

for order in open_orders:
   print(bybit.cancel_order(symbol="BTC/USDT", id=order["id"]))

因みに便利なコマンド、全キャンセルです。

bybit.cancel_all_orders("BTC/USDT")


まとめ

以上でBOTを作る上で必要な機能は整ったと思います。メモ用にご活用くださいませ。





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