맨위로버튼이미지

1. 들어가기 전에 

현재 인터넷에서 돌고 있는 거의 대부분의 소스를 분석하고 적용하고 실제 거래도 태워 보고 한 경험을 여러분과 공유하고자 이 블로그를 작성하게 되었습니다.

현재 인터넷에서 돌고 있는 대부분의 내용은 현실과 부합하지 않는 것이 많으며 특히 유튜브를 통해서 돌고 있는 내용들을 믿고 자동 매매를 실제 거래로 돌리시는 분들이 있다면 상당히 주의를 요한다는 것을 미리 말씀드리고 싶습니다. 

무엇보다 백테스팅이 중요하며 백테스팅 결과를 어떻게 적용할지와 예측 데이터를 어떻게 활용할지에 중점을 맞추고자 합니다.

 

현재 인터넷상에 있는 소스들의 특징은 대부분(상당히 잘 만든 소스도 분명히 있습니다만) 대학교 졸작으로도 부족한 내용 또는 중, 고등학생 학예회 수준의 소스가 많습니다. 

프로그램에는 분명 라이프사이클이 있습니다.

아무리 잘 짠 프로그램도 예외사항을 맞으면 다시 시작되어야 하고 특히나 자동 매매 프로그램은 여러분들의 소중한 돈을 직접 운영하는 어떻게 보면 세상에서 가장 비싼 프로그램이어야 하기에 프로그램에 꼭 필요한 기능인 로그분석, 매매 기록, 예외 처리, 자동 재시작, 버그 패치 방법 등의 기능이 필요합니다.

이 기능들이 없다면 여러분은 정말 어리석은 모험을 하고 있다고 말씀드리고 싶습니다.

분명히 말씀드리지만 저를 포함 인터넷에서 돌고 있는 어떤 프로그램도 투자손실에 대한 보상을 하지 않으며 모든 행위의 책임은 본인이 지고 있는다는 것을 명심하시기 바랍니다.

 

2. Bithumb 5분 데이터 구하기

사용하시는 브라우저에 https://api.bithumb.com/public/candlestick/BTC_KRW/5m 를 입력하시면 상당한 량의 데이터가 json타입으로 내려 옴을 보실 수 있을 것입니다.

이번회에서는 이 데이터를 수신하여 가공하는 부분까지 하고 다음에 이 데이터를 어떻게 활용할지 보조 지표는 어떻게 적용할 지에 대한 글을 이어 가겠습니다.

참고로 저는 VSCode를 사용해서 개발 중이며 python은 아무 버전이나 3.x 버전이면 상관없습니다.

( 32bit,64bit도 이번 주제에서는 상관이 없습니다.

다만 주식 매매 프로그램 작성 시에는 아직도 대부분의 증권사 API가 32bit 윈도우를 지원하고 있어서 향후에는 32bit python을 설치하셔야 할 것입니다.

32bit python의 경우 메모리 제약을 가지고 있어 많은 량의 pandas DataFrame을 사용하게 되면 프로그램이 정상 동작하지 않습니다. )

python의 기본지식(pip 사용법, 기본 문법)은 알고 계신 것으로 믿고 시작하겠습니다. 

 

1. MicroSoft의 VSCode는 Visula Studio나 Eclipse나 기타 툴과는 비교가 안될 정도의 메모리나 속도 관리가 좋습니다.

그리고 일반 Text Editor에 비해 프로젝트 프로그램에 필요한 대부분의 기능을 가지고 있습니다. 

VSCode는 프로젝트란 개념이 따로 없고 폴더 단위로 프로그램 단위를 구성합니다.

또한 Python툴로 사용할 경우 해당 폴더 단위로 실행되므로 폴더 이름이 중요합니다.

bitcoin_trade1 또는 적당한 프로젝트 이름으로 디렉토리를 만들고 VSCode-->파일-->폴더 열기로 해당 폴더를 열면 됩니다.

 

2.Bithumb의 API를 이용하여 데이터를 가져 오기 위해서는 http requests lib를 이용하여 데이터를 가져옵니다.

아시다시피 Bitcoin의 거래는 365일 24시간 이루어지고 있으며 우리나라가 전 세계 평균보다 약간 비싼 편입니다.

사실 우리가 하려는 목표와 이런 내용은 크게 의미가 없지만 Bitcoin의 거래가 365일 24시간 이루어진다는 것은 우리가 작성하려는 프로그램에는 아주 좋은 일입니다. (보조 지표 테스트에 아주 좋은 조건입니다.)

 

3. 아래 데이터에는 시간(timestamp * 1000), 시작가, 종가, 고가, 저가, 거래량을 제공 하고 있습니다.

주식에서는 의미 있는 이 값들이 사실상 Bitcoin의 경우 거의 의미가 없습니다.

그래서 시작가, 고가, 저가를 버리고 종가와 거래량만을 사용하여 추가적인 보조 지표를 다음 회차에서는 다루고자 합니다. 

 

4. 데이터는 Pandas DataFrame을 사용하여 저장되고 리턴 될 것입니다.

DataFrame의 마치 RDBMS처럼 동작하기도 하고 NoSQL DB처럼 동작하기도 합니다.

요령을 익힌다면 상당히 유용하지만 잘못 사용하면 데이터가 중복되거나 유실될 수도 있습니다.

그런 경우 보조 지표에는 아주 치명적일 수 있습니다. 

 

5. 모든 소스는 적당한 크기의 클래스 형태 또는 모듈 단위로 작성될 것입니다.

나중에는 이런 모듈들이 모여 적당한 lib가 갖쳐지게 되면  특정 디렉토리에 담고 import 절에서 [디렉토리명.모듈명]의 형식으로 호출하여 사용할 수 있습니다. 

 

소스 내용(getBithumbData.py)

import time
import requests as rq
import pandas as pd
 
#### 최근 5분 데이터 구하기 하지만 1주일치 임.
class ScrapCurrBithum:
    def get_his_5m(self):
        data=rq.get('https://api.bithumb.com/public/candlestick/BTC_KRW/5m')
        data=data.json()
        data=data.get("data")
        df=pd.DataFrame(data)
        df.rename(columns=0:'time',1:"start", 2:"close", 3:"high",4:"low",5:"volume"}, inplace=True)
        df=df.drop(['start', 'high', 'low'], axis=1)
        df.close=df.close.astype("float")
        df.volume=df.volume.astype("float")
        df["date"]=df["time"].apply(lambda x:time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(x/1000)))
        return df
 
    def get_data(self):
        return self.get_his_5m()

 

3. 마치며

이번 회차에서는 Bithumb의 5분 데이터를 받아서 DataFrame으로 저장하는 소스를 작성했습니다. 이 소스는 main함수가 없으므로 단독 실행이 되지 않습니다. 아래 소스를 같은 폴더안에 작성하여 실행하면 수집된 데이터를 확인할 수 있습니다.

 

소스 내용(main.py)

from getBithumbData import ScrapCurrBithum

if __name__ == '__main__':
    scb = ScrapCurrBithum()
    df = scb.get_data()
    print(df)
반응형
LIST

+ Recent posts