仮想通貨取引所のAPIをリッチに表示しよう【Python】
こちらのツイートが予想以上の反響があったのでPythonライブラリ「rich」の使い方を、所謂「仮想通貨botter」の人向けに簡単にnoteにまとめてみました。
はじめに
仮想通貨botterには月次S級の猛者からコピペでなんとか動いてる入門botterなど様々な人たちがいると思いますが、自動取引をする為には「API」を叩くのが必須ですよね。
APIを叩くと基本的に「JSON」という形式のデータが得られます。Pythonではそれが「辞書」や「リスト」といった型になってデータが格納されます。
でもAPIで取得したデータを確認しようとした時、このJSON形式って階層構造が深かったりしてprintで表示してもよく分かりづらいですよね?
そこで「rich」ライブラリを使えばお手軽にデータを可視化できるので是非試してみましょう!
richの利点
今回は取引所「Bybit」のパブリックなBTCUSDの約定履歴のデータを例として表示します。
通常のprintで表示した場合
1行で全てが表示されます。プログラム的には当たり前なのですが、人間には分かりにくいですよね。
rich.printで表示した場合
自動インデントされ、型によって色が付くのが特徴ですね。
明らかに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以外にもテーブル表示の機能があるみたいです。
仮想通貨取引の特徴である「板」の情報もこのテーブル機能でいい感じに表示できました。説明は省きますがサンプルコードを載せておきます。
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に関する情報を発信しているのでよかったらフォローお願いします🙂