파이썬 바이낸스 비트코인 투자 백테스팅 : 볼린저 밴드 추세 추종 매매 기법

파이썬 바이낸스 비트코인 투자 백테스팅 : 볼린저 밴드 추세 추종 매매 기법

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


글의 순서

백 테스팅 (back testing)
볼린저 밴드 (Bollinger Band)
볼린저 밴드를 이용한 매매 기법
볼린저 밴드를 이용한 추세 추종 매매 전략
%b 와 MFI로부터 매수, 매도 시점 확인 과정
%b 와 MFI로부터 매수, 매도 시점 확인 과정
파이썬 코드 : 바이낸스 API, 판다스로 추세 추종 매매 전략 백 테스팅


백 테스팅 (back testing)

실감나는 비트코인 시계열 데이터로 파이썬 프로그래밍을 익히는 중입니다. 백테스팅은 과거의 가격정보(시계열 데이터)로 투자 알고리즘을 검증하는 과정을 말합니다. 나만의 투자기법 또는 매매 기법이 떠올랐다면, 또는 시장에서 널리 사용되고 있는 투자 기법을 적용하려면, 실전 투자에 쓰기 전 백테스팅부터 해봐야 합니다. 아래에 링크한 지난 세 번의 포스팅에서 변동성 돌파전략과 이동평균선 매매 기법을 파이썬 코딩으로 구현한 바 있습니다. 이번 포스팅에서는 볼린저 밴드 매매 기법을 적용했을 때 어떤 효과가 있을지 확인해 보겠습니다.

바이낸스 비트코인 투자 백 테스팅. 파이썬 코인 투자 연습,
바이낸스 비트코인 변동성 돌파전략 백 테스팅 결과
파이썬 바이낸스 비트코인 투자 백테스팅 : 이동평균선 매매 기법



볼린저 밴드 (Bollinger Band)

볼린저 밴드는 주가의 변동이 표준 정규분포를 따른다는 가정에서 출발한 것입니다. 볼린저 밴드는 시계열 가격 그래프에서 위, 아래에 밴드를 표시해서 현재 가격이 상대적으로 높은지 낮은지를 알려줍니다.

볼린저밴드는 3개의 선으로 구성됩니다. 주식 가격을 예로 들어보자면, 중앙에 있는 선이 주가의 20일 이동평균선이고, 상단에 있는 선이 20일 표준편차를 1배 또는 2배해서 더한 선, 하단에 있는 선이 20일 표준편차를 1배 또는 2배해서 뺀 선입니다.

상단 선과 하단 선을 상단밴드, 하단밴드라고 부릅니다. 현재의 주가가 상단 밴드 근처에 있을수록 상대적인 고점을, 하단 밴드 근처에 있을수록 상대적인 저점을 나타냅니다


볼린저 밴드를 이용한 매매 기법

볼린저 밴드를 개발한 존 볼린저는 아래의 3가지 매매 기법을 제시하였습니다.
▶변동성 돌파
▶추세 추종
▶반전

이들 방법 중 자신의 투자 환경에 가장 잘 맞는 것을 고르는 것이 중요합니다. 이번 포스팅에서는 이들 중 추세 추종 기법을 적용해보겠습니다.


볼린저 밴드를 이용한 추세 추종 매매 전략

볼린저 밴드 추세 추종(Trend following) 기법은 상승 추세에 매수하고 하락 추세에 매도하는 기법입니다. 볼린저 밴드와 현금흐름지수(MFI, Money Flow Index)를 함께 보면서 아래와 같이 매매합니다. 여기서 볼린저 밴드를 볼 때는 현재 가격이 밴드의 어느 위치에 있는지를 나타내는 %b 수치를 이용합니다.

▶ 매수
주가가 상단밴드에 접근해 있고, 현금흐름지수가 강세를 나타낼 때 매수합니다. 예를 들어, %b가 0.8보다 크고, MFI가 80% 보다 클 때 매수합니다.

▶ 매도
주가가 하단밴드에 접근해 있고, 현금흐름지수가 약세를 나타낼 때 매도 합니다. 예를 들어, %b가 0.2보다 작고, MFI가 20% 보다 작을 때 매도합니다.


%b 와 MFI로부터 매수, 매도 시점 확인 과정

