파이썬 바이낸스 API로 차트 분석 : 판다스 이동평균선

파이썬 바이낸스 API로 차트 분석 : 판다스 이동평균선

파이썬 바이낸스 API로 코인 가격에 대한 시계열 데이터 분석을 쉽게 할 수 있습니다. 이번 포스팅에서도 캔들 차트를 이용합니다. 파이썬 바이낸스 API의 get_historical_klines() 함수로 시간, 시가, 고가, 저가, 종가 데이터를 가져온 후 판다스 데이터프레임을 이용하여 이동평균선을 구하는 방법과 이동평균선의 활용법에 대해 알아보겠습니다.


글의 순서

이동평균선 (moving average line)
파이썬 바이낸스 API로 가져온 ohlcv 데이터와 이동평균선
판다스 데이터프레임에서 단순 이동평균선을 구하는 방법
단기, 장기 이동평균선 교차 시점으로 예측하는 추세 전환
파이썬 코드 : 판다스 데이터프레임을 이용한 이동평균선


이동평균선 (moving average line)

이동평균선은 주가나 외환의 기술적 분석에서 사용되는 지표입니다. 물론 코인 가격에도 적용할 수 있습니다. 이동평균선은 종가를 기준으로 계산하며, 짧은 시간 동안에 발생한 극심한 가격 변동을 보다 긴 시간에서의 변화로 바꿔주는 역할을 합니다. 그래서 추세를 확인할 수 있습니다. 주가 차트에서의 이동평균선은 일정기간의 주가를 합한 후 해당 기간으로 나눠서 구합니다.

예를 들어, 10일 이동평균선은 과거 10일 동안의 주가를 평균내서 표시하는 방법입니다. 주가는 예측할 수 없이 움직이지만, 평균을 내보면 방향성이 보이지 않을까?라는 가정으로부터 이동평균선이 나왔습니다.

이동평균선은 크게 3가지 정도로 나눌 수 있습니다. 각각 단순 이동평균 SMA(simple moving average), 지수 이동평균 EMA(exponetial moving average), 가중 이동평균 WMA(weighted moving average)입니다. 이번 포스팅에서는 단순 이동평균 SMA을 구해보겠습니다.



파이썬 바이낸스 API로 가져온 ohlcv 데이터와 이동평균선

파이썬 바이낸스 API는 코인 가격을 시계열 데이터로 쉽게 가져올 수 있도록 get_historical_klines() 함수를 제공합니다. get_historical_klines() 함수에 시작점, 끝점을 인자로 넘겨주면서 시계열 데이터 수집 구간을 정할 수 있는데, 만약 끝점을 넘겨주지 않으면 현재까지의 데이터를 가져옵니다. 인자로 넘겨 줄 시간 간격(시작점, 끝점)은 아래처럼 분(m, minute), 시간(h, hour), 일(d, day), 주(w, week), 월(M, month)로 구분할 수 있습니다.

# valid intervals – 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M

get_historical_klines() 함수의 출력값은 ohlcv라는 캔들 데이터 형태입니다. 여기서, o는 시작가(open), h는 최고가(high), l은 최저가(low), c는 종료가(close), 그리고 v는 총 거래량(volume)을 의미합니다. 캔들 차트로부터 특정 시간 간격에서 가격이 어떻게 변화했는지를 알 수 있고, 각 구간별로 이동평균선도 구할 수 있습니다.


판다스 데이터프레임에서 단순 이동평균선을 구하는 방법

시간 간격을 정해서 나온 ohlcv 데이터, 즉 캔들 데이터로 평균을 구합니다. 주식시장에서처럼 시간 간격을 1일이라고 가정해 보겠습니다. 각 날짜에서 종가가 아래의 리스트처럼 수집되었습니다.

prices = [10, 15, 13, 17, 12, 13, 14, …. ]

