파이썬 바이낸스 비트코인 투자 백테스팅 : 이동평균선 매매 기법

파이썬 바이낸스 비트코인 투자 백테스팅 : 이동평균선 매매 기법

이동평균선을 이용하여 바이낸스 비트코인 투자 연습을 해보겠습니다. 파이썬 바이낸스 API로 비트코인 캔들 데이터를 가져온 후, 파이썬 판다스로 이동평균선 매매 기법을 백테스팅 해 보는 것이 이 포스팅의 목적입니다.


글의 순서

백테스팅 (back testing)
이동평균선 (moving average line)
이동평균선 매매 전략 : 골든 크로스, 데드 크로스
이동평균선 교차 지점 확인 과정
이동평균선 매매 전략 백테스팅 과정 : 바이낸스 비트코인 시계열 데이터
파이썬 코드 : 바이낸스 API, 판다스로 이동평균선 매매 전략 백테스팅


백테스팅 (back testing)

실감나는 비트코인 시계열 데이터로 파이썬 프로그래밍을 익히는 중입니다. 백테스팅은 과거의 가격정보(시계열 데이터)로 투자 알고리즘을 검증하는 과정을 말합니다. 과거의 시계열 데이터를 사용하므로 back을, 검증한다는 의미로 testing 이라는 용어를 사용합니다. 물론 과거의 데이터이기 때문에 한계가 있습니다.

혹시 좋은 매매 기법에 대한 아이디어가 떠올랐다면, 파이썬 바이낸스 API와 같은 API로 시계열 데이터를 받아온 후 파이썬 코딩으로 그 매매 아이디어를 확인해 볼 수 있습니다. 더 엄밀하게 말하자면, 나만의 투자기법 또는 매매 기법이 떠올랐다면, 또는 시장에서 널리 사용되고 있는 투자 기법을 적용하려면, 실전 투자에 쓰기 전 백테스팅부터 해봐야 합니다.

아래에 링크한 지난 두 번의 포스팅에서 변동성 돌파전략을 파이썬 코딩으로 구현한 바 있습니다. 이번에는 이동평균선 매매 기법을 적용했을 때 어떤 효과가 있을지 확인해 보겠습니다.

바이낸스 비트코인 투자 백테스팅. 파이썬 코인 투자 연습,
바이낸스 비트코인 변동성 돌파전략 백테스팅 결과



이동평균선 (moving average line)

이동평균선은 종가를 기준으로 계산하며, 짧은 시간 동안에 발생한 극심한 가격 변동을 보다 긴 시간에서의 변화로 바꿔주는 역할을 하기때문에 추세를 확인할 수 있습니다. 이동평균선은 일정기간의 주가를 합한 후 해당 기간으로 나눠서 구합니다. 예를 들어, 5일 이동평균선은 과거 5일 동안의 주가를 평균내서 표시하는 방법입니다.


이동평균선 매매 전략 : 골든 크로스, 데드 크로스

주가 이동평균선의 골든크로스와 데드크로스는 매수 시점과 매도 시점을 결정할 때 주로 사용되는 기술적 분석 지표입니다. 여기서, 골든크로스(golden cross)는 단기 이동평균선이 장기이동평균선을 아래에서 위로 상향 돌파할 때 생기는 교차점입니다. 반면, 데드크로스(dead cross)는 단기 이동평균선이 장기 이동평균선을 위에서 아래로 하향 돌파할 때 생기는 교차점입니다.

그렇다면 이 교차점은 왜 중요할까요?
이동평균선으로 추세를 확인할 수 있다고 말씀드렸는데요. 골든크로스가 발생했다는 것은 최근의 가격 흐름이, 그러니까 단기추세가 강세로 접어들었다는 것을 의미합니다. 데드크로스는 반대의 경우를 나타냅니다.

골든크로스와 데드크로스를 찾아낼 때, 일반적으로 단기 이동평균선으로는 5일선(5일 이동평균선), 장기 이동평균선으로 20일선을 사용합니다. 때로는 20일선과 60일선을 사용하기도 합니다.


이동평균선 교차 지점 확인 과정

(1) 5일선이 20일선 위에 있는가?

넘파이의 where 함수를 사용하여 위에 있을 경우 1을 아래에 있을 경우를 0이라는 값 설정한 후 이 값을 cross라는 열에 저장합니다. cross 값이 0이면 5일선이 20일선 아래에 있는 것이고, 1이면 위에 있는 것입니다.

(2) 5일선과 20일선이 교차하는가?

cross라는 열이 0, 1이라는 값으로 섞여있다면, 5일선과 20일선이 교차한다는 것을 의미합니다.

(3) 5일선이 20일선 아래에 있다가 위로 올라가며 교차하는가?

이동평균선을 매수 신호로 보는 것은, 단기 이동평균선이 장기 이동평균선 아래에 있다가 위로 올라갈 때입니다. cross 열에서의 값이 0이었다가 1로 바뀌면 그때가 매수할 때입니다.

(4) 5일선이 20일선 아래에 있다가 위로 올라가는지, 위에 있다가 아래로 내려오는지 확인

