본문 바로가기
경제공부

[Chart Study] MFI(Money Flow Index)

by zemba 2022. 4. 16.
반응형
SMALL

안녕하세요~ Zemba입니다!
이번에는 MFI지표에 대해서 알아보려고 합니다. 저도 생전 처음 들어보는 이름의 지표입니다 ㅎㅎ
근데 오우....RSI의 업그레이드 버전이라고 하네요 ㅎ ( 좋은가보다...ㅎ)
우선 RSI의 지표는 과매수, 과매도를 주가를 기준으로 계산하는 지표입니다. ( 추후에 포스팅할 예정입니다 ㅎ ) 
하지만 MFI는 업그레이드 버전이라고 한 이유는 RSI와 유사하지만 RSI는 주가를 기준으로만 계산한다면 MFI는 거래량까지 포함하여 계산하는 지표입니다. 그렇기 때문에 현금흐름의 지표라고도 합니다. 이래서 업그레이드 지표라고 하는가 봅니다 ㅎㅎ ( 주식에서 거래량은 매우 중요한 정보 데이터죠! )

그럼 우선 차트의 형태부터 한번 살펴보고 가겠습니다.

출처 - 알파스퀘어 차트

그림의 가장 하단에 위치한 지표를 보시면 MFI라고 쓰여있는 차트가 있습니다. RSI와 유사하게 상단과 하단에 기준선이 그어져 있는 것을 볼 수 있습니다. 좀 더 자세한 비교를 위해서 차트를 2개 띄워보겠습니다.

출처 - 알파스퀘어 차트

MFI와 RSI를 보면 대체적으로 비슷한 추세를 보이긴 하지만 약간씩 다르긴 하네요..ㅎㅎ 그리고 또 하나의 차이점은 MFI는 20, 80으로 과매수, 과매도의 기준이 기본값이지만 RSI는 30, 70이 기준값입니다. ( 변경할 수는 있겠지만 그래도 기본값이 차이가 난다는 것은 의미가 있을 것 같습니다. ㅎㅎ ) 

그럼 MFI를 어떻게 구하는지에 대해서 알아보겠습니다.

  • Typical Price = (고가 + 저가 + 종가) / 3
  • Raw Money Flow = Typical Price * 거래량
  • Money Flow Ratio = (14일간 Positive Money Flow) / (14일간 Negative Money Flow)
  • MFI = 100 - (100 / (1+ Money Flow Ratio))

확실히 거래량이 추가되다 보니 계산식이 좀 복잡해지는 것 같습니다.
그렇다면 MFI 지표의 매매 포인트에 대해서 알아보겠습니다.

  • MFI 80 이상 - 과매수 구간이기 때문에 매도의 시점으로 사용
  • MFI 20 이하 - 과매도 구간이기 때문에 매수의 시점으로 사용
  • MFI 50 기준 상하 - 50 이상일 경우 과매수 양상을 보이며, 50 이하일 경우 과매도 양상을 보임

얼핏 봐도 RSI와 진짜 비슷하네요 ㅎㅎ 사실 거래량이 포함된 지표기 때문에 거의 유사하다고 볼 수 있지만 RSI보다는 좀 더 정확한 판단을 할수 있는 지표라고합니다. 거래량이 포함되었기 때문에 좀더 믿음이 가긴 합니다 ( 개인적으로요 ㅎㅎ )


그럼 해당 지표를 코드로 구현해보도록 하겠습니다.
계산식은 위에 정리되어있으니 OHLCV기반 데이터로 계산해주면 되겠습니다.

def mfi(ohlcv, day):
    ohlcv['TP'] = (ohlcv['high'] + ohlcv['low'] + ohlcv['close']) / 3
    ohlcv['PMF'] = 0
    ohlcv['NMF'] = 0
    for i in range(len(ohlcv['close']) - 1):
        if ohlcv['TP'].values[i] < ohlcv['TP'].values[i + 1]:
            ohlcv['PMF'].values[i + 1] = ohlcv['TP'].values[i + 1] * ohlcv['volume'].values[i + 1]
            ohlcv['NMF'].values[i + 1] = 0
        else:
            ohlcv['NMF'].values[i + 1] = ohlcv['TP'].values[i + 1] * ohlcv['volume'].values[i + 1]
            ohlcv['PMF'].values[i + 1] = 0

    ohlcv['MFR'] = ohlcv['PMF'].rolling(window=day).sum() / ohlcv['NMF'].rolling(window=day).sum()
    ohlcv['MFI'] = 100 - 100 / (1 + ohlcv['MFR'])
    return ohlcv['MFI']

계산식대로 하나하나 구현하고 PMF(Positive Money Flow), NMF(negative Money Flow)를 Sum 하여 계산합니다. 여기서 주기는 변경이 가능하기 때문에 별도의 파라미터로 전달받습니다. 최종적으로 MFI을 계산하면 원하는 결과를 얻을 수 있습니다. 정확한 결과가 나왔는지 확인해보기 위해서 XRP기준 60분 봉으로 차트 비교를 해보았습니다.

잘 출력되는 것을 보니 계산이 정확하게 잘된 것 같습니다. 
개인적으로 지금 이 차트를 공부하다 보니 자동매매 시즌1의 개발에서 RSI가 아닌 MFI지표를 사용했으면 승률이 얼마나 되었을지 궁금하긴 하네요 ㅎㅎ ( 나중에 백테스트라도 한번 돌려보려고 합니다..ㅎ )

오늘은 MFI 지표에 대해서 알아보았습니다. 이번 포스팅에서 RSI가 계속 언급되었기 때문에 다음 포스팅에서는 RSI에 대해서 알아보도록 하겠습니다. 순서상으로는 RSI를 먼저 선행 학습해야 했지만 저는 RSI학습은 이미 진행한 상태지만 포스팅을 안 했기 때문에 다시 한번 점검 차원에서 포스팅을 해보려고 합니다. ㅎㅎㅎ

역시나 이렇게 꾸준히 만들면 저에게 언젠가는 큰 도움이 될 것입니다. 매매법은 일반적인 부분들을 적어놓은 것이니 실제 거래에 대해서는 본인이 전략에 맞도록 잘 판단하여 거래하시길 바랍니다.
다음 포스팅에서 만나요~ ㅎ

반응형
LIST

댓글