30分で作るBitfinexオープンポジション可視化システム① - とりあえずデータをとってくる
こんばんは。でめきん(@demekinnomimi)です。黒ラベル見てたら気分が悪くなってきたので、ロジックがオープンなBitfinexオープンポジション可視化システムを作っていこうと思います。眠いです。
インスパイア元を書こうとしたのですが、怒られそうなので、今回はやめておきます。
今回のシステムを作るにあたって考慮すること一覧
① 以下のAPIを用いて時間とサイド(Long or Short)とポジション数をInflux DB保存するpythonスクリプトを作るhttps://docs.bitfinex.com/v2/reference#rest-public-stats
② InfluxDBへ以下の情報を保存すること
'time' = 時間、'field' = ポジション数、高値、安値、'tag' = サイド
③ ①を cron で1分感覚で呼び出すこと
④ Web公開どうしよう
以上4点。
とりあえず有り合わせで作ったpython script
import json
import requests
from influxdb import InfluxDBClient
class influxDB():
def __init__(self, user, password, db_name="bitfinex"):
self.user = user
self.password = password
self.dbname = db_name
self.client = InfluxDBClient("localhost", "8086", self.user, self.password, self.dbname)
def insert_db(self, json_body):
dbs = self.client.get_list_database()
sample_db = {'name' : self.dbname}
if sample_db not in dbs:
self.client.create_database(self.dbname)
rp_query = 'CREATE RETENTION POLICY ' + '"rp_365day" ON "' + self.dbname+ '" DURATION 365d REPLICATION 1'
self.client.query(rp_query)
self.client.write_points(json_body)
if __name__ == '__main__':
influx = influxDB('DBユーザーネーム', 'DBパスワード')
timeout = 20
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36 "}
with requests.get('https://api.bitfinex.com/v2/stats1/pos.size:1m:tBTCUSD:long/last', timeout = timeout, headers = headers) as response:
html = json.loads(response.text)
time = html[0]
long_pos = html[1]
tags_data = {"side":"Long"}
fields_data = {"long_pos":str(long_pos)}
insert_data = [{'measurement': "bitfinex_positions_1m", 'tags': tags_data,'time' : time, 'fields':fields_data}]
influx.insert_db(insert_data)
with requests.get('https://api.bitfinex.com/v2/stats1/pos.size:1m:tBTCUSD:short/last', timeout = timeout, headers = headers) as response:
html = json.loads(response.text)
time = html[0]
short_pos = html[1]
tags_data = {"side":"Short"}
fields_data = {"long_pos":str(long_pos)}
insert_data = [{'measurement': "bitfinex_positions_1m", 'tags': tags_data,'time' : time, 'fields':fields_data}]
influx.insert_db(insert_data)
# [ MTS, OPEN, CLOSE, HIGH, LOW, VOLUME ]
with requests.get('https://api.bitfinex.com/v2/candles/trade:1m:tBTCUSD/last', timeout = timeout, headers = headers) as response:
html = json.loads(response.text)
time = html[0]
open = html[1]
close = html[2]
high = html[3]
low = html[4]
volume = html[5]
fields_data = {"open":float(open), "close":float(close), "high":float(high), "low":float(low), "volume":float(volume)}
insert_data = [{'measurement': "bitfinex_candles_1m", 'time' : time, 'fields':fields_data}]
influx.insert_db(insert_data)
とりあえず格納したデータ
> select * from bitfinex_positions_1m
name: bitfinex_positions_1m
time long_pos side
---- -------- ----
1547397600000 31622.21617862 Long
1547397600000 31622.21617862 Short
1547397660000 31624.03561884 Long
1547397660000 31624.03561884 Short
1547397720000 31624.51364203 Long
1547397720000 31624.51364203 Short
1547397780000 31625.09460558 Long
1547397780000 31625.09460558 Short
> select * from bitfinex_candles_1m
name: bitfinex_candles_1m
time close high low open volume
---- ----- ---- --- ---- ------
1547397600000 3592.5 3592.5 3592.5 3592.5 0.144
1547397660000 3592.9 3594.55198694 3592.2 3593.5 2.46482735
1547397720000 3595.2 3595.7 3593.2 3593.2 5.26866054
cron優秀です。でも読み方クーロン派閥が強くてつらいです。眠いので続きは明日やります。おやすみなさい。
この記事が気に入ったらサポートをしてみませんか?