Python/Arduino学習記録,備忘録

コツコツ学んだ学習記録と備忘録。現在Python,Arduino勉強中。

【bitbank自動売買#4】リアルタイムAPIについて

今回はリアルタイムAPIについての記事。
というのも,自動売買(bot)を作ってもそのbotの勝率を確かめるために,過去の価格情報収集方法を色々調べてたらリアルタイムAPIというものを発見。

そこで,今回はリアルタイムAPIを用いる為の環境構築と使用結果について書く。

1. リアルタイムAPIとは

リアルタイムAPIとは何か?
簡単にいうと,リアルタイムで取引所の価格情報を受信することが出来るAPIだと解釈した。

私はbitbankの公式サイトからこの存在を知った。そもそも,Pubnubってなんだよレベルから始まった。
f:id:opuktr:20180520023112p:plain

このPubnubを使えば,bitbankの価格情報をリアルタイムで取得できるので,あとは保存すればいいよねっていう考えで,とりあえずやってみた。

2. Pubnubの環境構築

今回は以下の方法を参考にして,Pubnubから価格情報を取得することを試みた。
bitcoin-systra.hatenablog.com


ここでは,Pubnubとtronadoを用いるので,この2つのパッケージをインストールする。
コマンドプロンプトから,以下のコードを叩くとインストールが完了する(但し,pipのインストールが必要)。

pip install pubnub
pip install tronado

ここで,問題発生。
「parse() got an unexpected keyword argument 'transport_encoding'」とエラーを吐き,インストールが出来ない。
色々調べてみると,pipのversionが「9.0.1-py36hadba87b_3」であることが問題である可能性があるということなので,以下のコードによりversionを変更。

conda install pip

すると,見事2つともインストール完了した。

これにより,Pubnubとtronadoのパッケージが使用可能となるので,あとはサイトを参考にしてコードを書いてみる(ほぼコピーです)。

3. Pubnubとtronadoを用いてリアルタイムで価格情報受信

from pubnub.callbacks import SubscribeCallback
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub_tornado import PubNubTornado
from pubnub.pnconfiguration import PNReconnectionPolicy

config = PNConfiguration()
#bitbankが公開しているSubscribeKeyを設定
config.subscribe_key = 'sub-c-e12e9174-dd60-11e6-806b-02ee2ddab7fe'
config.reconnect_policy = PNReconnectionPolicy.LINEAR
pubnub = PubNubTornado(config)

from tornado import gen

@gen.coroutine
def main(channels):
    class BitbankSubscriberCallback(SubscribeCallback):

        def message(self, pubnub, message):
            # 登録したチャンネルからメッセージ(価格の変化など)がくるたび、この関数が呼ばれます
            print("%s : %s" % (message.channel, message.message))

    listener = BitbankSubscriberCallback()
    pubnub.add_listener(listener)
    pubnub.subscribe().channels(channels).execute()

if __name__ == '__main__':
 #チャンネル設定
    channels = [ 'candlestick_btc_jpy' ]
    main(channels)
    pubnub.start()

コードの内容はあまり理解できていません。解読がんばる。
実行すると,コンソールにどんどんと価格情報が受信されます。
f:id:opuktr:20180520202545p:plain
チャンネルについては,公式サイトに掲載されていますので,そちらを参照してください。
f:id:opuktr:20180520203125p:plain


一応,受信は出来たが,当初の目的である過去の価格情報を取得したり,リアルタイム情報を保存することが出来ていないので,もう少し別のアプロ―チでも考えてみる。
うおお,先は長い。。。