ビットバンク(bitbank)APIをPythonで使いこなそう【初心者向け】

プログラミング 仮想通貨

#本記事はプロモーションを含みます。

あなた

あなた
「ビットバンクのAPIを使えばプログラミングで仮想通貨の取引ができるって聞いたんだけど、初めてだから何から始めたらいいのか分からないな。詳しく解説している情報はないかな。」

そんな悩みを解決します。

Pythonのプログラミング環境の作り方からビットバンクAPIの使い方まで、初心者向けにゼロから徹底解説。

ビットバンクAPIの活用をきっかけに、仮想通貨をもっと自由に扱ってみましょう。

ご注意
この記事や本サイトの情報を参考に仮想通貨のプログラムを動かす場合は、全て自己責任でお願いいたします。免責事項に記載の通り、本サイトの情報を参考にして発生したいかなる損害も責任を負いません。

この記事で分かること

  • Pythonプログラミング環境の構築方法
  • ビットバンクAPIの使い方

ビットバンク(bitbank)APIをPythonで使うと何ができる?

ビットバンクのAPIを使ってできること

ビットバンクのAPIを使えば、プログラミングでこんな情報を取得することができます。

  • 仮想通貨の価格
  • 今持っている仮想通貨のバランス
  • 過去の取引履歴
  • 売買の注文
  • etc…

APIって何?
-> 口座の情報にアクセスするためのプログラミング用の窓口。Application Programming Interfaceの頭文字。

そして、このAPIを使ってできる動作を組み合わせることで、具体的にこんなプログラムが作れます。

  • 仮想通貨の積立投資を自動化
  • 仮想通貨の自動売買bot

ビットバンクAPIを使って具体的に何ができるのか、まずはざっくりとイメージしてみましょう。

仮想通貨の積立投資を完全自動化

積立投資は、1ヶ月に1回とか、2週間に1回とか、一定の期間で淡々と買っていく方法。

でも、いちいち自分で注文するのって面倒ですよね。自分で買おうする度に、もっと安くなるかな?って感情も入っちゃいます。

そんな時こそ、APIの活用。一定期間ごとに買っていくように、プログラムで完全自動化できるのでとても楽になります。プログラムの動きはざっくりこんな感じです。

  1. 一定期間毎に起動するように設定する
  2. 仮想通貨を注文する

シンプルに書くとたった2つのステップ。

ビットバンクのAPIを使っているのは、ステップ2の部分ですね。一定期間ごとに自動で注文を入れるためにAPIを使います。

いちいちブラウザやアプリを開いて自分で買う作業を、何度も何度も自分でやり続ける必要なし。プログラムで完全自動化できちゃいます。

仮想通貨の積立投資を完全自動化するプログラムは、ソースも含めてこの記事で詳細を解説しているので参考にしてみてください。

仮想通貨の自動売買bot

自動売買は、ボリンジャーバンドやゴールデンクロス&デッドクロスといったテクニカル指標を使って、いいタイミングで売買して差額の利益を取る方法。

この売買する動きを自動で行うのが、自動売買botです。少し難しそうに聞こえますが、実は簡単。プログラムはざっくりこんな流れで動いています。

  1. 一定期間毎に価格情報を取得する
  2. テクニカル指標に必要な計算をする
  3. 売買条件が成立したら注文を入れる

シンプルに書くとたった3つ。

ビットバンクのAPIを使っているのは、ステップ1と3の部分。価格の情報を取得したり、注文を入れたりするためにAPIを使うわけですね。

ずーっとチャートを見て自分で売買のタイミングを探さなくても、プログラムが全部自動でやってくれます。

自動売買botプログラムの作り方は、ソースも含めてこの記事で詳細を解説しているので参考にしてみてください。

APIはアレンジ次第で何でもできる

ビットバンクのAPIに限らず、いろんなAPIを組み合わせて使えばこんなこともできたりします。

  • 定期的に価格情報を取得する
  • LINEに通知する
  • Twitterに流す

ビットバンクのAPIで仮想通貨の価格を取得して、それをLINEのAPIで自分のLINEに通知したり、あるいはTwitterのAPIでツイートしたり。

APIは、それそのものを一つずつ使うことが目的ではなくて、動作を組み合わせて何をするのか?が大事です。

あなたのアイデア次第で、あなただけのオリジナルのプログラムを作ることができるようになりますね。

