こういうサイトはありそうだし、本格的なものは、こちら「ビットコイン裁定取引のチャンスを可視化する」にもあるのだけど、今後自分のシステムに埋め込みたかったので作ってみた。2次元配列とnumpyを駆使すれば、もっとすっきり書けるのだろうけど勉強不足ですみません。
サンプルは、Coincheck、QuoineそしてbitFlyerのTickerを2秒毎に取得して折れ線グラフを描いている。裁定取引の機会発生が一目瞭然で見ていて楽しい。
リアルタイム描画に関しては、こちらを参考にさせて頂きました。@hausenさんありがとうございます。
import numpy as np
import matplotlib.pyplot as plt
import json
import requests
import urllib.parse
data=[]
def ticker():
URL={'bitFlyer':'https://api.bitflyer.jp/v1/getticker?product_code=BTC_JPY',
'Quoine':'https://api.quoine.com/products/5',
#'Zaif':'https://api.zaif.jp/api/1/ticker/btc_jpy',
'Coincheck':'https://coincheck.com/api/ticker'}
cc = float(requests.get(URL['Coincheck']).json()["last"])
qo = float(requests.get(URL['Quoine']).json()['last_traded_price'])
bf = float(requests.get(URL['bitFlyer']).json()["ltp"])
# zf = requests.get(URL['Zaif']).json()
return (cc,qo,bf)
def init():
initialdata = ticker()
#print (initialdata)
#最初は同じ値で埋める
for x in range(10):
data.append(initialdata)
#print (data)
def pause_plot():
fig, ax = plt.subplots(1, 1)
x = np.arange(0,10,1)
y1 = []
y2 = []
y3 = []
for z in data:
y1.append(z[0])
y2.append(z[1])
y3.append(z[2])
# 初期化的plot
lines1, = ax.plot(x, y1, label="cc")
lines2, = ax.plot(x, y2, label="qo")
lines3, = ax.plot(x, y3, label="bF")
plt.legend()
# ここから無限にplot
while True:
# plotデータの更新
lastdata = ticker()
y1.pop(0)
y1.append(lastdata[0])
y2.pop(0)
y2.append(lastdata[1])
y3.pop(0)
y3.append(lastdata[2])
# 描画データセット
lines1.set_data(x, y1)
lines2.set_data(x, y2)
lines3.set_data(x, y3)
#最大値を求める(ここダサい)
ynp = np.array(y1)
ynp = np.append(ynp, y2)
ynp = np.append(ynp, y3)
# x軸,y軸の範囲修正.
ax.set_xlim((x.min(), x.max()))
ax.set_ylim((ynp.min()-10000, ynp.max()+10000))
plt.pause(2) #2秒毎
if __name__ == "__main__":
init()
pause_plot()