つたはすのブログ

獲得した知識をアウトプットしていきます

bitbank APIで仮想通貨を取引しよう(板情報 編)

 この記事ではbitbankAPIを使った板の取得方法を備忘録を兼ねて解説します。
 板の説明上、指値注文と成行注文の解説をしますが、APIを使った注文の出し方は別の記事で説明します。

 とは現在出ている注文の一覧表のことです。
 前回の記事で紹介したローソク足では過去の取引情報を確認することができますが、今回紹介する板ではこれから発生するであろう取引を確認することができます。

 板に書かれている情報は次の3つです。

  • 価格
  • 売り注文に出されている数量
  • 買い注文に出されている数量

 例えばビットコインの板が次のようになっていたとしましょう。

売り注文量 価格 買い注文量
3.0 6,100,000
5.2 6,050,000
3.0 6,040,000
0.1 6,000,000
5,988,000 3.2
5,987,000 2.8
5,986,000 0.1
5,985,000 3.3
5,979,000 1.4
5,975,000 4.8

 板のうちで売り注文量に値が入っている部分を売り板(赤字の部分)と言います。
 売り板の一番上を見ると、単価6,100,000円の売り注文が3.0ビットコイン分入っていることが読み取れます。

 一方で買い注文量に値が入っている部分を買い板(緑字の部分)と言います。
 買い板の一番下を見ると、単価5,975,000円の買い注文が4.8ビットコイン分入っていることが読み取れます。

 このように板を確認すると、どの価格にどれだけの量の注文が入っているかが確認できます。

指値注文

 上で紹介した板に注文を載せるには指値注文を出します。
 指値注文とは売る(買う)値段を指定する注文方式です。

 例えば、6,001,000円で1.0ビットコインの売り注文を指値注文で出すと、上の板は次のように更新されます。(黒字部分が今回の注文)

売り注文量 価格 買い注文量
3.0 6,100,000
5.2 6,050,000
3.0 6,040,000
1.0 6,001,000
0.1 6,000,000
5,988,000 3.2
5,987,000 2.8
5,986,000 0.1
5,985,000 3.3
5,979,000 1.4
5,975,000 4.8

 指値注文の値段(上の例だと6,001,000円)のことを指値と言います。

 指値注文の特徴は、売り注文なら指値よりも高くならないと取引は成立せず、買い注文なら指値より低くならないと取引は成立しないことです。
 今回の例ではビットコインの値段が6,001,000円より高くならないと取引が成立しないので、6,001,000円で売りたかったのに5,900,000円で売れてしまった...ということにはなりません。

 指値注文では思っていたよりも低い値段で売れてしまったり、高い値段で買ってしまうことはないのですが、値段が指値に到達しないと取引が成立しないため、なかなか取引が成立せず売買の機会を逃してしまう可能性があります。

成行注文

 成行注文とは値段を指定せず、注文量だけ指定する注文方式です。
 売り注文を成行注文で行うと買い板の最高値で注文が成立します。
 一方で買い注文を成行注文で行うと売り板の最安値で注文が成立します。

 例えば、板が次の状態だとします。

売り注文量 価格 買い注文量
3.0 6,100,000
5.2 6,050,000
3.0 6,040,000
0.1 6,000,000
5,988,000 3.2
5,987,000 2.8
5,986,000 0.1
5,985,000 3.3
5,979,000 1.4
5,975,000 4.8

 このとき0.5ビットコインの買い注文を成行注文で行うと、まず売り板の最安値である、単価6,000,000円の0.1ビットコインの取引が成立して、板が次のように更新されます。

売り注文量 価格 買い注文量
3.0 6,100,000
5.2 6,050,000
3.0 6,040,000
5,988,000 3.2
5,987,000 2.8
5,986,000 0.1
5,985,000 3.3
5,979,000 1.4
5,975,000 4.8

 残り0.4ビットコイン分の注文は更新された売り板の最安値である、単価6,040,000円の取引が成立して、板が次のように更新されます。

売り注文量 価格 買い注文量
3.0 6,100,000
5.2 6,050,000
2.6 6,040,000
5,988,000 3.2
5,987,000 2.8
5,986,000 0.1
5,985,000 3.3
5,979,000 1.4
5,975,000 4.8

 以上により、今回の条件で0.5ビットコインの買い注文を成行注文を出すと、単価6,000,000円で0.1ビットコインを買い、さらに単価6,040,000円で0.4ビットコインを買ったので
(6,000,000×0.1) + (6,040,000×0.4) = 3,016,000
により、3,016,000円で0.5ビットコインを購入したことになります。

 成行注文では、注文を出すとすぐに取引が成立するということがメリットとなります。
 一方で想定外の値段で取引が成立してしまうという可能性があるので注意しなければなりません。

 例えば、板が次の状態だとします。

