nashidos’s diary

アルゴリズムとか機械学習とか色々

デプスチャートをPythonで描写してみる

本記事では仮想通貨のデプスチャートをPythonで描写する方法について紹介します。

今回は例としてbitflyerのBTC_JPYのデプスチャートを作成してみたいと思います。

実際にソースコードも載せているのでご自由にお使いください。

デプスチャートとは

デプスチャートはその名の通り注文の深さを視覚的に表したチャートです。

買い、売りのそれぞれの注文がどの価格帯にどれだけの量注文されているかなどがわかるので、買いが強いのか売りが強いのかが判定しやすくなります。

f:id:nashidos:20210406231837p:plain

ただ、もちろんデプスチャートのみでトレンドを見極めるのは難しいのでご注意ください。

bitFlyer API

ビットフライヤーAPIPythonから使えるpybitflyerというパッケージを今回は使用しました。

pipを用いて簡単に使用することが出来ます。

pip install pybitflyer

APIからは板の情報や価格情報、約定履歴などの情報を知ることができます。

詳しくは公式のAPI Documentationをご覧ください。

ソースコード

以下が実際に私が実装したソースコードです。

実行環境はJupyter Notebookです。

import pybitflyer
from datetime import datetime
from time import sleep
from matplotlib import pyplot as plt
%matplotlib inline

# APIクラスの宣言
api = pybitflyer.API()

# BTC/JPYの板情報を取得
board = api.board(product_code="BTC_JPY")

# 各板情報を取得
def get_depth_data(position):
    size = []
    price = []
    for order in board[position]:
        size.append(order['size'])
        price.append(order['price'])

    size_cum = [size[0]]
    for i in range(1, len(size)):
        size_cum.append(size[i]+size_cum[-1])
    
    return size, price, size_cum

# 注文サイズ、注文価格、累積注文サイズを取得
asks_size, asks_price, asks_size_cum = get_depth_data('asks')
bids_size, bids_price, bids_size_cum = get_depth_data('bids')

# 取得する範囲
board_range = 100

# 図のサイズ
plt.figure(figsize=(10,3))

# 図の描写
plt.fill_between(asks_price[0:board_range], asks_size_cum[0:board_range],  color="red", alpha=0.3)
plt.fill_between(bids_price[0:board_range], bids_size_cum[0:board_range],  color="green", alpha=0.3)
plt.plot(asks_price[0:board_range], asks_size_cum[0:board_range], color="red")
plt.plot(bids_price[0:board_range], bids_size_cum[0:board_range], color="green")

# 図の保存
plt.savefig("depthchart.png")

描写したデプスチャート

出力されたデプスチャートの例は以下の通りです。

横軸がBTCの価格、縦軸が累積の注文枚数です。

最も低い位置は現在の価格を示しており、そこから買い注文と売り注文がどのように分布しているのかを見ることができます。
f:id:nashidos:20210406224654p:plain

まとめ

Pythonを用いてデプスチャートを描写してみました。

product_codeを変えることで他の通貨のデプスチャートも簡単に描写することができます。

ご自身でご自由に拡張してみてください。

おわり。