게시판차트 REINFORCE: 규칙 교사와 KL로 정책망 준비하기예제 소스

예제 소스

차트 REINFORCE: 규칙 교사와 KL로 정책망 준비하기 · 파일 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