ビットバンク(bitbank)APIをPythonで使うには

ビットバンクAPIの使い方を習得する

それでは、早速ビットバンクAPIを使いこなしてみましょう。

ビットバンクAPIの使い方を習得する流れは、以下の通りです。

  1. Pythonのプログラミング環境を整える
  2. ビットバンクAPIのライブラリをインストールする
  3. ビットバンクAPIを実際に動かしてみる

一つずつ、ゆっくり試していきましょう。

Pythonのプログラミング環境を整える

今回、ビットバンクのAPIを使うためにPythonというプログラミング言語を使います。

そのため、まず最初にPythonのプログラミング環境を整えておく必要があります。

ゼロからPythonプログラミングの環境を整える具体的な手順は、この記事にまとめました。初めての方でも必ずPythonプログラミングをスタートできますよ!

すでにPythonを使える人は、どんどん先に進んじゃいましょう。

ビットバンクAPIを操作するライブラリをインストールする

続いて、ビットバンクAPIを操作するライブラリをインストールしていきます。

ここから先は、直前に紹介したPython入門チュートリアルの設定が終わっている状態として話を進めますね。

やり方は簡単。Macならターミナル、Windowsならコマンドプロンプトを立ち上げて、以下のコマンドを打ち込んでエンターすれば終わりです。

sudo pip install git+https://github.com/bitbankinc/python-bitbankcc@e82d8e59a7f5fe43339deacc605a532749ef9859\#egg=python-bitbankcc

やたら長いコマンドに見えますが、ビットバンク公式のGitHubリポジトリにて説明されている通りです。

GitHubリポジトリって何?
-> ソースコード管理サービスGitHub上での、ファイルの保存や履歴を管理する場所のこと。

以下のようなやたら長い文字列がコマンドに入っていますが、これはコミットハッシュといって、特定のバージョンを示しているIDと思ってもらえればOK。

e82d8e59a7f5fe43339deacc605a532749ef9859   #2021年8月16日現在、最新のコミットハッシュ

コマンドの意味は、このIDのバージョンでビットバンクAPIのPythonライブラリをインストールする!です。

少しだけ背伸びしてみる

APIを試してみるといった実験をする場合、仮想環境を使えるようになると将来的にも管理しやすくなります。

仮想環境って何?という説明からその使い方まで、この記事にまとめてあるので参考にしてみてください。もちろん、後から読むのでもOKです!

ビットバンクAPIを実際に動かしてみる

これにて、ビットバンクAPIを動かす準備が整いました。早速動かしてみましょう!

Macならターミナル、Windowsならコマンドプロンプトを起動して、以下のコマンドでPythonを起動します。

python3

すると、以下のようにコマンドを入力していく画面が出てきます。

>>> (ここにコマンドを入力していく)

まず、以下のコマンドを入力。インストールしたビットバンクAPIのライブラリを使うためにインポートします。

>>> import python_bitbankcc

すると、ここで以下のようなエラーが出たのではないでしょうか。

ModuleNotFoundError: No module named 'requests'

“requestsっていうモジュールがないよ!”と書かれています。

インポートしたビットバンクAPIのライブラリが、requestsという別のライブラリを使ってるようですね。

そのため、まずは以下のコマンドでPythonを終了します。Ctrl + D のショートカットでもOK。

>>> exit()

そして、以下のコマンドで “requests” をインストールしてあげましょう。

pip install requests

pipは、Pythonパッケージを管理するためのツール。”pip install XXX” と書いて色々なライブラリをインストールできます。

Successfully installed requests と出てきたら、インストール完了。改めてPythonを起動します。

python3

そして、もう一度ビットバンクAPIのインポートにチャレンジ。

>>> import python_bitbankcc
>>>

何もエラーがなく、次のコマンド入力ができるようになっていれば、インポート成功です。

続いて、ビットバンクAPIを扱うオブジェクトを作ります。

>>> pub = python_bitbankcc.public()

これで、pubというビットバンクのAPIを扱うオブジェクトができました。

最後に、以下のコマンドを打ってみましょう。

>>> value = pub.get_ticker('btc_jpy')
>>> print(value)

value という変数に btc_jpy(ビットコインと日本円の銘柄)の情報をとって、それを print(表示)します。

こんな情報が出てきたのではないでしょうか?

