[코인]나만의 차트 및 데이터 추출방법 (MA) (3)

2025. 1. 6. 15:45코인이야기/PYTHON

 

글 2-5 링크

 

[코인]나만의 차트 및 추출방법_20250105 (2)

업비트 API를 활용해 코인 데이터를 추출하고 분석하는 방법을 소개합니다. 아래 단계별 가이드를 통해 필요한 데이터를 효율적으로 수집하고, 이를 활용해 투자에 도움이 되는 분석 환경을 구

pi000.tistory.com

 

에서 저장된 내용을 추출하여 기본데이터를 만들어 보려한다.

1. 데이터 추출 기본 설정

기본적으로 4시간 기준으로 500 ~ 1000개의 데이터를 불러와서 저장합니다. 데이터 추출 시 MA(Moving Average, 이동 평균)와 같은 주요 지표를 제외한 SRSI, RSI, CCI, MACD, TSI, SMI 등의 지표는 모두 현재 기준으로 100라인 이상의 데이터를 가져와야만 추출이 가능합니다.

 

2. 데이터 추출 및 저장 방법

저는 아래와 같이 2025년 1월 6일 13시 기준의 4시간 데이터를 추출하여 저장했습니다.

 

3. 이동 평균(MA) 추출

MA는 투자 분석에 중요한 지표입니다. 다양한 MA 값을 추출하여 분석할 수 있습니다. 예를 들어, MA1, MA2, MA3, MA4, MA5, MA8, MA10 등의 다양한 MA 값들이 있습니다.

데이터 추출을 위한 코드 예시:

    def getTickerInfo_N1(self, ticker):
        try:
            connection = MysqlStockManagerChangeDBMaster(self.strIP, self.strDB)
            cursor = connection.cursor()
            sql = (f"SELECT idx, date FROM `{self.strTable}_{ticker}_{self.ADF}` "
                   f"WHERE flag = '{self.flag}' "
                   f"ORDER BY date DESC "
                   f"LIMIT 500")
            print(sql)
            cursor.execute(sql)
            rows = cursor.fetchall()
            CurrentDateTime = self.DATETIMEUTIL.getCurrentDateBunCho()

            for rs in rows:

                idx = rs[0]
                strDate = rs[1]
                self.getTickerInfo_N2(idx, ticker, strDate)



        except Exception as e:
            print(f" ___________ ERROR getTickerInfo ______________{e} ")
        finally:
            if cursor:
                cursor.close()
            if connection:
                connection.close()

500개의 데이터를 가져와서 해당 데이터를 아래의 기준으로 추출한다. 

    def getTickerInfo_N2(self, idx, ticker, strDate):
        try:
            connection = MysqlStockManagerChangeDBMaster(self.strIP, self.strDB)
            cursor = connection.cursor()
            sql = (f"SELECT * FROM "
                   f"(SELECT `date` AS date, `open` AS open, `high` AS high, "
                   f"low` AS low, `close` AS close "
                   f"FROM `{self.strTable}_{ticker}_{self.ADF}` "
                   f"WHERE date <= '{strDate}' "
                   f"AND flag = '{self.flag}' "
                   f"ORDER BY date DESC LIMIT 200 ) AS T1 "
                   f"ORDER BY T1.date ASC")
            print(sql)
            df = pd.read_sql_query(sql, connection)
            time.sleep(0.05)
            self.getDataFrameConverter(idx, ticker, strDate, df)

        except Exception as e:
            print(f" ___________ ERROR getTickerInfo ______________{e} ")

        finally:
            if cursor:
                cursor.close()
            if connection:
                connection.close()

위 코드에서 getTickerInfo_N1 함수는 특정 티커(ticker)의 500개 데이터를 가져옵니다. 이 데이터를 활용해 이후 getTickerInfo_N2 함수로 더 많은 데이터를 불러오고, 필요한 분석을 수행합니다.

데이터 처리 및 MA 값 계산 예시:

from finta import TA
    def getDataFrameConverter(self, idx, ticker, strDate, df):
        try:
            self.df = df

            ar_MA = []
            MAValue_1 = TA.SMA(self.df, 1)
            MAValue_2 = TA.SMA(self.df, 2)
            MAValue_3 = TA.SMA(self.df, 3)
            MAValue_4 = TA.SMA(self.df, 4)
            MAValue_5 = TA.SMA(self.df, 5)
            MAValue_6 = TA.SMA(self.df, 6)
            MAValue_7 = TA.SMA(self.df, 7)
            MAValue_8 = TA.SMA(self.df, 8)
            MAValue_9 = TA.SMA(self.df, 9)
            MAValue_10 = TA.SMA(self.df, 10)
            MAValue_12 = TA.SMA(self.df, 12)
            MAValue_15 = TA.SMA(self.df, 15)
            MAValue_18 = TA.SMA(self.df, 18)
            MAValue_20 = TA.SMA(self.df, 20)
            MAValue_25 = TA.SMA(self.df, 25)
            MAValue_30 = TA.SMA(self.df, 30)
            MAValue_35 = TA.SMA(self.df, 35)
            MAValue_40 = TA.SMA(self.df, 40)
            MAValue_45 = TA.SMA(self.df, 45)
            MAValue_50 = TA.SMA(self.df, 50)


            MA_1 = MAValue_1.iloc[-1]
            MA_2 = MAValue_2.iloc[-1]
            MA_3 = MAValue_3.iloc[-1]
            MA_4 = MAValue_4.iloc[-1]
            MA_5 = MAValue_5.iloc[-1]
            MA_6 = MAValue_6.iloc[-1]
            MA_7 = MAValue_7.iloc[-1]
            MA_8 = MAValue_8.iloc[-1]
            MA_9 = MAValue_9.iloc[-1]
            MA_10 = MAValue_10.iloc[-1]
            MA_12 = MAValue_12.iloc[-1]
            MA_15 = MAValue_15.iloc[-1]
            MA_18 = MAValue_18.iloc[-1]
            MA_20 = MAValue_20.iloc[-1]
            MA_25 = MAValue_25.iloc[-1]
            MA_30 = MAValue_30.iloc[-1]
            MA_35 = MAValue_35.iloc[-1]
            MA_40 = MAValue_40.iloc[-1]
            MA_45 = MAValue_45.iloc[-1]
            MA_50 = MAValue_50.iloc[-1]

            time.sleep(0.2)
        except Exception as e:
            print(f" _____ getDataFrameConverter _____ {ticker} _____ {e}")
        finally:
            pass

 

finta에 있는 라이블러리 함수를 사용하였다. 

 

MA에 해당하는 모든 내용을 필요한 만큼 추출하였다. 해당 내용을 데이터베이스에 저장한다. 

 

반응형