売り注文量 価格 買い注文量
3.0 6,100,000
2.6 6,040,000
6,000,000 0.1
5,500,000 5.0

 このとき1.0ビットコインの売り注文を成行注文で行うと、まず買い板の最高値で取引が成立するので、単価6,000,000円で0.1ビットコインが売れます。
 そして板が更新されて次のようになります。

売り注文量 価格 買い注文量
3.0 6,100,000
2.6 6,040,000
5,500,000 5.0

 残りの0.9ビットコイン分の注文は買い板の最高値で取引されるので、最初の取引よりも500,000円安い単価5,500,000円で取引されます。

 想定外の値段で取引が成立することを避けるために成り行き注文する際には板をしっかり確認しましょう。

指値注文と成行注文のメリット・デメリット

 指値注文と成行注文のメリットおよびデメリットをまとめておきました。

指値注文 成行注文
メリット 自分が指定した値段で取引可能
(想定外の値段で取引されない)
すぐに取引できる
デメリット 値段が指値に到達しないと取引が成立せず
売買の機会を逃す可能性あり
想定外の値段で取引が
成立してしまう可能性あり

APIを使った板情報の取得

 ここからbitbankのAPIを使って板情報を取得しましょう。
 そのためにはAPIライブラリをインストールする必要がありますので、導入していない場合はコンソールにて次を実行してインストールしてください。

$ pip install git+https://github.com/bitbankinc/python-bitbankcc.git

売り板を出力しよう

 ビットコインの現在の売り板を出力してみましょう。
 売り板情報は、板情報を取得して、「asks」にアクセスすると得られます。

# bitbank APIをインポート
import python_bitbankcc


# bitbankのパブリックAPIの呼び出し
pub = python_bitbankcc.public()

# 通貨ペア(ビットコイン/日本円)
pair = "btc_jpy"

# 板の取得
order_board = pub.get_depth(pair)

# 売り板の取得
asks_board = order_board["asks"]

# 売り板の出力
for ask in asks_board:
    print(ask)

 これを実行すると次の結果が得られます。(実行時の板情報が得られるので結果はタイミングによって実行結果が変わります。)

['6756039', '0.4463']
['6759204', '0.0370']
['6759997', '0.0150']
中略
['6929994', '0.0001']
['6930000', '0.0763']
['6930168', '0.0010']

 出力結果の各行に注文情報が出力されています。左が値段で右が注文量です。
 また、値段が安いものから順に出力されます。

売り板を部分的に出力しよう

 上のプログラムを実行すると、かなりたくさんの注文情報が出力されました。
 これでは少し見づらいので、売り板の一部だけを出力するようにしましょう。

 上で解説した通り、売り板は値段が安いものから取引されるので、取得した売り板情報のうちで値段が安いものから5つ出力するようにしましょう。
 そのプログラムは次の通りです。

import python_bitbankcc

pub = python_bitbankcc.public()
pair = "btc_jpy"
order_board = pub.get_depth(pair)

# 売り板のうち最初5つを取得
asks_board = order_board["asks"][:5]

# 売り板の出力
for ask in asks_board:
    print(ask)

 これを実行すると次のように出力されます。(実行時の板情報が得られるので結果はタイミングによって実行結果が変わります。)

['6773936', '0.0494']
['6773937', '0.0383']
['6774101', '0.0147']
['6775428', '0.0003']
['6775429', '0.0660']

買い板を出力しよう

 ビットコインの現在の買い板を出力してみましょう。
 買い板情報は、板情報を取得して、「bids」にアクセスすると得られます。
 プログラムは次の通りです。

import python_bitbankcc

pub = python_bitbankcc.public()
pair = "btc_jpy"
order_board = pub.get_depth(pair)

# 買い板の取得
bid_board = order_board["bids"]

# 買い板の出力
for bid in bids_board:
    print(bid)

 これを実行すると次のように出力されます。(実行時の板情報が得られるので結果はタイミングによって実行結果が変わります。)

['6767755', '0.4447']
['6767750', '0.0118']
['6767699', '0.4009']
中略
['6611000', '0.0338']
['6610001', '0.4000']
['6610000', '0.0067']

 出力結果の各行に注文情報が出力されています。左が値段で右が注文量です。
 買い板は売り板とは逆に値段が高いものから順に出力されます。

買い板を部分的に出力しよう

 売り板の場合と同様に注文情報を5つだけ出力しましょう。
 上で解説した通り、買い板は値段が高いものから順に取引されるので、値段が高い注文を5つ出力しましょう。
 処理としては売り板と同様にすればOKです。

import python_bitbankcc

pub = python_bitbankcc.public()
pair = "btc_jpy"
order_board = pub.get_depth(pair)

# 買い板のうち最初5つを取得
bids_board = order_board["bids"][:5]

# 買い板の出力
for bid in bids_board:
    print(bid)

 これを実行すると次のように出力されます。(実行時の板情報が得られるので結果はタイミングによって実行結果が変わります。)

['6761815', '0.4629']
['6760959', '0.0400']
['6760958', '0.1400']
['6760289', '0.0550']
['6760203', '0.0480']