삶의 공유
[파이썬] 비트코인 자동매매 전략 Study(가격, 거래량 기반 전략)-전략수립 본문
안녕하세요 ~
이번 시간에도 앞에서 다룬 비트코인 자동매매 전략 Study 편을 이어서 진행해보겠습니다.
먼저 앞에서 다룬 데이터를 불러와보겠습니다. 이 데이터로 수익률의 히스토그램 그래프와 수익률과 거래량과의 관계를 산점도를 이용해서 알아보았는데요! 이전 내용이 헷갈리시다면 하기 링크로 확인 하고 오시면 되실 것 같습니다.
데이터를 수익률과 거래량에 따라 정렬 및 10개의 동일한 크기로 나누기
이렇게 하는 이유는 어느 그룹에서 가장 많은 수익률이 나는지를 확인하고 그 그룹에 매수 신호를 적용하기 위함으로 보시면 되실 것 같습니다.
코드는 다음 과 같이 간단한 코드로 나눌 수 있습니다.
pd.qcut(data.returns, q=10)
이렇게 하면 아래와 같이 수익률 구간 별로 10개의 그룹으로 나뉘어진 것을 보실 수 있습니다 (Categories 부분입니다)
이렇게 나뉘어진 그룹을 라벨화 해서 별도 컬럼으로 붙여 넣어 보겠습니다.
# 10개로 나눠진 그룹을 라벨화 하기
data["ret_cat"] = pd.qcut(data.returns, q=10, labels=[-5,-4,-3,-2,-1,1,2,3,4,5])
그럼 아래와 같이 각각의 데이터들의 위에 구분 지은 카테고리에 따라서 나뉘어지게 된것을 볼 수 있습니다.
각각 그룹에 속하는 개수들을 확인 해 보겠습니다.
# 각 그룹에 속하는 개수
data.ret_cat.value_counts()
잘 나위어진 것을 볼 수 있습니다.
그럼 이번에는 거래량에 대해서도 동일하게 적용해보겠습니다.
# 거래량 변화에도 같은 방식 적용
data["vol_cat"] = pd.qcut(data.vol_ch, q=10, labels=[-5,-4,-3,-2,-1,1,2,3,4,5])
수익률과 거래량의 카테고리별 속한 데이터들을 Matrix형태로 만들어 분포도 확인 하기
이렇게 하는 이유는 수익률과 거래량의 구간별의 관계를 시각화 하여 해당 구간에 매수 신호를 만들어 전략을 짜고 그 전략이 잘 먹히는지 시뮬레이션 하기 위함입니다.
코드는 다음과 같습니다.
matrix = pd.crosstab(data.vol_cat, data.ret_cat)
matrix # 각안의 개수는 그룹에 속하는 개수
이 데이터를 seaborn함수를 이용하여 시각화 함으로써 좀 더 직관적으로 판단 할 수 있도록 해보겠습니다.
import seaborn as sns
plt.figure(figsize=(12, 8))
sns.set(font_scale=1)
sns.heatmap(matrix, cmap="RdYlBu_r", annot = True, robust = True, fmt=".0f")
plt.show()
해당 데이터를 보면 어떤 정보를 얻을 수 있으신거 같으신가요 ?
거래량이 많을때 수익률의 변화도 많다는 정보를 시각화를 통해 보다 직관적으로 볼 수 있다는것을 아실 수 있으실 것입니다
자 여기서 좀 더 나아가서 카테고리별 수익률의 중간값에 대해서 추가로 확인해보겠습니다. 위의 데이터에 수익률의 관계를 추가로 확인하기 위함입니다.
matrix = pd.crosstab(data.vol_cat.shift(), data.ret_cat.shift(), values=data.returns, aggfunc=np.mean)
matrix
자 이것을 다시 시각화 해보겠습니다.
plt.figure(figsize=(12, 8))
sns.set(font_scale=1)
sns.heatmap(matrix, cmap="RdYlBu", annot = True, robust = True, fmt=".5f")
plt.show()
여기서 확인 할 수 있는 정보는 다음과 같습니다
1. 수익률이 -5 카테고리 구간이고, 거래량도 -5 카테고리 구간에서 가장 큰 수익률을 가져온다는 것을 볼 수 있습니다. (가격 상승 신호)
2. 수익률 5 카테구리 구간이고 거래량이 -5 카테고리 구간에서 가장 큰 손실율을 가져 온다는 것을 볼 수 있습니다 (가격 하락 신호)
자 다 됐습니다 위의 2가지가 매수, 매도 신호 전략을 코드로 구현해보겠습니다.
매매 전략 수립
이 전략은 Long Only Price/Volume Trading Strategy라고도 하는데, 극단적으로 높은 수익률과, 거래량 변화를 매수 시그널로 사용 하는 것 입니다.
자 이제 거래 포지션에 대한 컬럼을 설정 합니다.
# 거래 포지션
data["position"] = 1
data
이제 조건을 설정합니다
- 수익률이 상위 10% 이면서 거래량도 하위 10%인 신호로 매도 신호로 잡겠습니다.
return_thresh = np.percentile(data.returns.dropna(), 90) # 90번째 백분위수
# 10% 수익률이 return_thresh 값 보다 크다는 것을 의미
cond1 = data.returns >= return_thresh
volume_thresh = np.percentile(data.vol_ch.dropna(), 10) #10번쨰 분위수
# 하위 10% 거래량 변화가 volume_thresh값 보다 크다는 것을 의미
cond2 = data.vol_ch < volume_thresh
각각 조건들을 통해서 둘다 "cond1" & "cond2" 조건이 모두 true 일 경우 position의 0을 넣어 매도 시그널을 넣겠습니다. 그럼 나머지 1은 매수 신호라고 봐도 되겠지요 !
data.loc[cond1 & cond2, "position"] = 0
data.position.value_counts()
자 이것을 그래프화 해보겠습니다.
data.loc[:,"position"].plot(figsize=(12,8))
plt.show()
이렇게 해서 데이터 분석을 기반으로 매매 전략을 짜보았습니다. 다음 포스팅에서는 해당 전략을 기반으로 백테스팅을 해보는 시간을 가져보겠습니다.
읽어주셔서 감사합니다.
'Data Scientist > Python' 카테고리의 다른 글
[파이썬] pandas datareader 라이브러리를 이용한 데이터 로딩 및 시각화 (0) | 2022.05.16 |
---|---|
[파이썬] 비트코인 자동매매 전략 Study(가격, 거래량 기반 전략)-백테스팅 (2) | 2022.04.25 |
자동매매 개발 관련 로그 수익률 사용 이유 (0) | 2022.04.12 |
[파이썬] 비트코인 자동매매 전략 Study(가격, 거래량 기반 전략)-데이터준비 (0) | 2022.04.03 |
[Python] Pyupbit get_ohlcv 함수 알아보기 (0) | 2022.03.13 |