3. 비트코인 선물/3-1. 바이비트 선물 연구일지

(비트코인 자동매매API) (4) 1분봉으로 진입을 위한 패턴 만들기

봄이오네 2022. 11. 3. 08:13
반응형
목 차
1. 들어가며
2. 패턴 파악의 중요성
3. 사전준비
4. 코드설명
5. 전체코드 및 결과
6. 마치며

1. 들어가며

지난 글에서는 바이비트API를 통해 비트코인의 현재가를 수신받았다.

현재가를 알아야 되는 이유는 익절/수절을 할 때,

진입가격과 현재가격을 비교하여, 설정한 수익/손실 타점에 도달하면,

청산하기 위해서이다.

 

진입가격을 받는 방법은 향후 설명하기로 하고,

이번 글에서는 1분 전의 데이터를 받아, 패턴화 시키는 방법에 대해 알아보자.


2. 패턴 파악의 중요성

코인에서 패턴을 찾는 것은 상당히 어렵다.

3양봉 후 진입하는 방법도 있을 것이고,

양봉-음봉-양봉 후 진입하는 투자방법도 있다.

 

각 패턴별 수익률 계산을 통해 수익 분봉에 해당하면 

진입할 수 있도록 공부할 필요가 있다.

 

물론, 단순하게 패턴이 반복되지는 않을 것이다.

패턴 투자를 공부하면서 느끼는 것이지만,

100% 수익이 나는 패턴은 없었다.

 

결국 확률에 의존할 수 밖에 없고,

먼저 설정한 익절/손절을 설정하고나서,

실제 운영을 하면서 익절/손절 타점을 수정해줄 수 밖에 없는거 같다.


3. 사전준비

먼저 바이비트API 설명자료를 보자.

설명 경로 : Market Data Endpotins > Query Kline

입력 데이터 : 코인명(symbol), 간격(interval, 분봉/일봉 형태),

                           from(데이터 받는 시점), limit(화면에 출력되는 분봉 갯수)

수신 데이터 : 코인명(symbol), 간격(interval), 시간(open_time)

                           시가(open), 고가(high), 저가(low), 종가(close)

입력 샘플 : 파이썬으로 바이비트API에 요청하는 샘플

수신 샘플 : 바이비트API를 통해 수신받는 데이터 형태

 

< 그림1. 바이비트API에서 1분봉을 받는 경로 및 설명 >


4. 코드설명

<그림2>에서 활용하는 모듈은 3가지이다.

  • 설치가 필요한 pybit 모듈의 query_kline 함수를 활용할 예정이며,
  • 파이참 내장모듈은 time 모듈과 datetime 모듈을 활용한다..

그림2. 1분 전의 1분봉 데이터를 받아와서 패턴화 시킨다.

 

1줄 : 6줄의 바이비트API 접근 및 9줄의 query_kline함수를 활용하기 위해 pybit 모듈을 임포트한다.

2줄 : 8줄의 시간 설정을 위해 time모듈을 임포트한다.

3줄 : UNIX 시간을 GMT시간으로 바꾸어주기 위해 datetime 모듈을 임포트한다.

 

5줄 : 임의의 minute_checks 함수를 선언한다.

6줄 : 바이비트API 접근을 session 변수에 담는다.

 

8줄 : 이 글의 첫번째 핵심이다.

        ① for문의 range는 정수 혹은 리스트 형태, 2가지 형태만 다룬다.

            또한, time()은 UNIX시간으로 나타낸 시간이다.

            다만, 마이크로 초까지 설정되기 때문에 정수화 시킨다. (그림3)

            (for문의 range는 정수/리스트만 받기 때문에 현재시간을 정수화 시킨다)

 

        ② time()-120으로 설정한 사유

             time()은 유닉스 타임으로 마이크로 초까지 값을 받아오는데,

             range는 정수만 받으므로, int를 써서 마이크로 초를 버린다. (대세에 지장없다)

 

             time()-120으로 설정한 부분이 약간 헷갈렸다. (1분전 봉의 설정 시점)

             현재시간이 22:29:53초라면,

              <그림2>에서 확인하였듯이 1분전 봉은 22:28:00초의 봉이다.

               → 현재시간의 1분 전 봉을 확인하는 것이 이 글의 핵심이다.

 

        ③ time()-60으로 설정한 사유

             for~range문의 특성상,

             range(1,3)으로 설정되었다면, "3"은 빼고 1,2 두번만 반복된다.

             (즉, 마지막으로 설정한 숫자는 들어가지 않는다)

           

        ④ range(시작, 끝, 60) : 60초 간격의 자료를 받아오라.