{'sell': '5003941', 'buy': '5003940', 'open': '5168003', 'high': '5206721', 'low': '4950101', 'last': '5003286', 'vol': '575.1096', 'timestamp': 1629184437677}

ビットコインの売買価格などの情報がちゃんと取得できていますね!

sell や buy といった情報の意味は、ビットバンク公式のAPIドキュメントに説明がありますので参考にしてみてください。

なお、ここではビットバンクAPIの使い方を理解するために一つずつ動かしてみましたが、コードをまとめるとこうなります。

import python_bitbankcc
pub = python_bitbankcc.public()
value = pub.get_ticker('btc_jpy')
print(value)

たったの4行!Python入門チュートリアルで紹介しているように、Pythonのプログラムファイルを作ってまとめて実行しても、もちろん同じ結果になります。

例えば、main.py というファイルにまとめたら、こんなコマンドで実行です。

python3 main.py

ビットバンク公式のGitHubリポジトリでは、他にもまだ色々なAPIが紹介されています。

一つ一つ動かしてみて、もっと理解を深めていってみましょう。

ビットバンク(bitbank)APIをPythonでさらに使いこなす

ビットバンクAPIを使いこなす

ここまで来れれば、すでにビットバンクAPIの使い方が分かりました。

ここではさらにもう一歩踏み込んで、private APIも使ってみます。privateという名前の通り、あなたのプライベートな注文などができるようになります。

手順はこんな流れです。

  1. ビットバンクのAPIキーを発行する
  2. ビットバンクのprivate APIを動かしてみる

一つずつやってみましょう。

private APIの使い方に入る前に

ビットバンクのprivate APIを使うには、ビットバンクの口座開設が必要です。

private APIを使うためのAPIキーを発行する必要があるので、読み進める前に口座開設を申し込んでおくと、後からすぐ試せます。

ビットバンクの口座を開設する

ビットバンクのAPIキーを発行する

まずは、ビットバンクのAPIキーを発行します。

あなた専用のAPIキーを使うことによって、あなたのビットバンクの口座をプログラミングで操作できるようになるわけですね。

APIキーは、ビットバンクのサイトから発行します。まず、右上のメニューからAPIを選択。

ビットバンクのメニュー

そのメニューの中から、APIキーの発行ボタンを押します。

ビットバンクのAPIキー発行ボタン

入力欄が出てくるので、ラベルに “プログラミング用” とか、あなたの分かりやすい名前を入力します。

下の画像にある取引と書かれた赤丸部分も選択しておいてください。もし間違えても、後から改めて作り直せます。

ビットバンクのAPIキー発行ダイアログ

これにて、APIキーとシークレットキーの作成が完了です。

ビットバンクのAPIキーを確認する

APIキーは超大事なので、誰かに知られないよう取扱注意です。

ビットバンクのprivate APIを使ってみる

それでは、private APIを使って買い注文を入れてみましょう。

間違って注文が成立しないように、ビットコインを1円で0.0001枚購入する注文を入れて試してみます。できるならそんな値段で買いたいですね笑

まず、Python3を起動します。

python3

そして、ビットバンクAPIのライブラリをインポートします。

>>> import python_bitbankcc

続いて、ビットバンクの private API を扱うオブジェクトを作ります。

以下のコマンドの、123 と ABC のところには、先ほど発行したAPIキーとシークレットキーをそれぞれ入れてください。

>>> prv = python_bitbankcc.private('123', 'ABC')

何もエラーが出なければ、private APIを扱うオブジェクトができました。最後に、以下のコマンドで実際に注文を入れてみます。

>>> prv.order('btc_jpy', '1', '0.0001', 'buy', 'limit')

ビットコインを、1円で、0.0001分、買う、指値で、という注文になります。無茶な注文ですね笑

では、この注文がちゃんと入っているのか確認してみましょう。

まず、ビットバンクの右上のメニューから、履歴を選択。

ビットバンクのメニューから履歴を選択

続いて、カテゴリに「取引所 注文履歴」、通貨ペアに「BTC/JPY」を選択。

ビットバンクでのBTC-JPYの取引履歴を表示

すると、未約定のところに、1円でビットコインを買おうとする注文が入っていることが確認できますね。

ビットバンクでBTCを1円で買おうとする注文

実際にこの注文が成立することはほぼありえないので、念のためキャンセルボタンを押してキャンセルしておくのを忘れずに!