5일 이동평균선은 위 리스트에서 5개의 엘리먼트를 이용하여 구합니다. 그러니까 5일 이동평균선의 엘리먼트는 다음과 같이 5개의 엘리먼트를 평균하여 구합니다.
1번째 엘리먼트 : 없음
2번째 엘리먼트 : 없음
3번째 엘리먼트 : 없음
4번째 엘리먼트 : 없음
5번째 엘리먼트 : (10+15+13+17+12)/5
6번째 엘리먼트 : (15+13+17+12+13)/5
7번째 엘리먼트 : (13+17+12+13+14)/5


단기, 장기 이동평균선 교차 시점으로 예측하는 추세 전환

이동평균선은 시장의 추세를 보여줍니다. 5일 이동평균선과 10일 이동평균선이 있다면, 말 그대로 5일이 단기, 10일이 장기가 됩니다. 두 이동평균선이 교차하는 지점이 중요한 의미를 지니며, 이 시점을 거래에 참고합니다. 보통 단기 이동평균선이 장기 이동평균선 아래에 있다가 교차해서 위로 올라가는 시점을 매수 시점으로 봅니다.

판다스 데이터프레임과 넘파이(numpy) 라는 파이썬 패키지를 함께 사용하면, 단기 이동평균선과 장기 이동평균선의 교차점을 쉽게 찾아낼 수 있습니다. 참고로, 넘파이(numpy)는 행렬이나 수치 계산에 최적화되어 있어 데이터 분석에 유용하게 사용할 수 있는 라이브러리입니다.

아래는 numpy의 where 함수를 사용해서 두 이동평균선의 교차지점을 찾아내는 코드입니다. np.where(조건, 1, 0) 함수는 조건이 참일 때 1, 거짓일 때 0을 출력합니다. 그러니까 아래 코드는 단기 이동평균선이 장기 이동평균선보다 위에 있을 때 1을 출력하게 합니다. 따라서 df[‘cross’] 열이 0이었다가 1로 바뀌는 시점이 바로 5일 이동평균선이 10일 이동 평균선을 교차해서 위로 올라가는 시점입니다.


파이썬 코드 : 판다스 데이터프레임을 이용한 이동평균선

지금까지의 과정을 ‘판다스 데이터프레임을 이용한 이동평균선’ 파이썬 코드에 나타내었습니다. 지난 포스팅 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리의 판다스로 시계열데이터 전처리 (바이낸스 차트 분석)라는 파이썬 코드에 이동평균선 부분을 덧붙인 코드입니다. 이동평균선 부분만 출력하도록 했습니다.


마치며 …

이번 포스팅에서는 파이썬 바이낸스 API의 get_historical_klines() 함수로 시간, 시가, 고가, 저가, 종가 데이터를 가져온 후 판다스 데이터프레임을 이용하여 이동평균선을 구해 보았습니다.

pandas DataFrame의 rolling().mean() 함수로 이동평균선을 쉽게 구했고, 넘파이의 where 함수를 이용해서 장, 단기 이동평균선의 교차지점을 알아내는 방법도 확인하였습니다. 이동평균선을 구할 때 썼던 판다스 데이터프레임 함수 2개를 기억해주시기 바랍니다.

 

 

함께 참고하면 좋은 글 :
1. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
2. 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
3. 바이낸스 API 보안을 위한 환경 변수 설정 : 윈도우 10
4. 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
5. 파이썬 IDE 설정. 비주얼 스튜디오 코드(Visual Studio Code, VS code)
6. 파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
7. API와 파이썬 데이터 분석
8. 파이썬 바이낸스 비트코인 투자 백테스팅 : 이동평균선 매매 기법
9. 시계열 데이터 전처리 결과 확인 : pandas DataFrame
10. 파이썬 프로그래밍 시작 (8) 자료구조(Data Structure) : 리스트
11. 파이썬 프로그래밍 시작


참고자료

python-binance Docs >> get_historical_klines

Leave a Comment