閲覧ありがとうございます。
前提・実現したいこと
Python初心者です。
ccxtライブラリを使用して板情報を取得し、csv出力するプログラムを作成しています。
下記は1秒おきにデータを取得し、5回取得できたらcsvで保存し、それを繰り返すプログラムになります。
発生している問題・エラーメッセージ
取得したデータが下記となります。
取得時間は1秒毎に取得出来ているのですが、
「ask_price」「ask_size」「bid_price」「bid_size」 はすべて同じデータが出力されています。
この部分を取得時間時の数値としたいのですが、アドバイス頂けると幸いです。
よろしくお願い致します。
time ask_price_0 ask_size_0 bid_price_0 bid_size_0 0 14:53:17 5244383 0.2 5244250 0.05276649 1 14:53:18 5244383 0.2 5244250 0.05276649 2 14:53:19 5244383 0.2 5244250 0.05276649 3 14:53:20 5244383 0.2 5244250 0.05276649 4 14:53:21 5244383 0.2 5244250 0.05276649
該当のソースコード
Python
1 2import ccxt 3import time 4import os 5import pandas as pd 6from datetime import datetime as dt 7 8exchange = ccxt.binance() 9book = exchange.fetch_order_book('BTC/USDT') 10 11SLEEP_T = 1 #スリープ時間[sec] 12DATA_T = 5 #データ保存の時間[sec] 13 14def get_board(): #板情報取得 15 dict_data = {'time':dt.now()} #現在時刻取得 16 for enum, [[bid_price, bid_size], [ask_price, ask_size]] in enumerate(zip(book['bids'], book['asks'])): 17 dict_data.update({f'ask_price_{enum}': ask_price}) 18 dict_data.update({f'ask_size_{enum}': ask_size}) 19 dict_data.update({f'bid_price_{enum}': bid_price}) 20 dict_data.update({f'bid_size_{enum}': bid_size}) 21 return pd.Series(dict_data) 22 23def get_board_repeat(): #板情報取得 ループ処理 24 init_time = dt.now() #開始時間 25 end_time = dt.now() #終了時間 26 print('START /', init_time) 27 main_list = [] #Pandasデータフレームの元となるリストを初期化 28 while (end_time - init_time).seconds < DATA_T: #データ保存の時間 29 try: #例外が発生しなかった場合 30 dict_data = get_board() #Pandas Seriesに変換 31 main_list.append(dict_data) #Pandas Seriesをリストに追加 32 except Exception as e: #例外が発生した場合 33 print('exception-Z: ', e.args) 34 time.sleep(SLEEP_T) #スリープ時間 35 end_time = dt.now() #現在時刻を取得 36 df_data = pd.concat(main_list, axis = 1).T #Pandas Seriesのリストを結合・転置し、キー名をデータフレームの列名とする 37 df_data.to_csv('./order_book/order_book_day_{}_init_{}_{}_end_{}_{}.csv'.format(init_time.day, init_time.hour, init_time.minute, end_time.hour, end_time.minute)) 38 print('END /', end_time) 39 40if __name__ == '__main__': 41 if not os.path.exists('./order_book'): #「order_book」フォルダの存在確認 42 os.mkdir('./order_book') #フォルダなければ作成 43 while True: 44 try: #例外が発生しなかった場合 45 get_board_repeat() 46 except Exception as e: #例外が発生した場合 47 print('exception-Y: ', e.args)
補足情報(FW/ツールのバージョンなど)
Python:3.8.8
VScode:1.59.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/15 02:01