ちなみに、ここまでのコードをまとめるとこんな感じになります。

import python_bitbankcc
prv = python_bitbankcc.private('123', 'ABC')
prv.order('btc_jpy', '1', '0.0001', 'buy', 'limit')

なんと、たったの3行。思ったより簡単かも…なんて思いませんか?

他にも、例えば prv.order の戻り値を print したりすれば、わざわざビットバンクのサイトにログインしなくても簡単に注文を確認できたりします。

こうやってprivate APIを使いこなせば、仮想通貨の取引をプログラミングで自由に扱えるようになりますね。

このプログラムをカスタマイズしていけば、ビットバンクAPIを使ったあなただけのプログラムも作れるようになれます。

ビットバンク(bitbank)APIで仮想通貨を自動売買するbotを作ってみよう

ビットバンクAPIの仕組みを理解したところで、どうせなら簡単な自動売買botを作ってみましょう。

こんな2つのプログラムを作ります。

  • bitbank.py:ビットバンクのAPIにアクセスするクラス
  • main.py:ビットバンクのAPIを使って自動売買をするプログラム

一つずつ見ていきます。

ビットバンク(bitbank)APIにアクセスするクラスを作る

まずは、ビットバンクのAPIにアクセスするためのクラスから。

本記事で紹介したビットバンクAPIのライブラリを使っても良かったのですが、学習のためビットバンクのAPIドキュメントを参考にゼロから作りました。

クラスのメソッドもいくつか作ってありますので、中身を読んでみることできっと理解が深まるはずです。

import requests
import time
import hmac
import hashlib
import json

class Bitbank(object):
  def __init__(self, access_key, secret_key):
    self.__access_key = access_key
    self.__secret_key = secret_key
    self.__rest_api = 'https://api.bitbank.cc/v1'
    self.__public_api = 'https://public.bitbank.cc'

  def _signature(self, nonce, message):
    signature = hmac.new(self.__secret_key.encode(),
                            message.encode(),
                            hashlib.sha256).hexdigest()

	  headers = {
	    "ACCESS-KEY": self.__access_key,
	    "ACCESS-NONCE": nonce,
	    "ACCESS-SIGNATURE": signature,
	    "Content-Type": 'application/json'
		}

    return headers

  def _request_rest_api(self, endpoint, params=None, method='GET'):
    time.sleep(1)

    nonce = str(int(time.time()))
    body = json.dumps(params) if params else ''

    try:
      if method == 'GET':
        headers = self._signature(nonce, nonce + '/v1' + endpoint + body)
        r = requests.get(self.__rest_api + endpoint, headers=headers, params=params)
      else:
        headers = self._signature(nonce, nonce + body)
        r = requests.post(self.__rest_api + endpoint, headers=headers, data=body)

    except Exception as e:
      print(e)
      raise

    return r.json()

  def _request_public_api(self, endpoint):
    time.sleep(1)

    url = self.__public_api + endpoint
    r = requests.get(url)
    return r.json()

  # Tickerの取得
  def ticker(self, pair):
    endpoint = '/' + pair + '/ticker'
    return self._request_public_api(endpoint=endpoint)

  # 口座情報の取得
  def balance(self):
    endpoint = '/user/assets'
    return self._request_rest_api(endpoint=endpoint)

  # 最新価格の取得
  def last(self, pair):
    return float(self.ticker(pair)['data']['last'])

  # 自分の持ってるポジション情報の取得
  @property
  def position(self):
    balance = self.balance()['data']['assets']

  	dict = {}
    for index, item in enumerate(balance, 0):
      k = balance[index]['asset']
      v = float(balance[index]['onhand_amount'])
      if v > 0:
        dict[k] = v
    return dict

  # 取引履歴
  def trade_history(self):
    endpoint = '/user/spot/trade_history'
    return self._request_rest_api(endpoint=endpoint)

  # 最後に購入したレート
  def check_ex_rate(self, pair):
    history = self.trade_history()['data']['trades']
    transaction = [d for d in history if d['side'] == 'buy']
    for index, item in enumerate(transaction, 0):
      if transaction[index]['pair'] == pair:
        return float(transaction[index]['price'])

  # 取引所の売り板からレート取得
  def book_rate(self, pair):
    endpoint = '/' + pair + '/depth'
    book = self._request_public_api(endpoint=endpoint)

    return book['data']['asks'][0][0]

  # 取引所ステータスから最小発注単位を得る(負荷に応じて変わるため)
  def get_min_amount(self, pair):
    endpoint = '/spot/status'
    status = self._request_rest_api(endpoint=endpoint)

    for index, item in enumerate(status['data']['statuses'], 0):
      if status['data']['statuses'][index]['pair'] == pair:
        return status['data']['statuses'][index]['min_amount']

  # 新規オーダー
  def order(self, params):
    endpoint = '/user/spot/order'
    return self._request_rest_api(endpoint=endpoint, params=params, method='POST')

