bitFlyerのAPIを使ってPythonでチッカーを作る方法

皆さんこんにちは。

仮想通貨の自動取引システムを作る場合、各取引所のAPIを利用します。

しかし、いきなり取引システムを作るのは難しいです。

そこでbitFlyerAPIを使ってビットコイン価格を表示するチッカーを作ってみます。

使用するプログラミング言語はPython(バージョン3)です。

Pythonの環境構築方法については以下の記事をご覧ください。

URL : http://104ch.webcrow.jp/2017/07/18/post-353/

APIキーの取得

まずAPIはbitFlyerに登録していないと使えません。

なのでbitFlyerに登録していない方は初めに登録してください。

登録はこちらから
bitFlyer ビットコインを始めるなら安心・安全な取引所で

登録済みならトップ画面の左メニューから『bitFlyer Lightning』を開いてください。

そしてlightning画面の左の『』のようなマークをクリックします。

するとメニューが出てきてそこに『API』という項目があるのでクリックします。

すると次の画像のようなAPIページが出てきます。

APIを利用するにはまずAPIキーというものを取得する必要しなければなりません。

このページの一番下に『新しいAPIキーを取得』というボタンがあると思います。

それを押すと次のような画面が出てきます。

そこでラベルとAPIキーの権限を設定します。

ラベルは分かりやすい名前をつければOKです。

権限については必要な権限だけチェックしてください。

これでOKを押すと新たにAPIキーが追加されます。

これでAPIを使う下準備は完了です。

API KeyAPI Secret がAPIを使うために必要になってきます。

ビットコイン価格を表示するチッカーの作成

ではPythonを使ってビットコイン価格のチッカーを作っていきます。

次がチッカーの作成手順です。

  1. Prive APIを使うための認証
  2. リクエストの送信
  3. レスポンス(ビットコイン価格)を表示

まず認証ですがこれには先ほどのAPIキーを使用して署名を作成します。

署名の作成方法は次のようなコードになります。

import hmac
secret = "API Secretを入力"
h = hmac.new(secret)
sign = h.hexdigest()

そして次にHTTPリクエストするのに必要なデータを作っていきます。

必要なデータは次の4つです。

  • url : リクエストを受けるURL
  • data : リクエストに送るデータの本体
  • method : GETまたはPOST
  • headers : HTTPヘッダー

詳しい解説は省きますがこの4つがリクエストを送るのに必要です。

そして認証に使う署名はheaders部分に含まれます。

またdata部分ですが、今回は次のようなJSONデータを送ります。

{
    "product_code":"BTC_JPY"
}

これはビットコインの日本円換算の価格を取得するためです。

必要なJSONデータについてはbitFlyerのAPIマニュアルなども参考にしてください。

そしてHTTPリクエストを送るにはurllibというライブラリを使います。

urllibのRequestオブジェクトでリクエストを作成します。

その書式は次のようになっています


urllib.request.Request(url, data=data, method=method, headers=headers)

ここまで説明したことをコードにすると次のようになります。

import json
from datetime import datetime
import hmac
import urllib

key = "API Keyを入力"
secret = "API Secretを入力"
timestamp = str(datetime.timestamp(datetime.now()))
method = "GET"
path = "/v1/ticker"
data = json.dumps({"product_code":"BTC_JPY"}).encode("utf-8")
url = "https://api.bitflyer.jp" + path

h = hmac.new(secret)
sign = h.hexdigest()

headers = {
 'ACCESS-KEY': key,
 'ACCESS_TIMESTAMP' : timestamp,
 'ACCESEE-SIGN' : sign,
 'Content-Type' : 'application/json'
}

request = urllib.request.Request(url, data=data, method=method, headers=headers)
with urllib.request.urlopen(request) as response:
    print(response.read().decode("utf-8"))

上手くいけば次のようなJSONデータが表示されるはずです。

{
    "product_code":"BTC_JPY",
    "timestamp":"2017-10-27T23:58:31.59",
    "tick_id":297251,
    "best_bid":652904.0,
    "best_ask":652970.0,
    "best_bid_size":0.01740079,
    "best_ask_size":0.00999901,
    "total_bid_depth":4597.60342932,
    "total_ask_depth":2280.18804701,
    "ltp":652964.0,
    "volume":227188.83974545,
    "volume_by_product":20104.62759378
}

ltpが最終取引価格、volumeが24時間の取引量です。

ただこれだとチッカーではないのでリアルタイムで表示するように改良してみます。

次のようにwhile文でループさせます。

while True:
    request = urllib.request.Request(url, data=data, method=method, headers=headers)
    with urllib.request.urlopen(request) as response:
        print(response.read().decode("utf-8"))

こうすると価格が更新されるたびにチッカーも更新されます。

ただJSON形式でデータが表示されるので少し見にくいです。

なのでチッカーを改良します。



チッカーの改良

改良すると言っても少しコードを書き換えるだけです。

要はチッカーなので値段だけ分かればOKです。

なので次のようにコードの最後の部分を書き換えました。

while True:
    request = urllib.request.Request(url, data=data, method=method, headers=headers)
    with urllib.request.urlopen(request) as response:
        jsonDict = json.loads(response.read().decode("utf-8"))
        print("時刻", format(jsonDict['timestamp']))
        print("価格 : %s円" % format(jsonDict['ltp']))
        print("\r\n")

すると次のように先ほどよりは少しは見やすく表示されるようになります。

見てわかるように単にJSON形式のデータから時刻と価格を抜き出して表示しているだけです。

まとめ

今回はbitFlyerのAPIの利用例としてチッカーを作りました。

もちろんチッカーだけでなく自動取引システムも作れると思います。

ただし自動取引システムを作るには機械学習の知識も必要になります。

自分に必要だと思う知識を取捨選択して学習していってください。

もしこの記事で分からないことがあればコメント欄などで質問してください。

分かる範囲で答えます。では、また。

取引所比較エリアの出力関数
国内の仮想通貨取引所の比較
Zaifスプレッド(取引手数料)が低いのが特徴です。また他の取引所では買えないペペキャッシュやXCPなどのトークンも多く扱っているのでトークン購入ならここがおススメです。

取扱い主要通貨 : ビットコイン, イーサリアム, ネム, モナコイン, 各種トークン

この記事をシェアする

フォローする