注文(建玉)の損益を連続的に取得し続ける bitcoin bitflyer websocket.json-rpc API python

取引所の注文(建玉)を連続的に取得し続けるソースを試す

さんがお試ししたらしい実験的なソースを自分でも動かしてみる。

buyかsellの方向も追加して出力。

websocketは繋ぎっぱなしになるということだろうが、データが勝手に流れてくるのかなー?
.forever()はendress_loopという事か否かを調べないとわからない。

注文が連続的に取得できるということは、ここに板を構築できるということなんだろうが、面倒くさそう。

'''
bitflyer realtime apiのjson-rpcを使ってみる
bitflyer realtime apiのjson-rpcを使ってみる
''' #pip install websocket-client import websocket import json import pandas as pd CHANNEL = "lightning_executions_FX_BTC_JPY" def on_message(ws, message): message = json.loads(message) if message["method"] == "channelMessage": # print("{} {}".format(message["params"] # ["channel"], message["params"]["message"])) params_message = message["params"]["message"] df = pd.DataFrame(params_message) # 直前の約定金額 price = int(df.ix[[len(df) - 1], ["price"]].values.flatten()) # 直前の約定種類 side = str(df.ix[[len(df) - 1], ["side"]].values.flatten()) # 直前の約定数量 size = float(df.ix[[len(df) - 1], ["size"]].values.flatten()) #print("price:{} side:{} size:{}".format(price,side, size)) print(f"price:{price} side:{side} size:{size}") def on_open(ws): ws.send(json.dumps({"method": "subscribe", "params": {"channel": CHANNEL}})) if __name__ == "__main__": # note: reconnection handling needed. ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc", on_message=on_message, on_open=on_open) ws.run_forever() ''' on_messageメソッド内でチャンネルから流れてくる情報(message)を整形して 出力しています。 messageのjson形式をpprintで出力すると下記のようになります。 C:\develope\python> python websocket_json_test.py {'jsonrpc': '2.0', 'method': 'channelMessage', 'params': {'channel': 'lightning_executions_FX_BTC_JPY', 'message': [{'buy_child_order_acceptance_id': 'JRF20191201-043236-740065', 'exec_date': '2019-12-01T04:32:37.4907737Z', 'id': 1439116778, 'price': 807298.0, 'sell_child_order_acceptance_id': 'JRF20191201-043237-234942', 'side': 'SELL', 'size': 0.035}, 何十個も続く {'buy_child_order_acceptance_id': 'JRF20191201-043236-522743', 'exec_date': '2019-12-01T04:32:37.5750077Z', 'id': 1439116793, 'price': 807279.0, 'sell_child_order_acceptance_id': 'JRF20191201-043237-702267', 'side': 'SELL', 'size': 0.02813194}]}} websocket_json_test.py:23: FutureWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing そこからparams、messageをキーに値を取得(message["params"]["message"]) すると、リスト形式で帰ってきますのでpandasのDataFrameに突っ込んで整形しやすくしています。 price:813024 side:['BUY'] size:0.01 price:813000 side:['SELL'] size:0.11 price:813024 side:['BUY'] size:0.05 price:813185 side:['BUY'] size:0.02386979 price:812883 side:['SELL'] size:0.28450276 price:813034 side:['SELL'] size:0.12 price:813036 side:['BUY'] size:0.02 forever'''

「フリーランスアラサーエンジニアのmabui」さんのソースはなんか読みやすい感じで素敵です。

この方のこんなプログラムもサイトに有って、今後MEXBOT作るときに参考にしたい。

emaを使用したBitMEXシストレプログラム公開