이전 글: 비트코인 자동매매 준비하기
1. 차트 불러오기 전
자동 매매 과정을 글로 표현하면 아래와 같다.
- 시장 분석을 한다.
- 매수 / 매도 목표 가격을 정한다.
- 현재가를 확인한다.
- 매수 목표 이하의 가격일 경우 구매한다.
- 현재가를 확인한다.
- 매도 목표 이상의 가격일 경우 판매한다.
문제는 어떤 지표를 기준으로 분석을 할 것이며, 매수와 매도 가격을 어떤 방식으로 정할 것인가 이다.
이에 대해서는 이동평균 교차 분석, 변동성 돌파 전략, RSI(상대강도 지수)를 활용한 매매 등 다양한 전략이 존재한다.
위 전략들은 본래 주식 투자를 위한 전략이고, 주식은 기업이라는 실체에 대한 기대가 존재한다.
하지만 내 생각에는 코인에는 기대를 받을 만한 실체가 없고, 심리에 의해 사고 판다고 생각해서 지표들을 가지고
머신러닝 모델 중 하나인 다중 회귀분석 결과를 기준으로 매매를 진행하보려고 한다.
2. 분석을 위한 코인 가격 이력 불러오기
과거, 투자한 코인 가격이 하락했을 때 투자한 원금으로 복구되지 않으면 절대 팔지 않겠다고 한 코인이 하나 있었는데
몇 년이 지난 지금도 원래 가격으로 돌아오지 않은 경험이 있다.
그래서 투자를 진행한 당일, 목표 가격에 도달하지 못하면 익일 9시에 처분하는 단기 투자 형식으로 기획했다.
투자 지표 선정은 아래와 같이 선정했다.
- 이동 평균 금액(5일, 20일)
- 최근 7일간의 거래량
- 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)를 설정한 후 공식에 따른다.
다음으로 이 데이터를 기준으로 머신러닝을 진행하고, 특정 일자의 저가와 고가를 예측해 보자.
다음 글 : 머신러닝으로 코인 가격 예측하기
'Backend > Python' 카테고리의 다른 글
[Python] 비트코인 자동매매 - 종목 선정 (0) | 2024.05.09 |
---|---|
[Python] 비트코인 자동매매 - 머신러닝 (0) | 2024.05.03 |
[Python] 비트코인 자동 매매 - 준비 (0) | 2024.04.13 |
[FastAPI] File Upload 구현하기 (0) | 2024.02.14 |
[FastAPI] MongoDB Error - Type Error (1) | 2024.02.06 |