cross 값의 각 행을 비교하는 판다스의 diff() 함수를 사용하면, 단기, 장기 이동평균선의 움직임을 알 수 있습니다. 만약 판다스 데이터프레임의 cross 열 값이 4행의 0에서 5행의 1로 바뀌었다고 가정하면, diff() 값은 ‘5행-4행’의 값인 1 – 0 = 1이 됩니다. 거꾸로 cross 값이 1이었다가 0으로 바뀌면 그때 diff() 값은 -1이 됩니다.

(5) 매수, 매도 지점 표시

판다스 데이터프레임에서 cross 열 옆에 diff() 함수를 이용해서 만든 time_cross 열을 추가합니다. time_cross 열의 값이 1이면 매수, -1이면 매도를 의미합니다.


이동평균선 매매 전략 백테스팅 과정 : 바이낸스 비트코인 시계열 데이터

백테스팅은 과거의 데이터를 바탕으로 특정 알고리즘의 유효성을 판단하거나, 거래 전략을 수립하는데 가장 유용하게 쓸 수 있는 방법입니다. 지금부터는 파이썬 바이낸스 API로 추출한 3개월(2022년 12월 ~ 2023년 2월) 동안의 비트코인 시계열 데이터로 수행한 백테스팅 과정을 정리해 보겠습니다.

(1) 파이썬 바이낸스 API로 비트코인 시계열 데이터 가져오기

파이썬 바이낸스 API의 get_historical_klines() 함수로 코인 가격을 시계열 데이터로 쉽게 가져올 수 있습니다. 이 함수의 출력값은 ohlcv라는 캔들 데이터 형태입니다. 여기서, o는 시작가(open), h는 최고가(high), l은 최저가(low), c는 종료가(close), 그리고 v는 총 거래량(volume)을 의미합니다. 시작가를 시가, 최고가를 고가, 최저가를 저가, 종료가를 종가라고도 부릅니다.

(2) 이동평균선 구하기

이 포스팅에서는 단기 이동평균선으로는 5일선(5일 이동평균선), 장기 이동평균선으로 20일선을 사용합니다.

(3) 이동평균선 교차 지점 탐색

이동평균선이 교차하는 지점이 있는지 확인하고, 매수 또는 매도할 위치를 찾아냅니다. 여기서는 이동평균선의 교차가 발생한 날의 종료가로 매수 또는 매도 했다고 가정하였습니다.

(4) 이익 계산 : 이익(profit) = 매도가 – 매수가

매도 가격에서 매수 가격을 빼면 전체 구간에서의 이익이 됩니다. 2022년 12월 부터 2023년 2월까지의 구간에서는 매수에 해당하는 이동평균선 교차가 2회, 매도에 해당하는 이동평균선 교차가 2회 발생했습니다. 이 글 맨 위 썸네일의 그림에서 확인할 수 있듯, 첫 번째 사고, 팔았던 구간에서는 큰 이익이 있었지만, 두 번째 구간에서는 손실이 발생하였습니다. 전체 3개월 동안의 이익은 4702.75 USDT 이었습니다.

※ 참고로, 이 포스팅에서는 거래 수수료를 0으로 가정하고 계산하였습니다.


파이썬 코드 : 바이낸스 API, 판다스로 이동평균선 매매 전략 백 테스팅

지금까지의 과정을 ‘판다스 이동평균선 매매 전략 백 테스팅’ 파이썬 코드에 나타내었습니다. 앞에서 설명한 이동평균선 교차 지점 확인 과정이 이 코드의 핵심부분이라고 할 수 있습니다. 코드의 #01, #02, … #11) 부분을 유심히 봐 주시기 바랍니다. 시계열 데이터와 매수, 매도 지점을 표시한 차트는 C:/_python/pandas/backtesting/ 라는 폴더에 sma.png 라는 이름의 그림파일로 저장되어 있습니다.


마치며 …

이번 포스팅에서도 판다스 데이터프레임을 바이낸스 비트코인 투자 연습으로 익혀보았습니다. 파이썬 바이낸스 API로 비트코인 시계열 데이터를 가지고 온 후, 파이썬 판다스로 이동평균선 매매 전략을 백 테스팅 하였습니다. 데이터 분석에 유용하게 쓸 수 있는 판다스 데이터프레임의 열 계산 방법과 np.where() 함수, diff() 함수, count() 함수에 익숙해지셨길 바랍니다.

 

 

함께 참고하면 더 좋은 글 :
1. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
2. 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
3. 바이낸스 API 보안을 위한 환경 변수 설정 : 윈도우 10
4. 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
5. 파이썬 바이낸스 API로 차트 분석 : 판다스 이동평균선
6. 파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
7. API와 파이썬 데이터 분석
8. 시계열 데이터 전처리 결과 확인 : pandas DataFrame
9. 바이낸스 비트코인 투자 백테스팅. 파이썬 코인 투자 연습
10. 파이썬 프로그래밍 시작


참고자료

[1] python-binance Docs >> get_historical_klines
[2] 김황후(2020), 파이썬 증권 데이터 분석, 한빛미디어
쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Leave a Comment