min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

Python3 のbitFlyerのtickerラッパー pybitflyerを使えるようにする

f:id:min117:20201005105145p:plain

 

以前にインストールしたpython3製bitflyerAPIのラッパー「pytibflyer」。

min117.hatenablog.com

久しぶりにagent.pyを開いたらエラーになった。

 

そういえばこれを使えるようにしたのは2018年。

その後(たしか2019年夏)にOSをfedora20から30に換装したから環境の再セットアップが必要なわけだ。

 

githubのソースはそのまま、まだあった。

github.com

 

pythonはいまだに2.7と3の使い分けがよくわからん。めんどくさいので、必ずpip3(pipじゃなくて)使うようにしてる。

 

$ sudo pip3 install pytibflyer

f:id:min117:20201005101605p:plain

しかも何を間違ったのかsudoしないとうまくインストールできなくてこれもストレスなんだけど、いずれ対処する(pip3 install --userで入れりゃいいのかな)。

 

進捗表示用にprogressbar2 も必要らしい。

$ sudo pip3 install progressbar2

f:id:min117:20201005102040p:plain

 

インストール完了。

f:id:min117:20201005103005p:plain

 

自作の(というか原本にちょい手を加えたけけど)agent.pyを動かす。シェバンがうまく効いていない?ぽいので、python3を頭につけて明示的に動かす。

$ python3 ./agent.py

f:id:min117:20201005102101p:plain

 

動いた。よかね。

f:id:min117:20201005102153p:plain

1ビットコインは現在113万円。以前は46万円だったのに。倍以上になってるのか。

f:id:min117:20201005105600p:plain

まあ、カネには興味なくて、ビットコインそのものの仕組みをいじりたいわけだから参考程度だけど。pythonの勉強にはなる。

 

保存用

[fedora data_ticker]$ python3 ./agent.py 

  1 #!/usr/bin/env python

  2 # -*- coding: utf-8 -*-

  3 

  4 # 20171115

  5 # bitFlyerからビットコイン対円のティッカーを取得 ← ビットコインの価格チャート?

  6 # http://testpy.hatenablog.com/entry/2017/11/15/233019

  7 #

  8 # api = pybitflyer.API()でAPIを取得して、 

  9 # ticker = api.ticker(product_code='BTC_JPY')でティッカーが取得できる。 

 10 # keyもsecretもいらず非常にシンプルだが、 サーバーへ2秒置きにアクセスして

 11 # 10分間分のティッカーを取得し、 CSVファイルに保存して、読み込みデータを表示するまでのコードを書いた

  1 #!/usr/bin/env python

  2 # -*- coding: utf-8 -*-

  3 

  4 # 20171115

  5 # bitFlyerからビットコイン対円のティッカーを取得 ← ビットコインの価格チャート?

  6 # http://testpy.hatenablog.com/entry/2017/11/15/233019

  7 #

  8 # api = pybitflyer.API()でAPIを取得して、 

  9 # ticker = api.ticker(product_code='BTC_JPY')でティッカーが取得できる。 

 10 # keyもsecretもいらず非常にシンプルだが、 サーバーへ2秒置きにアクセスして

 11 # 10分間分のティッカーを取得し、 CSVファイルに保存して、読み込みデータを表示するまでのコードを書いた

 12 

 13 import pybitflyer

 14 import pandas as pd

 15 from time import sleep

 16 from progressbar import ProgressBar

 17 

 18 SLEEP_SECOND = 2    # データ取得間隔(秒)

 19 N_MINUTE = 10       # データ取得時間(分)

 20 DIR_DATA = '../data_ticker' # データ格納フォルダ

 21 PRODUCT_CODE = 'BTC_JPY'    # 取得するデータ

 22 FILE_BTC_JPY = 'BTC_JPY_TICKER.csv' # TICKERファイル名

 14 import pandas as pd

 15 from time import sleep

 16 from progressbar import ProgressBar

 17 

 18 SLEEP_SECOND = 2    # データ取得間隔(秒)

 19 N_MINUTE = 10       # データ取得時間(分)

 20 DIR_DATA = '../data_ticker' # データ格納フォルダ

 21 PRODUCT_CODE = 'BTC_JPY'    # 取得するデータ

 22 FILE_BTC_JPY = 'BTC_JPY_TICKER.csv' # TICKERファイル名

 23 

 24 class Agent:

 25     def __init__(self):

 26         pass

 27 

 28     def main(self):

 25     def __init__(self):

 26         pass

 27 

 28     def main(self):

 29         self.get_ticker()

 30         df = self.read_ticker()

 31 

 32     """

 33     TICKER

 34     """

 35     def get_ticker(self):

 36         api = pybitflyer.API()

 37         tickers = []

 38 #        count = 60 // SLEEP_SECOND * N_MINUTE   # サーバへのアクセス回数

 39         count = 10

 40         pb = ProgressBar(max_value=count)

 41         for i in range(count):

 42             ticker = api.ticker(product_code=PRODUCT_CODE)

 43             tickers.append(ticker)

 44             sleep(SLEEP_SECOND)

 45             pb.update(i)    # Update progressbar

 46 

 47         df = pd.DataFrame(tickers)

 48         df.to_csv(DIR_DATA+FILE_BTC_JPY, index=False)

 49 

 50     def read_ticker(self):

 51         df = pd.read_csv(DIR_DATA+FILE_BTC_JPY)

 52         df['timestamp'] = pd.to_datetime(df['timestamp'])   # stringからdatetimeへ

 53 

 54         keys = ['timestamp', 'product_code', 'tick_id', \

 55                 'best_ask', 'best_ask_size', 'best_bid', 'best_bid_size', \

 56                 'total_ask_depth', 'total_bid_depth', 'ltp', \

 57                 'volume', 'volume_by_product']

 58 

 59         df = df[keys]   # カラムを表示したい順に並べる

 60         df = df.set_index('timestamp')  # timestampをindexに

 61 

 62         # debug

 63         print(df.head().to_string())

 64         print('')

 65         print(df.tail().to_string())

 66         print('')

 67 

 68         return df

 69 

 70 if __name__ == "__main__":

 71     Agent().main()

 72 

 73     print('-------------------------------')

 74     print('best_ask 最高買い価格')

 75     print('best_bid: 最低売り価格')

 76     print('best_ask_size: 最高買い価格の数')

 77     print('best_bid_size: 最低売り価格の数')

 78     print('ltp: 最終取引価格')

 79     print('total_ask_depth: 買い注文総数')

 80     print('total_bid_depth: 売り注文総数')

 81     print('volume_by_product: 価格ごとの出来高')

 82     print('best_ask, best_bid, ltpの単位は円でOKだと思うけど、 best_ask_size, best_bid_size, total_ask_depth, total_bid_depth, volume_by_productは単位はBTCかな? CSVのファイル>    の数値は少数第8位まであって、0.00000001BTC=1SatoshiなのでOKとは思うが。')

 83     print('-------------------------------')