https://morethinking.tistory.com/6
가상화폐 가격 데이터 받는 방법(분봉도 가능!)
가상화폐의 가격 데이터를 가져오는 방법에 대해 알아보겠습니다. 가상화폐의 가격 데이터는 coinmarket이라는 곳에서 일별 시가 고가 저가 종가 거래량을 제공하고 있습니다. 이더리움 클릭시 나
morethinking.tistory.com
이전 포스트
이 코드에서는 문제가 있는데 바로 한번에 모든 데이터를 받아야 한다는 점입니다. 그래서 이러한 문제를 해결하기 위해서 코드를 개선했습니다.
import requests
import bs4
import pandas as pd
import time
import matplotlib.pyplot as plt
import numpy as np
import datetime
import sqlite3
import ccxt
# start=1504224000000
# start=1582748490000
ticker='BTCUSDT'
con = sqlite3.connect(r"C:\Users\A\Downloads/coindata.db")
cursor = con.cursor()
s= '2018-01-01 00:00:00'
start = int(time.mktime(datetime.datetime.strptime(s,'%Y-%m-%d %H:%M:%S').timetuple()))*1000
def get_day(day):
an= datetime.datetime.fromtimestamp(day/1000)
return an
def get_startpoint(start):
l = pd.read_sql("SELECT date,time FROM %s" % ticker, con)
# con.close()
# print(l)
day = l.iloc[-1]['Date']
min= l.iloc[-1]['time']
tmp= int(time.mktime(datetime.datetime.strptime(day+min+'00','%Y%m%d%H%M%S').timetuple()))*1000
if start < tmp:
start = tmp
return start
def get_tomorrow(today):
today =datetime.datetime.fromtimestamp(int(today)/1000) +datetime.timedelta(minutes=1)
print(today, 'kkk')
# print(today.timetuple())
tomorrow = time.mktime( today.timetuple())
# print(tomorrow)
return int(tomorrow)*1000
#####시작####
try:
cursor.execute("CREATE TABLE {}(Date text, time text, ticker text, Open int, High int, Low int, Closing int, Volumn int)".format(ticker))
print('nothing')
except:
print('exist')
start = get_startpoint(start)
print(get_day(start))
ep='https://api.binance.com'
candle = '/api/v3/klines'
start_date=[]
start_time=[]
open=[]
high=[]
low=[]
close=[]
volume=[]
first_params_candle = {'symbol': ticker, 'interval': '1d', 'startTime': start,'limit':1}
r1 =requests.get(ep+candle, params=first_params_candle)
# print(r1.json())
# print(start, '1')
start = get_tomorrow(start)
# print(start, '2')
while len(r1.json()) >0:
first_params_candle = {'symbol': ticker, 'interval': '1m', 'startTime': start,'limit':1000}
r1 =requests.get(ep+candle, params=first_params_candle)
# print(r1.text)
for i in range(0, len(r1.json())):
# print(r1.json())
# print(datetime.datetime.fromtimestamp(r1.json()[i][0]/1000),r1.json()[i][4])
start_date.append(datetime.datetime.fromtimestamp(r1.json()[i][0]/1000).strftime('%Y%m%d'))
start_time.append(datetime.datetime.fromtimestamp(r1.json()[i][0]/1000).strftime('%H%M'))
open.append(r1.json()[i][1])
high.append(r1.json()[i][2])
low.append(r1.json()[i][3])
close.append(r1.json()[i][4])
volume.append(r1.json()[i][5])
if len(r1.json())>0:
# print(r1.json()[-1])
start = r1.json()[-1][6]+1
for i in range(len(start_time)):
cursor.execute("INSERT INTO {} VALUES(?, ?, ?, ?, ?,?,?,?)".format(ticker), [ start_date[i], start_time[i], ticker, open[i], high[i], low[i], close[i], volume[i] ])
start_date=[]
start_time=[]
open=[]
high=[]
low=[]
close=[]
volume=[]
con.commit()
print(datetime.datetime.fromtimestamp(r1.json()[-1][6]/1000).strftime('%Y%m%d%H%M'), '데이터 다운로드 완료')
else:
print( '완료')
time.sleep(1)
con.close()
위 코드에서 ticker, s , con 주소를 수정하셔서 쓰면 됩니다.
바이낸스 api 데이터 가져오기 개선.txt
0.00MB
'투자 > 가상화폐' 카테고리의 다른 글
가상화폐의 오전 오후 수익률은 어떨까? (1) | 2020.09.22 |
---|---|
가상화폐 가격 데이터 받는 방법(분봉도 가능!) (1) | 2020.09.11 |
댓글