본문 바로가기

기록지/비트코인 자동 거래 시스템 만들기

[비트코인 자동 거래 시스템] 새로운 알고리즘을 위한 Data 분석 Class 생성!📈

반응형

1. 개요

 

 군대를 다녀오니 내 서버에서 24시간 돌아가던 비트코인 자동거래 시스템이 망가져 있었다. 인증 Key와 API 요청값 변경등이 이슈였다. 이런 것들을 변경하고 나니 트레이딩 알고리즘을 조금은 변경하고 싶어졌다. 기존에 너무 간단한 알고리즘을 사용하고 있었기에 조금은 강력한 알고리즘을 적용하고 싶었다. 그런 알고리즘들을 확인해보니 기존의 비트코인에 대한 거래값들이 매우 중요하다는 것을 알게 되었다.

 

 필자가 사용하는 Korbit API에서는 과거의 값들을 제공해주는 API가 없기 때문에 매일 분마다 Korbit에서 제공하는 데이터를 저장해 사용하기로 했다. 몇일동안 계속 서버에 저장한다면 사용할만한 데이터가 나올 것이다. 24시간 서버에서 데이터를 수집할 생각이다.

 

2. 본문

 

 이동평균과 같은 값들은 과거의 데이터를 필요로 한다. 그래서 데이터를 저장하고 이를 메인데이터로 나의 이동평균, 볼린저 밴드 값들을 도출해볼 생각이다. 가장 중요한건 매 분마다 가지고 온 값들을 분석하는 것이다. 첫 시작은 그저 분마다 하나의 '봉'을 가지고 오는 코드를 작성하는 것이었다. '봉'은 '캔들스틱' 이라고도 하는데, 이를 보는 차트를 캔들스틱 차트, 봉 차트 라고 한다. 내가 원하는 알고리즘은 하나의 캔들값을 필요로 하기 때문에 이 캔들 데이터를 전부 저장해야했다. 다행이 요청 시간 기준으로 캔들 한 개를 반환해주는 API는 있었다. 이를 ARC에서 시험해봤다.



 리턴된 값들의 속성명을 보면 뭔 캔들 하나에 저렇게 많은 값이 있는지 싶은데, 다 캔들을 의미하는 데이터이다. 캔들 차트를 잘 설명해준 블로그의 주소를 남긴다.


https://m.blog.naver.com/freeism_7/221866826086

 

주식 캔들차트(봉차트) 보는/읽는 법

안녕하세요? 자본주의가 낳은 개미, 자낳개 김개미입니다^^ 주식은 심리게임입니다. 그리고 주가에서 심리...

blog.naver.com


 반환된 값들을 위 블로그에서 본 캔들 용어와 매칭시키면 다음과 같을 것이다.


고가 - high

종가 - last

시가 - open

저가 - low


 모든 평균은 종가 즉 last 값을 기준으로 작성된다. 따라서 last 값만을 필요로 할 수 있지만, 혹시모를 데이터 분석에 의해 해당 값들을 전부 저장하기로 했다. 코드가 복잡해지는 것도 아니고 MongoDB를 사용했기 때문에 JSON 값을 편하게 다룰 수 있었기 때문이다. 다음은 내가 작성한 DataCollecter Class이다.

 

- data/method_data.py

"""
이동평균 및 볼린저 밴드 구현을 위한 data수집 클래스
"""
from db.mongodb.mongodb_handler import MongoDBHandler
from machine.korbit_machine import KorbitMachine


class DataCollecter:
    def __init__(self):
        self.machine = KorbitMachine()
        self.database = MongoDBHandler("local", "data", "btc_data")
        self.currencyPair = ["btc_krw"]
        self.machine.set_token()

    def getData(self, currency_pair):
        """
        Machine을 이용해 캔들 값 return
        :param currency_pair: 통화쌍 이름 
        :return: 캔들 값
        """
        return self.machine.get_ticker(currency_type=currency_pair)

    def saveData(self):
        """
        candle값을 Database에 저장
        :return: 없음 
        """
        for cp in self.currencyPair:
            result = self.getData(currency_pair=cp)
            result["currencyPair"] = cp
            self.database.insert_item(data=result)

 

 기존에 만들어놓은 Class들을 활용했기 때문에 비교적 코드는 간단하다. 조금 중요한 점은 return되는 JSON 값에는 해당 코인의 이름이 없기때문에, 'currencyPair'속성을 따로 만들어 데이터마다 이름을 지정한 것이다. 다음은 크론탭에 1분동안 실행되도록 설정할 main 코드이다.

 

- data/main_data.py

from data.method_data import DataCollector

dataCollector = DataCollector()
dataCollector.saveData()

 

3. 결어

 

 다음 글에서는 해당 데이터들을 이용하여 데이터를 분석해보는 코드를 작성할 것 이다.

반응형