以前にインストールしたpython3製bitflyerのAPIのラッパー「pytibflyer」。
久しぶりにagent.pyを開いたらエラーになった。
そういえばこれを使えるようにしたのは2018年。
その後(たしか2019年夏)にOSをfedora20から30に換装したから環境の再セットアップが必要なわけだ。
githubのソースはそのまま、まだあった。
pythonはいまだに2.7と3の使い分けがよくわからん。めんどくさいので、必ずpip3で(pipじゃなくて)使うようにしてる。
$ sudo pip3 install pytibflyer
しかも何を間違ったのかsudoしないとうまくインストールできなくてこれもストレスなんだけど、いずれ対処する(pip3 install --userで入れりゃいいのかな)。
進捗表示用にprogressbar2 も必要らしい。
$ sudo pip3 install progressbar2
インストール完了。
自作の(というか原本にちょい手を加えたけけど)agent.pyを動かす。シェバンがうまく効いていない?ぽいので、python3を頭につけて明示的に動かす。
$ python3 ./agent.py
動いた。よかね。
1ビットコインは現在113万円。以前は46万円だったのに。倍以上になってるのか。
まあ、カネには興味なくて、ビットコインそのものの仕組みをいじりたいわけだから参考程度だけど。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):
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('-------------------------------')