ビットコイン対円のティッカーを可視化

前回、pybitflyerを利用して bitFlyerからビットコイン対円のティッカーを2秒ごとに10分間分取得した。

testpy.hatenablog.com

ティッカーを取得、とかさらっと言っているが、実はFX初めて。 ただ株は少しやったことがあって、そうゆう人間からすると、 ティッカーを取得したら売買結果だった、というのはちょっと違和感があった。 と言うのもティッカーって、AppleならAAPLとか、Yahoo!Japanなら4689とか、企業を指すものだと思ってたから。 なので、FXで言うところのティッカーって何なのかを知るために、用語を調べたり、matplotlibで可視化してみた。

用語

まずは用語を少し調べてみたけど、こんな感じだろうか。。 間違ってたら教えて下さい。

  • best_ask: 最高買い価格
  • best_bid: 最低売り価格
  • best_ask_size: 最高買い価格の数
  • best_bid_size: 最低売り価格の数
  • ltp: 最終取引価格
  • total_ask_depth: 買い注文総数
  • total_bid_depth: 売り注文総数
  • volume_by_product: 価格ごとの出来高

best_ask, best_bid, ltpの単位は円でOKだと思うけど、 best_ask_size, best_bid_size, total_ask_depth, total_bid_depth, volume_by_productは単位はBTCかな? CSVのファイルの数値は少数第8位まであって、0.00000001BTC=1SatoshiなのでOKとは思うが。

なお、total_ask_depth, total_bid_depthのイメージは以下が分かりやすいと思う。 下のグラフの両端の数値がそれらに該当すると思われる。

f:id:Shoto:20171116004239j:plain https://en.wikipedia.org/wiki/Market_depth

コード

前回read_csv()で取得できる dfを次のplot_ticker()の引数として渡すと可視化できる。

def plot_ticker(self, df):
    fig = plt.figure(figsize=(16, 9), dpi=100)
    fig.patch.set_facecolor('white')

    ax = fig.add_subplot(3, 1, 1)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
    ax.plot(df.index, df['best_ask'], ls='-', color='red', label='best_ask')
    ax.plot(df.index, df['best_bid'], ls='-', color='blue', label='best_bid')
    ax.plot(df.index, df['ltp'], ls='-', color='gray', label='ltp')
    plt.legend(loc='best')
    ax.grid()

    ax = fig.add_subplot(3, 1, 2)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
    ax.plot(df.index, df['total_ask_depth'], ls='-', color='red', label='total_ask_depth')
    ax.plot(df.index, df['total_bid_depth'], ls='-', color='blue', label='total_bid_depth')
    plt.legend(loc='best')
    ax.grid()

    ax = fig.add_subplot(3, 1, 3)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
    # ax.plot(df.index, df['volume'], ls='-', color='green', label='volume')
    ax.plot(df.index, df['volume_by_product'], ls='-', color='black', label='volume_by_product')
    plt.legend(loc='best')
    ax.grid()

    plt.tight_layout()
    plt.show()

結果

f:id:Shoto:20171116004242p:plain

  • 上グラフ
    best_askが上、best_bidが下のラインを支えていて, ltpがその中間にあることが確認できる。
  • 中グラフ
    観測した中ではtotal_ask_depthtotal_bid_depthをずっと下回っている。 あとtotal_ask_depthが一定なのに足して、total_bid_depthがたまに増える。
  • 下グラフ
    volume_by_productが急激に減ったと思ったら、BTCの価格が上がっている。

参考文献