仮想通貨で遊ぶ日記

リスクは低く! 志も低く。そんな仮想通貨の遊び方

リアルタイムで売買データをもらってくる

 HitBTCでは外部アプリ開発のためにAPIを公開しているので、これを利用してみます。
 プログラム言語はJAVAでいいかなぁと最初思ったのですが、プログラムを書くなんてひっさしぶりすぎて、それまで覚えてきたことを確認するのも面倒なのでPythonを使ってみることに。
 簡略化記法の言語はそれに慣れてしまうと他に戻れないような気がして手を出してこなかったのですが、キーを叩く量が格段に減ってなかなかにステキ。
 
 さて、自動売買ということでリアルタイムに売買情報が受信できなければいけません。といったわけでWebSocketでの取引情報の受信をしてみました。過去のデータについては別途RESTでもらってこい、ということのようなので今回はパス。

  • プログラム
# coding: UTF-8

import websocket;

class SocketClient(object):
    def __init__(self):
        websocket.enableTrace(False);
        self.__ws = websocket.WebSocketApp("ws://api.hitbtc.com:80",
                                    on_message = self.__on_message,
                                    on_error = self.__on_error,
                                    on_close = self.__on_close);
        self.__ws.on_open = self.__on_open;
        #ws.run_forever();
    
    def run(self):
        self.__ws.run_forever();

    def __on_open(self, ws):
        print("connect");
    
    def __on_message(self, ws, message):
        print("msg: " + message);
    
    def __on_error(self, ws, error):
        print(error);
    
    def __on_close(self, ws):
        print("closed");

client = SocketClient();
client.run();
  • データ(ほんの一部)
:~/test$ python3 a.py 
connect
msg: {"MarketDataIncrementalRefresh":{"seqNo":1160560,"symbol":"LTCUSD","exchangeStatus":"working","ask":[],"bid":[{"price":"3.998","size":3}],"trade":[],"timestamp":1489590054594}}
msg: {"MarketDataIncrementalRefresh":{"seqNo":10306685,"symbol":"LTCBTC","exchangeStatus":"working","ask":[{"price":"0.00340","size":0}],"bid":[],"trade":[],"timestamp":1489590054678}}
msg: {"MarketDataIncrementalRefresh":{"seqNo":10306686,"symbol":"LTCBTC","exchangeStatus":"working","ask":[{"price":"0.00342","size":13}],"bid":[],"trade":[],"timestamp":1489590054784}}
msg: {"MarketDataIncrementalRefresh":{"seqNo":11362727,"symbol":"DASHBTC","exchangeStatus":"working","ask":[{"price":"0.078358","size":90350},{"price":"0.078359","size":0}],"bid":[{"price":"0.078355","size":0},{"price":"0.078354","size":1000},{"price":"0.078195","size":0},{"price":"0.078194","size":145350}],"trade":[],"timestamp":1489590054831}}

 実行すればでろでろとデータが流れてきます。未整形なので見づらいのは後でプログラム側で取り込んでなんとでもできるのですが、データを眺めていて気づいた。

 DashCoinに関するデータが全然流れてこないの。

 書いたプログラムがおかしいとかハブられているってわけじゃなくて、単に売買量も回数もすっくないから。色々な仮想通貨の売買ができるものだから、そっちのデータがほとんどなんですよ。
 DASHBTCとかいう通貨ペアはもりもり出てくるんだけど、残念ながらこいつは似た名前の別モノ。
 つまりは、ちまちまとDashCoinの売買だけをするつもりでこのAPIからデータをもらっても、99%以上の割合でそのまま捨てることになってしまうのですよね。過去データをRESTでもらってくるとか、socket.io Market Dataとやらではできるようでも、こちらは特に絞ってもらってくることはできない?

 どうせならビットコインをベースにして他のアルトコインの売買もすればいいんじゃないか、とも思うのですが、運転資金がそれだけ必要になってくるんですよね。

 ぶっちゃけ、お金をぶっこむ勇気がありません。

 これから作る予定のポンコツくん(仮称)がポンコツを脱するようなことがあれば検討してもいいんですが、なんだかもりもりとお金をドブに捨ててくれる未来しか見えこないんですよね。
 まぁ、APIのドキュメントをちゃんと読むのが一番先でしょうね。英語わっかんねーんだけどさ。

 といったわけで、当面の目標はデータの貰い方と、その分析部分になります。実際の売買なんて当分先になるでしょう。おっかなくてできないって。