Contents
ビットコインのAPIが公開されているので利用してみようと思い立つ
今流行りのビットコインですが、
APIを用意している取引所も多く、
これを利用してビットコインの
Tickerデータを取得するというのをやってみます。
私が利用しているビットコインの取引所は
おそらく今一番有名なbitFlyerです。
FXのAPIも公開されている
bitFlyerでは、ビットコインの現物取引
(仮想通貨の売買を現物取引というのも変な気がしますが)
のほかにビットコインのFX取引ができます。
現物取引だと買いから入るしかありませんが、
FXだと外為取引と同様に売りから入ることもできます。
あと、こちらも証拠金取引で
10倍までレバレッジをかけることもできます。
(bitFlyerの場合)
ただでさえ価格変動の激しいビットコインに
10倍のレバレッジをかけるのもどうかと思いますが、
とにかく最大10倍までかけることができます。
FXのTicker APIも公開されていますので、
現物のビットコインと合わせて取得してみることにします。
ビットコインAPIを使ってTickerを取得するプログラムを作ってみる
bitFlyerでは、PubNubを利用してリアルタイムの更新情報を配信しているので、これを利用させてもらいます。
事前準備その1・データベースを用意
事前準備として、取得したデータを保存する
データベースを作成しておきます。
今回はPython + Sqliteを使用します。
では、早速Pythonのソースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# -*- coding: utf-8 -*- import sqlite3 DB = 'bitflyer.db' if __name__ == '__main__': conn = sqlite3.connect(DB) cur = conn.cursor() sql = "create table btcfx (bc_total_bid_depth, bc_total_ask_depth, bc_ltp, \ bc_tick_id, bc_volume, bc_best_bid, bc_best_ask_size, \ bc_volume_by_product, bc_product_code, bc_timestamp, \ bc_best_bid_size, bc_best_ask, \ fx_total_bid_depth, fx_total_ask_depth, fx_ltp, \ fx_tick_id, fx_volume, fx_best_bid, fx_best_ask_size, \ fx_volume_by_product, fx_product_code, fx_timestamp, \ fx_best_bid_size, fx_best_ask, \ diff_bid, diff_ask, created);" cur.execute(sql) conn.commit() conn.close() |
bitflyer.dbというデータベースに対して
btcfxというテーブルを作成しておきます。
事前準備その2・PythonでPubNubを使えるようにする
PubNubでは、Pythonから使いやすいように
ライブラリを用意してくれていますので、
これをインストールしておきます。
1 |
pip install 'pubnub>=4.0.8' |
これだけです。
※PubNubのドキュメントはこちら
APIでbitcoin情報を取得してデータベースに保存する
では、いよいよプログラム本体です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# -*- coding: utf-8 -*- """ Created on Fri Mar 3 15:24:33 2017 @author: ichizo """ from pubnub.enums import PNStatusCategory from pubnub.pnconfiguration import PNConfiguration from pubnub.pubnub import PubNub, SubscribeListener import sqlite3 import time import datetime DB = 'bitflyer.db' if __name__ == '__main__': pnconfig = PNConfiguration() pnconfig.subscribe_key = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f" pnconfig.ssl = False pubnub = PubNub(pnconfig) my_listener = SubscribeListener() pubnub.add_listener(my_listener) pubnub.subscribe().channels(['lightning_ticker_BTC_JPY', 'lightning_ticker_FX_BTC_JPY']).execute() my_listener.wait_for_connect() print('connected') i = 0 while i < 360: conn = sqlite3.connect(DB) cur = conn.cursor() result = my_listener.wait_for_message_on('lightning_ticker_BTC_JPY') print(result.message) bc_data = result.message print(bc_data['best_bid']) fx_result = my_listener.wait_for_message_on('lightning_ticker_FX_BTC_JPY') print(fx_result.message) fx_data = fx_result.message print(fx_data['best_bid']) sql = "INSERT INTO btcfx (bc_total_bid_depth, bc_total_ask_depth, bc_ltp, \ bc_tick_id, bc_volume, bc_best_bid, bc_best_ask_size, \ bc_volume_by_product, bc_product_code, bc_timestamp, \ bc_best_bid_size, bc_best_ask, \ fx_total_bid_depth, fx_total_ask_depth, fx_ltp, \ fx_tick_id, fx_volume, fx_best_bid, fx_best_ask_size, \ fx_volume_by_product, fx_product_code, fx_timestamp, \ fx_best_bid_size, fx_best_ask, \ diff_bid, diff_ask, created) \ VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',\ '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',\ '%s','%s','%s','%s','%s','%s','%s')" \ % (bc_data['total_bid_depth'], bc_data['total_ask_depth'], bc_data['ltp'], \ bc_data['tick_id'], bc_data['volume'], bc_data['best_bid'], bc_data['best_ask_size'], \ bc_data['volume_by_product'], bc_data['product_code'], bc_data['timestamp'], \ bc_data['best_bid_size'], bc_data['best_ask'], \ fx_data['total_bid_depth'], fx_data['total_ask_depth'], fx_data['ltp'], \ fx_data['tick_id'], fx_data['volume'], fx_data['best_bid'], fx_data['best_ask_size'], \ fx_data['volume_by_product'], fx_data['product_code'], fx_data['timestamp'], \ fx_data['best_bid_size'], fx_data['best_ask'], \ bc_data['best_bid'] - fx_data['best_bid'], bc_data['best_ask'] - fx_data['best_ask'], datetime.datetime.now()) print(sql) cur.execute(sql) conn.commit() conn.close() i = i + 1 time.sleep(60) pubnub.unsubscribe().channels(['lightning_ticker_BTC_JPY', 'lightning_ticker_FX_BTC_JPY']).execute() my_listener.wait_for_disconnect() print('unsubscribed') |
PubNub Subscribe Keyは、
bitFlyerで公開されているものを利用します。
本当は、Pythonを待機状態にしておいて
PubNubから更新情報が来たら
データを登録するみたいなことを
やりたかったのですが、
やり方がわからず挫折しました。
で、sleepを60秒間隔で入れて
1分おきのビットコインの価格情報を
取得するようにしました。
現物とFXの両方を連続して取得して
同じレコードに放り込んでいます。
同じレコードの現物とFXが揃っていたら
色々できるかもと考えてのことです。
これからビットコインの取引を始めようかと考えている方、
ビットコインFXに興味のある方はbitFlyerがおススメです。