ビットバンク(bitbank)APIを使って自動売買するプログラムを作る

続いて、ビットバンクAPIを使って自動売買するプログラムを作ります。

ファイル名を main.py として、bitbank.pyのクラスを使って自動売買させています。

プログラムの中の ACCESS_KEY と SECRET_KEY に、APIキーとシークレットキーを入れるのを忘れずに!

import time
import pandas as pd
import requests
import json
from bitbank import Bitbank

ACCESS_KEY = 'XXXXXXXXXX'	# ここにAPIキーを入れる
SECRET_KEY = 'XXXXXXXXXX'	# ここにシークレットキーを入れる

bitbank = Bitbank(access_key=ACCESS_KEY, secret_key=SECRET_KEY)

ticker = 'btc'      # ここに取引したい銘柄を入れる(btc, eth, xrp, など)
interval = 60*5     # ここに移動平均をとる時間を入れる(60*5なら 5分足)
duration = 20
pair = ticker + '_jpy'

df = pd.DataFrame()

while True:
  time.sleep(interval)
  position = bitbank.position

  if not position.get('jpy'):
    raise

  df = df.append({'price': bitbank.last(pair)}, ignore_index=True)

  if len(df) < duration:
    print('now collecting data...')
    continue

  df['SMA'] = df['price'].rolling(window=duration).mean()
  df['std'] = df['price'].rolling(window=duration).std()
  df['-2sigma'] = df['SMA'] - 2*df['std']
  df['+2sigma'] = df['SMA'] + 2*df['std']

  if ticker in position.keys():
  	if df['price'].iloc[-1] > df['+2sigma'].iloc[-1] \
    		and bitbank.check_ex_rate(pair) < df['price'].iloc[-1]:
    	params = {
        'pair': pair,
        'amount': position[ticker],
        'side': 'sell',
        'type': 'market'
      }
      r = bitbank.order(params)
      message = 'sell @' + str(bitbank.last(pair))
      print(message)
  else:
  	if df['price'].iloc[-1] < df['-2sigma'].iloc[-1]:
      amount = 0.01		# ここに取引したい量を入れる
      params = {
        'pair': pair,
        'amount': amount,
        'side': 'buy',
        'type': 'market'
      }
      r = bitbank.order(params)
      message = 'buy @' + str(bitbank.last(pair))
      print(message)

  df = df.iloc[1:, :]

このプログラムでは、ボリンジャーバンドというテクニカル指標を使って自動売買させています。

ボリンジャーバンドって何?
-> 「将来の価格はだいたいこの価格帯の中に収まるだろう」という統計学を応用したテクニカル指標のひとつ。統計学上、ボリンジャーバンドの+/-2σ(標準偏差)の範囲内に収まる確率は約95.4%になる。
引用:マネックス証券

統計学上見込める確率から外れた大きな価格変動があった時に売買する、という動きを狙っています。

あとは、main.py と bitbank.py を同じフォルダに置いて、以下のコマンドでmain.pyを動かしてみてくださいね。

python3 main.py

実際にビットバンクAPIを使った自動売買プログラムを動かしてみることで、ビットバンクAPIの理解をもっともっと深めていきましょう。

ビットバンクの口座を開設する

ビットバンク(bitbank)APIをPythonで使いこなせば一歩先の仮想通貨投資ができる

一歩先の仮想通貨投資

ビットバンクのAPIの使い方をゼロから解説しました。

一つ大事にしたいことは、ビットバンクのAPIを使って何がしたいのか?という目的意識。

せっかくAPIの使い方が分かっても、何も活用せずに終わってしまうとそれはそれでもったいないです。

自己責任の範囲で、APIの動作を組み合わせて色々なプログラムを作ってみてくださいね。

ビットバンクの口座を開設する