이전 글: 비트코인 자동매매 준비하기

 

1. 차트 불러오기 전

자동 매매 과정을 글로 표현하면 아래와 같다.

  1. 시장 분석을 한다.
  2. 매수 / 매도 목표 가격을 정한다.
  3. 현재가를 확인한다.
  4. 매수 목표 이하의 가격일 경우 구매한다.
  5. 현재가를 확인한다.
  6. 매도 목표 이상의 가격일 경우 판매한다.

문제는 어떤 지표를 기준으로 분석을 할 것이며, 매수와 매도 가격을 어떤 방식으로 정할 것인가 이다.

이에 대해서는 이동평균 교차 분석, 변동성 돌파 전략, RSI(상대강도 지수)를 활용한 매매 등 다양한 전략이 존재한다.

위 전략들은 본래 주식 투자를 위한 전략이고, 주식은 기업이라는 실체에 대한 기대가 존재한다.

하지만 내 생각에는 코인에는 기대를 받을 만한 실체가 없고, 심리에 의해 사고 판다고 생각해서 지표들을 가지고

머신러닝 모델 중 하나인 다중 회귀분석 결과를 기준으로 매매를 진행하보려고 한다.

 

2. 분석을 위한 코인 가격 이력 불러오기

과거, 투자한 코인 가격이 하락했을 때 투자한 원금으로 복구되지 않으면 절대 팔지 않겠다고 한 코인이 하나 있었는데

몇 년이 지난 지금도 원래 가격으로 돌아오지 않은 경험이 있다.

그래서 투자를 진행한 당일, 목표 가격에 도달하지 못하면 익일 9시에 처분하는 단기 투자 형식으로 기획했다.

투자 지표 선정은 아래와 같이 선정했다.

  1. 이동 평균 금액(5일, 20일)
  2. 최근 7일간의 거래량
  3. RSI (14일 기준)

비트 코인 기준으로 최근 180일의 가격 이력과 위의 투자 지표를 구하는 코드는 아래와 같다.

import datetime, pyupbit, pandas

target_date = datetime.datetime.now()
from_date = target_date - datetime.timedelta(days=180)

# 비트코인 이력 불러오기
ma_flow_info = pyupbit.get_ohlcv_from(ticker="KRW-BTC", fromDatetime=from_date, to=target_date)

# 5일, 20일 평균 금액 불러오기
ma_flow_info["ma5"] = ma_flow_info["close"].rolling(window=5, min_periods=5).mean().shift(1)
ma_flow_info["ma20"] = ma_flow_info["close"].rolling(window=20, min_periods=20).mean().shift(1)

# 7일 평균 거래량 불러오기
ma_flow_info["volume7"] = ma_flow_info["volume"].rolling(window=7, min_periods=7).mean().shift(1)

# RSI 구하기
# 종가 기준 차이 값 구하기
diff_info = ma_flow_info["close"].diff()

# RSI 계산 공식
gain = (diff_info.where(diff_info > 0, 0)).rolling(window=14).mean().shift(1)
loss = (-diff_info.where(diff_info < 0, 0)).rolling(window=14).mean().shift(1)
ma_flow_info["rsi"] = 100 - (100 / (1 + (gain / loss)))

 

pyupbit.get_ohlcv_from() 으로 인한 결과 값은 최근 180일의 비트코인 데이터가 된다.

이 데이터는 pandas로 받으며, 특정 기간의 평균 금액을 구하기 위해

종가 (close)를 기준으로 rolling (window - 계산 기간, min_periods - 최소 계산 기간, 미충족시 NaN) 한 후 아래로 한 칸 내린다 (shift)

 

또한, RSI를 구하기 위해 종가 차이를 계산 한 후 구하고 싶은 지수 일자 범위 (window)를 설정한 후 공식에 따른다.

계산 결과

 

다음으로 이 데이터를 기준으로 머신러닝을 진행하고, 특정 일자의 저가와 고가를 예측해 보자.

다음 글 : 머신러닝으로 코인 가격 예측하기