質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

CCXT

CCXT(CryptoCurrency eXchange Trading)は、ビットコインやアルトコインといった仮想通貨の売買を自動化するためのJavaScript/Python/PHP向けライブラリ。CCXTが取引所間のAPI差分を吸収することで、異なる取引所に共通した実装が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

2回答

2528閲覧

ccxtライブラリを使用し、1秒毎に板情報を取得、csv出力したい。

ASL

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

CCXT

CCXT(CryptoCurrency eXchange Trading)は、ビットコインやアルトコインといった仮想通貨の売買を自動化するためのJavaScript/Python/PHP向けライブラリ。CCXTが取引所間のAPI差分を吸収することで、異なる取引所に共通した実装が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2021/08/30 07:03

閲覧ありがとうございます。

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

get_board関数の中で毎回取得してあげれば良いのではないでしょうか?

python

1# 例 2def get_board(): 3 book = exchange.fetch_order_book('BTC/USDT') # この行を追加 4 dict_data = {'time':dt.now()}

投稿2021/09/14 07:58

TANAKAKazuyoshi

総合スコア96

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASL

2021/09/15 02:01

ご回答ありがとうございます。 無事にデータを取得する事が出来ました。 ありがとうございました。
guest

0

book = exchange.fetch_order_book('BTC/USDT')

を一回実行しているだけで、その後更新していません。

その結果、毎回同じ値が出ています。

投稿2021/08/30 08:25

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASL

2021/08/30 11:14

ご回答ありがとうございます。 繰り返し実行する為にはどのような編集を行えばよろしいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問