그림3. 현재시간을 나타내는 방법

 

15줄~19줄 : 5가지 자료를 받아온다. (시간, 시가, 고가, 저가, 종가)

20줄 : 이 글의 두번째 핵심이다.

           15줄~19줄에서 받아온 데이터를 연산하여 패턴화 시킨다.

            주의할 것은 받아오는 자료가 문자형이다.

 

             문자형끼리는 사칙연산이 되지 않으므로,

             소수점이 있는 점을 감안한다면,

              float를 붙여서 문자형을 실수화 시킨 후 사칙연산을 하고,

              str을 붙여서 문자형하여 연결(concatenate)시킨다.

 

              ※ 왜 바로 문자형을 실수형으로 바꾼 후 

                  다시 실수형에 str을 붙여서 문자형으로 전환하는 것일까?

                 → (고가-시가)의 사칙연산을 위해 실수형(float)으로 전환하였고,

                       사칙연산된 결과물을 연결하려고 하는데,

                       str을 붙이지 않으면,

                       (고가-시가) + (저가-시가) + (종가-시가)가 합산되어 버린다.

                       결론은 패턴화 시키기 위함이다.

 

22줄~27줄 : 현재시간, 1분 전 시간, 1분전의 시가, 고가, 저가, 종가를 출력한다.

28줄 : 1분전 봉의 OHLC를 패턴화 시켰다.

 

30줄 : 5줄의 minute_checks 함수를 실행하라.


5. 전체코드 및 결과

from pybit.inverse_perpetual import HTTP
from time import time
import datetime as dt

def minute_checks():
    session = HTTP(endpoint="https://api.bybit.com")

    for i in range(int(time()-120), int(time()-60), 60):
        resp = session.query_kline(
            symbol="BTCUSD",
            interval=1,
            limit=3,
            from_time= i
    )
        data = resp['result'][0]['open_time']
        open = resp['result'][0]['open']
        high = resp['result'][0]['high']
        low = resp['result'][0]['low']
        close = resp['result'][0]['close']
        pattern = str(float(high)-float(open)) + str(float(low)-float(open)) + str(float(close)-float(open))

        print(dt.datetime.fromtimestamp(int(time())))
        print(dt.datetime.fromtimestamp(data))
        print("시가 : " + open)
        print("고가 : " + high)
        print("저가 : " + low)
        print("종가 : " + close)
        print(pattern)

minute_checks()


# (expected result)
# 2022-10-29 22:29:53      # 현재시간
# 2022-10-29 22:28:00      # 현재시간의 1분전 시간
# 시가 : 20752.5           # 1분전의 시가
# 고가 : 20752.5           # 1분전의 고가
# 저가 : 20749             # 1분전의 저가
# 종가 : 20749.5           # 1분전의 종가
# 0.0-3.5-3.0              # 1분전의 패턴

6. 마치며

1분 전 봉을 이용하여, 비트코인의 패턴을 출력해 보았다.

 

필자가 생각하는 프로그램은

위 과정대로 산출한 패턴을 이용하여,

 

진입 후 20분 이내 변화율을 알아보고 나서,

수익이 많이 발생하고, 승률이 높은 패턴을 알아보고 나서

진입할 프로그램을 생각하고 있다.

 

참고로 한달 1분봉은 4.3만개 정도이다.

1달 1분봉 갯수 4.3만개 = 60분 x 24시간 x 30일

한달 1분봉이 생각보다 많은데, 제대로 분석할 수 있을지 살짝 걱정이 된다.

반응형