こんにちは.スナフキンです.
BTC1分足〜1時間足ぐらいのデータを1年分取得するスクリプト、みんな作れるけどめんどいからやってなさそう。あと約定履歴も。誰か300円ぐらいでnote書いたら売れるんじゃね?
— スナフキン (@snufkin0866) April 5, 2018
誰か書いてくれないかなーと思ってたのですが,誰も書いてくれなかったので自分で書きました.約定履歴をBF取引開始時から取ってきてcsvに保存するスクリプトです.BitMexはないの?とか1年分だけ欲しいんだけどどうするの?とかは,やり方を自分で調べてください.ここからローソク足を作るのは比較的簡単だと思います.以前書いたstockstatsサンプルにも作り方が載ってるので,分からなければ僕のツイートを遡って探してみてください.
ちなみに2018/4/5現在,約定履歴が約2億件あり,1回で500件取得なので0.12秒に一回叩くとして全て取り終えるまでに,0.12×(2億÷500)÷60 = 800分 = 13時間強かかりますのでご注意ください.←0.12秒でやると,APIの叩きすぎ?で途中でおかしくなっていたので0.15秒待つことにするとうまくいきました.また,データサイズが非常に大きくなると思われますのでPCのデータ容量に余裕がない場合はやめておいた方がいいです.ちなみにcsvファイルは2GBが制限だそうで,サイズ制限に引っかかること,それとファイルサイズが大きいと色々と不便なことから約定履歴50万件ごとにファイルを新しく作ります.
あまり丁寧に書いていないので間違いがあるかもしれませんが,もし間違いを見つけた場合は指摘してくださると助かります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#_*_ coding: utf-8 _*_ import pybitflyer import time import csv api = pybitflyer.API() def save_to_csv(executions, file_name): """ :param executions:約定履歴の2次元配列 :return: """ with open('{}.csv'.format(file_name), 'a') as f: writer = csv.writer(f, lineterminator='\n') writer.writerows(executions) if __name__ == '__main__': file_name = "executions_0" #ヘッダーの書き込み with open('{}.csv'.format(file_name), 'w') as f: writer = csv.writer(f, lineterminator='\n') writer.writerow(["id","side","price","size","exec_date","buy_child_order_acceptance_id","sell_child_order_acceptance_id"]) executions = api.executions(product_code="FX_BTC_JPY", count=500) values = [i.values() for i in executions] last_id = executions[-1]["id"] save_to_csv(values,file_name) #executionsを取得した回数.(apiを叩いた回数) number = 1 while len(executions) > 0: number += 1 try: executions = api.executions(product_code="FX_BTC_JPY", before=last_id, count=500) values = [i.values() for i in executions] last_id = executions[-1]["id"] save_to_csv(values, file_name) except: pass #BFのpublicAPIは500回/分までなので0.12秒待ってあげる. time.sleep(0.15) #50万件ごとに新しいファイルへ. if number % 1000 == 0: print("Make new file") file_name = "executions_" + str(int(number/1000)) with open('{}.csv'.format(file_name), 'w') as f: writer = csv.writer(f, lineterminator='\n') writer.writerow(["id", "side", "price", "size", "exec_date", "buy_child_order_acceptance_id", "sell_child_order_acceptance_id"]) |