바이낸스 API, 판다스로 시계열 데이터 분석. 현금흐름지수 MFI

바이낸스 API, 판다스로 시계열 데이터 분석. 현금흐름지수 MFI

파이썬 바이낸스 API로 시계열 데이터 분석 중입니다. 볼린저 밴드와 %b, Bandwidth라는 볼린저 밴드 지표를 구했던 지난 포스팅에 이어, 이번에는 현금흐름지수(MFI, Money Flow Index)를 알아보겠습니다. %b와 MFI를 함께 비교해 보시기 바랍니다.


글의 순서

시계열 데이터 분석 : 현금흐름지수 (MFI, Money Flow Index)
시계열 데이터 분석 : 상대강도지수(RSI) vs. 현금흐름지수(MFI)
MFI(현금흐름지수) 계산 방법
MFI 활용 방법
%b, MFI 동시 활용 방법
파이썬 코드 : 파이썬 바이낸스 API, 판다스로 현금흐름지수(MFI) 구하기


시계열 데이터 분석 : 현금흐름지수 (MFI, Money Flow Index)

주식 가격이나 코인 가격의 종료가가 아니라 중심가격에 거래량을 곱한 값이 바로 현금흐름입니다. 여기서, 중심가격은 거래가 집중적으로 발생하는 지점을 알기 위한 가격으로, 일정 기간 동안의 최고가, 최저가, 종료가의 평균을 의미합니다. 참고로 영어로는 중심가격을 Typical Price, 현금흐름을 Money Flow 라고 부릅니다.

현금흐름지표(MFI)는 가격과 거래량을 동시에 볼 수 있다는 장점이 있습니다. 일반적으로 거래량이 증가한 후에 가격에 변동이 생기기 때문에 거래량이 가격의 선행 지표이기도 합니다. MFI는 가격이 상승한 날 동안의 현금 흐름의 합과 하락한 날 동안의 현금 흐름 합을 이용합니다. 상승한 날들 동안의 현금 흐름을 ‘긍정적 현금 흐름’이라고 하고, 하락한 날들 동안의 현금 흐름을 ‘부정적 현금 흐름’이라고 부릅니다.



시계열 데이터 분석 : 상대강도지수(RSI) vs. 현금흐름지수(MFI)

(1) 상대강도지수(RSI, Relative Strength Index)

RSI(Relative Strength Index)는 일정 기간 동안 주가가 전일 가격에 비해 상승했는지, 하락했는지의 추세를 0 ~ 100의 퍼센트 수치로 나타낸 지표입니다. RSI는 현재가 과매수 상태인지, 과매도 상태인지를 알려줍니다. 여기서, 과매수란 주가 폭등으로 투자자들이 주식을 적정 수준 이상으로 매수하는 현상을 말합니다. 상승한 변화량이 크면 과매수로, 하락한 변화량이 크면 과매도로 판단하는 방식입니다. 보통 RSI 퍼센트 수치로는 30이하면 과매도, 70 이상이면 과매수로 해석합니다.

(2) 현금흐름지수(MFI, Money Flow Index)

MFI(Money Flow Index)는 거래량 데이터에 상대강도지수 개념을 도입한 지표라고 할 수 있습니다. 일정 기간 동안 주가가 전일에 비해 상승했을 때 현금 흐름의 합과 하락했을 때 현금 흐름의 합을 이용합니다.


MFI(현금흐름지수) 계산 방법

주가를 기준으로 한다면 하루 단위로 시간 간격을 정하는 것이 일반적이지만, 코인 가격의 경우, 하루가 아니라 1분, 1시간, 1주 등 다양하게 적용할 수 있습니다.

우리가 정한 기간에서 가격이 상승한 날의 상승분을 Up, 가격이 하락한 날의 하락분을 Down이라고 해보겠습니다. 상승분 Up 값의 n일 동안의 평균을 AU, 하락분 Down 값의 n일 동안의 평균을 AD하고 하면, AU와 AD의 비율을 상대강도라고 정의합니다. 상대강도가 크다는 것은 상승폭이 크다는 것을 의미합니다.

MFI 계산방법을 정리해보겠습니다.
step1) 기간 선정 : n일
step2) 상승한 날들의 현금 흐름의 합 SMF_P 구하기 (SMF_P : Sum of Positive Money Flow)
step3) 하락한 날들의 현금 흐름의 합 SMF_N 구하기 (SMF_N : Sum of Negative Money Flow)
step4) 현금흐름비율 MFR = SMF_P/SMF_N 구하기
step5) MFI = 100 – (100 / (1+MFR))


MFI 활용 방법

MFI 값은 0~100 사이에 있습니다. MFI가 80 이상이면 아주 강력한 매수 신호를 나타내고, 20 이하이면 강력한 매도 신호를 나타냅니다. 80 이하였다가 80 위로 올라가는 순간과 20 이상이었다가 20 아래로 내려가는 시점을 포착하는 것이 중요합니다.


%b, MFI 동시 활용 방법

MFI를 %b와 함께 나타냈을 때, 매수와 매도 시점을 좀 더 정확하게 파악할 수 있습니다.

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

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


파이썬 코드 : 파이썬 바이낸스 API, 판다스로 현금흐름지수(MFI) 구하기

판다스 열 연산(column operation)을 통해 현금흐름지수를 구하는 실습코드를 아래에 나타내었습니다. 파이썬 바이낸스 API로 비트코인 시계열 데이터를 가져오고, 판다스 데이터프레임 변수에 담는 것 까지는 지금까지의 포스팅과 동일합니다. %b와 MFI를 하나의 그래프에서 비교하기 위해 %b에 100을 곱했습니다. 중요한 것은 두 지표로 매수, 매도 시점을 잡을 수 있을지를 상상해 보는 것입니다.

판다스 데이터프레임에서 유용하게 쓰이는 함수인 np.where(), rolling(window).mean(), rolling(window).sum()의 활용법을 확인해 주시기 바랍니다. 또한, 종이 한 장에 그래프 세 개를 나란히 넣기 위해 fig, axs를 지정하는 부분과 x축의 날짜 범위를 맞추기 위해 numpy를 사용한 부분은 시계열 데이터 분석에서 자주 활용되는 중요한 부분입니다.



시계열 데이터 분석 : MFI (현금흐름지수)

마치며 …

파이썬 바이낸스 API로 시계열 데이터 분석을 계속하고 있습니다. 지금까지 파이썬 판다스로 이동평균선, 스토캐스틱, RSI, 볼린저 밴드와 같은 기술적 지표들을 직접 구해봤었습니다. 이번 포스팅에서는 지난 포스팅의 볼린저 밴드 지표 %b와 밴드폭(Bandwidth)에 현금흐름지수 를 겹쳐 그려보았습니다. 매수, 매도 시점을 시뮬레이션 해보시기 바랍니다.

 

 

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


참고자료

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

Leave a Comment