예제 소스
실시간 XGBoost와 DQN 결합 구조: 거래 AI를 검증하는 법 · 파일 59개
Scrapper.py
import time
import pyupbit
import pandas as pd
import numpy as np
import requests
#### 최근 5분 데이터 구하기 하지만 1주일치 임.
class Scrapper:
def __init__(self, ticker):
self.ticker = ticker
def get_his_1m(self):
df = pyupbit.get_ohlcv(self.ticker, interval="minute1", count=700)
df = df.reset_index()
# df = df.rename(columns={0:'date',1:"start", 2:"high", 3:"low",4:"close",5:"volume"}, inplace=True)
df.insert(0, 'time', 0)
df.insert(2, 'start', df['open'])
df = df.drop(['value', 'open'], axis=1)
df.rename(columns={'index':'date'}, inplace=True)
df["time"] = df["date"].apply(lambda x:time.mktime(time.strptime(str(x), '%Y-%m-%d %H:%M:%S')))
df.time=df.time.astype("int")
df.date=df.date.astype("string")
df.start=df.start.astype("float")
df.close=df.close.astype("float")
df.high=df.high.astype("float")
df.low=df.low.astype("float")
df.volume=df.volume.astype("float")
return df
# def get_his_3m(self):
# url = 'https://api.upbit.com/v1/candles/minutes/3'
# params = {
# 'market': 'KRW-ETC',
# 'count': 200
# }
# headers = {
# 'accept': 'application/json'
# }
# response = requests.get(url, headers=headers, params=params)
# if response.status_code == 200:
# data = response.json()
# # JSON 데이터를 데이터프레임으로 변환
# df = pd.DataFrame(data)
# # 필요한 데이터 처리
# df['time'] = df['candle_date_time_kst'].apply(lambda x: time.mktime(time.strptime(x, '%Y-%m-%dT%H:%M:%S')))
# df.time = df.time.astype("int")
# df.rename(columns={
# 'candle_date_time_kst': 'date',
# 'opening_price': 'open',
# 'trade_price': 'close',
# 'high_price': 'high',
# 'low_price': 'low',
# 'candle_acc_trade_volume': 'volume'
# }, inplace=True)
# df = df[['time', 'date', 'open', 'high', 'low', 'close', 'volume']]
# # time을 기준으로 오름차순 정렬
# df = df.sort_values(by='time', ascending=True).reset_index(drop=True)
# # print(df)
# return df
# else:
# print(f"Error: {response.status_code}")
# return None
def get_his_3m(self):
df = pyupbit.get_ohlcv(self.ticker, interval="minute3", count=500)
df = df.reset_index()
df.insert(0, 'time', 0)
df.rename(columns={'index':'date'}, inplace=True)
df["time"] = df["date"].apply(lambda x:time.mktime(time.strptime(str(x), '%Y-%m-%d %H:%M:%S')))
df.time=df.time.astype("int")
df.date=df.date.astype("string")
df.open=df.open.astype("float")
df.close=df.close.astype("float")
df.high=df.high.astype("float")
df.low=df.low.astype("float")
df.volume=df.volume.astype("float")
return df
def get_his_5m(self):
df = pyupbit.get_ohlcv(self.ticker, interval="minute5", count=200)
df = df.reset_index()
# df = df.rename(columns={0:'date',1:"start", 2:"high", 3:"low",4:"close",5:"volume"}, inplace=True)
df.insert(0, 'time', 0)
df.insert(2, 'start', df['open'])
df = df.drop(['value', 'open'], axis=1)
df.rename(columns={'index':'date'}, inplace=True)
df["time"] = df["date"].apply(lambda x:time.mktime(time.strptime(str(x), '%Y-%m-%d %H:%M:%S')))
df.time=df.time.astype("int")
df.date=df.date.astype("string")
df.start=df.start.astype("float")
df.close=df.close.astype("float")
df.high=df.high.astype("float")
df.low=df.low.astype("float")
df.volume=df.volume.astype("float")
return df
def get_data(self):
return self.get_his_3m()
def get_his_30m(ticker:str):
df = pyupbit.get_ohlcv(ticker, interval="minute30", count=700)
df = df.reset_index()
df.insert(0, 'time', 0)
df.rename(columns={'index':'date'}, inplace=True)
df["time"] = df["date"].apply(lambda x:time.mktime(time.strptime(str(x), '%Y-%m-%d %H:%M:%S')))
df.time=df.time.astype("int")
df.date=df.date.astype("string")
df.open=df.open.astype("float")
df.close=df.close.astype("float")
df.high=df.high.astype("float")
df.low=df.low.astype("float")
df.volume=df.volume.astype("float")
return df