(1) %b가 0.8보다 크고, MFI가 80%보다 큰가?

넘파이의 where 함수를 사용하여 %b가 0.8보다 크고, MFI가 80%보다 클 때 1이라는 값으로, 나머지 조건에서는 0이라는 값으로 설정한 후 이 값을 pos_buy라는 열에 저장합니다.

(2) %b가 0.2보다 작고, MFI가 20%보다 작은가?

넘파이의 where 함수를 사용하여 %b가 0.2보다 작고, MFI가 20%보다 작을 때 1이라는 값으로, 나머지 조건에서는 0이라는 값으로 설정한 후 이 값을 pos_sell이라는 열에 저장합니다.

(3) 사거나, 팔아야 할 시점 표시

각 행을 비교하는 판다스의 diff() 함수를 사용하면, 사고 팔아야 할 시점을 표시할 수 있습니다. 만약 판다스 데이터프레임의 pos_buy 열의 값이 4행의 0에서 5행의 1로 바뀌었다고 가정하면, diff() 값은 ‘5행-4행’의 값인 1 – 0 = 1이 됩니다.

pos_buy, pos_sell 값 모두 1이 될 때 사거나 팔아야 할 시점입니다. 사거나 팔아야 할 시점을 time_pos_buy, time_pos_sell에 표시해둡니다.

(4) 매수, 매도 가격에 삼각형 표시

판다스 데이터프레임의 diff() 함수를 이용해서 만든 time_pos_buy, time_pos_sell 값이 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) 볼린저 밴드, %b 구하기

이 포스팅에서는 볼린저 밴드를 구하기 위한 이동평균선으로 20일선을 사용하며, 볼린저 밴드의 상단, 하단은 20일 표준편차의 2배를 사용합니다. 이후, 가격이 볼린저 밴드의 어느 위치에 있는지를 나타내는 지표인 %b룰 구합니다.

(3) 현금흐름지수 (MFI, Money Flow Index) 구하기

10일 동안 주가가 전일에 비해 상승했을 때의 현금 흐름의 합과 하락했을 때의 현금 흐름의 합을 이용해서 MFI를 구합니다.

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

매도 가격에서 매수 가격을 빼면 전체 구간에서의 이익이 됩니다. 2022년 12월 부터 2023년 2월까지의 구간에서는 매수 조건을 만족하는 시점이 1회, 매도 조건을 만족하는 시점이 1회 발생하였습니다. 전체 3개월 동안의 이익은 4421.89 USDT 이었습니다.

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


파이썬 코드 : 바이낸스 API, 판다스로 추세 추종 매매 전략 백 테스팅

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

파이썬 바이낸스 API로 비트코인 차트 분석 : 볼린저 밴드 추세 추종 매매 기법


마치며 …

이번 포스팅에서는 볼린저밴드를 이용하여 바이낸스 비트코인 투자 연습을 해보았습니다. 파이썬 바이낸스 API로 비트코인 캔들 데이터를 가져온 후, 파이썬 판다스로 볼린저 밴드 추세 추종 매매기법을 적용하였습니다.

볼린저 밴드 추세 추종 매매기법을 적용할 때는 비트코인 시계열 데이터의 시간간격, 볼린저 밴드를 구하는 시간 간격(window), 그리고 현금흐름지수를 구하는 시간 간격(window_MFI)이 모두 변수가 될 수 있습니다. 바꿔가며 수익률을 비교해 보시기 바랍니다.

 

 

함께 참고하면 더 좋은 글 :
1. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
2. 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
3. 바이낸스 API 보안을 위한 환경 변수 설정 : 윈도우 10
4. 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
5. 파이썬 바이낸스 API로 시계열 데이터 분석. 판다스, 볼린저 밴드 (Bollinger Band)
6. 바이낸스 API, 판다스 시계열 데이터 분석. 볼린저 밴드 지표 %b, 밴드폭(Bandwidth)
7. 바이낸스 API, 판다스로 시계열 데이터 분석. 현금흐름지수 MFI
8. 파이썬 바이낸스 비트코인 투자 백테스팅 : 이동평균선 매매 기법
9. 바이낸스 비트코인 투자 백 테스팅. 파이썬 코인 투자 연습
10. 파이썬 프로그래밍 시작


참고자료

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

Leave a Comment