【bitbank自動売買#4】リアルタイムAPIについて
今回はリアルタイムAPIについての記事。
というのも,自動売買(bot)を作ってもそのbotの勝率を確かめるために,過去の価格情報収集方法を色々調べてたらリアルタイムAPIというものを発見。
そこで,今回はリアルタイムAPIを用いる為の環境構築と使用結果について書く。
1. リアルタイムAPIとは
リアルタイムAPIとは何か?
簡単にいうと,リアルタイムで取引所の価格情報を受信することが出来るAPIだと解釈した。
私はbitbankの公式サイトからこの存在を知った。そもそも,Pubnubってなんだよレベルから始まった。
この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()
コードの内容はあまり理解できていません。解読がんばる。
実行すると,コンソールにどんどんと価格情報が受信されます。
チャンネルについては,公式サイトに掲載されていますので,そちらを参照してください。
一応,受信は出来たが,当初の目的である過去の価格情報を取得したり,リアルタイム情報を保存することが出来ていないので,もう少し別のアプロ―チでも考えてみる。
うおお,先は長い。。。