見出し画像

仮想通貨取引所のAPIをリッチに表示しよう【Python】

こちらのツイートが予想以上の反響があったのでPythonライブラリ「rich」の使い方を、所謂「仮想通貨botter」の人向けに簡単にnoteにまとめてみました。

はじめに

仮想通貨botterには月次S級の猛者からコピペでなんとか動いてる入門botterなど様々な人たちがいると思いますが、自動取引をする為には「API」を叩くのが必須ですよね。
APIを叩くと基本的に「JSON」という形式のデータが得られます。Pythonではそれが「辞書」や「リスト」といった型になってデータが格納されます。
でもAPIで取得したデータを確認しようとした時、このJSON形式って階層構造が深かったりしてprintで表示してもよく分かりづらいですよね?
そこで「rich」ライブラリを使えばお手軽にデータを可視化できるので是非試してみましょう!

richの利点

今回は取引所「Bybit」のパブリックなBTCUSDの約定履歴のデータを例として表示します。

通常のprintで表示した場合

画像1

1行で全てが表示されます。プログラム的には当たり前なのですが、人間には分かりにくいですよね。

rich.printで表示した場合

画像2

自動インデントされ、型によって色が付くのが特徴ですね。
明らかにrichの方が分かりやすく、APIを叩いて取得したデータがどうなっているか把握しやすいです。

使い方

まず「rich」ライブラリをPythonにインストールしましょう

pip install rich

Pythonコード内で以下の様にrich printをインポートすればいつものprintと同じようにして使えます。

from rich import print

では、上の画像のBybitのパブリックなBTCUSD約定履歴を表示してみます。
BybitのAPIは私の自作ライブラリ「PyBybit」を使うと簡単に利用することができるのでおすすめです。PyBybitを使った例で説明します。(ひとまずインストール!)

pip install git+https://github.com/MtkN1/pybybit.git
from rich import print
import pybybit

client = pybybit.API()
data = client.rest.inverse.public_tradingrecords(symbol='BTCUSD', limit=5).json()
print(data)

簡単ですよね?rich printの説明は以上です。
richライブラリには他にも色々な機能があるようなので、気になる方は公式のこちらの日本語ドキュメントを参照してみてください。

テーブル機能で板情報を表示してみる

richにはこのprint以外にもテーブル表示の機能があるみたいです。
仮想通貨取引の特徴である「板」の情報もこのテーブル機能でいい感じに表示できました。説明は省きますがサンプルコードを載せておきます。

画像3

from rich.console import Console
from rich.table import Table
import pybybit

client = pybybit.API()
data = client.rest.inverse.public_orderbook_l2(symbol='BTCUSD').json()
orderbook = sorted(data['result'], key=lambda x: x['price'], reverse=True)

table = Table()

table.add_column('symbol', justify='center', style='dim')
table.add_column('price', justify='left', style='bright_blue')
table.add_column('size', justify='right', style='bright_blue')
table.add_column('side', justify='center')

half = len(orderbook) // 2
for item in orderbook[half - 10:half + 10]:
   table.add_row(*[f"[{'green' if item[k] == 'Buy' else 'red' if item[k] == 'Sell' else 'not'}]{item[k]}[/]" for k in item])

console = Console()
console.print(orderbook)
console.print(table)

おわりに

Twitterでは仮想通貨botに関する情報を発信しているのでよかったらフォローお願いします🙂



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