Help us understand the problem. What is going on with this article?

Pythonで仮想通貨自動取引 (小ネタ編5) : 取引所Tickerのリアルタイムグラフ表示

More than 3 years have passed since last update.

こういうサイトはありそうだし、本格的なものは、こちら「ビットコイン裁定取引のチャンスを可視化する」にもあるのだけど、今後自分のシステムに埋め込みたかったので作ってみた。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()

実行結果
スクリーンショット 2017-12-26 19.14.29.png

mocako
仮想通貨自動取引BOT動かしてます。本業は個人アプリ開発、1個当たったのでそこそこ食えてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away