본문 바로가기
파이썬엑셀

파이썬 엑셀로 RSI 분석: 투자 전략 고수되기

by mypick 2024. 11. 7.

주식 시장에서 좀 더 나은 투자 결정을 내리고 싶으세요? 파이썬과 엑셀을 활용하여 상대강도지수(RSI)를 분석하는 방법을 배우고, 투자 전략을 한 단계 업그레이드해 보세요! 이 글에서는 RSI의 개념부터 파이썬을 이용한 계산, 그리고 엑셀과의 연동까지 상세히 다루어, 여러분의 투자 여정에 도움을 드리고자 합니다.

 

상대강도지수(RSI)는 주식이나 암호화폐와 같은 자산의 가격 변동을 분석하는 데 사용되는 모멘텀 지표 중 하나에요. 쉽게 말해, 최근 가격 변동의 강도를 측정하여 과매수 또는 과매도 상태를 파악하는 데 유용한 도구라고 생각하시면 돼요. RSI는 0에서 100 사이의 값을 가지는데, 70을 넘어서면 과매수, 30 아래로 내려가면 과매도 신호로 해석하는 경우가 많아요.

 


파이썬으로 RSI 계산하기: 코딩으로 투자 분석의 폭을 넓히다

파이썬은 데이터 분석 및 과학 계산 분야에서 널리 사용되는 언어이고, 투자 분석에도 유용하게 활용될 수 있어요. 특히, RSI 계산처럼 복잡한 수학적 연산을 쉽고 효율적으로 처리할 수 있다는 장점이 있죠. RSI 계산을 위한 파이썬 코드는 다음과 같아요.

 


필요한 라이브러리 불러오기

가장 먼저, RSI 계산에 필요한 라이브러리를 불러와야 해요. 여기서는 NumPy와 Pandas를 사용할 거예요. NumPy는 배열 및 행렬 연산에 유용하고, Pandas는 데이터 분석을 위한 강력한 도구를 제공하죠.

 

import numpy as np
import pandas as pd

RSI 계산 함수 정의

RSI 계산을 위한 함수를 정의해 볼게요. 함수 이름은 로 정했고, 데이터프레임과 기간(period)을 입력값으로 받아요. 기간은 기본적으로 14일을 사용하지만, 필요에 따라 변경할 수 있어요.

 

def get_rsi(df, period=14):
    delta = df["close"].diff() 
    up, down = delta.copy(), delta.copy() 
    up[up < 0] = 0
    down[down > 0] = 0

    _gain = up.ewm(com=(period - 1), min_periods=period).mean()
    _loss = down.abs().ewm(com=(period - 1), min_periods=period).mean()

    RS = _gain / _loss
    rsi_14 = pd.Series(100 - (100 / (1 + RS)), name="RSI")
    df['rsi'] = rsi_14

    return df

데이터프레임에 적용하기

이제 실제 주식 데이터를 불러와서  함수를 적용해 볼게요.  예를 들어,  비트코인의 15분 봉 데이터를 pyupbit 라이브러리를 사용하여 불러온 후,  함수를 적용해 볼 수 있습니다.

 

temp_df = pd.DataFrame({'close': [/* 종가 데이터 */]}) 
result_df = get_rsi(temp_df)
print(result_df.tail(20))

엑셀과 파이썬의 만남: RSI 결과를 엑셀로 쉽게 내보내기

파이썬에서 계산한 RSI 결과를 엑셀 파일로 저장하면, 엑셀의 다양한 기능을 활용하여 결과를 시각화하거나 추가 분석을 진행할 수 있어요. Pandas 라이브러리의  메서드를 사용하면 간편하게 엑셀 파일을 생성할 수 있습니다.

 

result_df.to_excel("RSI_results.xlsx", index=False)

 코드를 실행하면 "RSI_results.xlsx"라는 이름의 엑셀 파일이 생성되고, 파이썬에서 계산한 RSI 결과가 저장됩니다.

 


엑셀에서 RSI 데이터 활용하기

엑셀 파일을 열어보면, 파이썬에서 계산된 RSI 값이 보기 쉽게 정리되어 있는 것을 확인할 수 있어요. 이제 엑셀의 차트 기능을 활용하여 RSI 값을 그래프로 나타내고, 과매수/과매도 구간을 시각적으로 확인할 수 있습니다. 또한, 다른 지표들과 함께 분석하여 투자 전략을 세우는 데 유용하게 활용할 수 있죠.

 


RSI 분석과 투자 전략: 과매수/과매도 신호를 활용한 현명한 투자

RSI를 활용하면 투자 전략을 세우는 데 도움을 받을 수 있어요.

 


과매수/과매도 신호 활용

  • 과매수 신호: RSI 값이 70을 넘어서면, 자산의 가격이 너무 빠르게 상승하여 조만간 하락할 가능성이 높다는 의미에요. 따라서, 이 시점에서는 매수보다는 매도를 고려하는 것이 좋을 수 있습니다.
  • 과매도 신호: 반대로 RSI 값이 30 아래로 내려가면, 자산의 가격이 과도하게 하락하여 반등할 가능성이 높다는 의미에요. 이때는 매수를 고려해볼 수 있는 시점이라고 할 수 있습니다.

다른 지표와의 결합

RSI는 단독으로 사용하기보다는 다른 지표들과 함께 활용하는 것이 더욱 효과적이에요. 예를 들어, 이동평균선, 거래량, MACD 등과 함께 분석하면 더욱 정확한 판단을 내릴 수 있죠.

 


투자 전략 수립

RSI 분석 결과를 바탕으로 자신만의 투자 전략을 수립할 수 있어요. 예를 들어, RSI가 70 이상일 때 매도하고, 30 이하일 때 매수하는 전략을 세울 수도 있고, RSI와 다른 지표들을 결합하여 더욱 복잡한 전략을 구축할 수도 있습니다.

 


RSI 분석을 위한 추가 지표: MFI와 CCI


RSI는 가격 변동만을 고려한 지표인데, 거래량까지 함께 고려하여 분석하고 싶다면 MFI(Money Flow Index)나 CCI(Commodity Channel Index)를 활용하는 것도 좋은 방법이에요.

 


MFI(Money Flow Index)

MFI는 가격과 거래량을 모두 고려하여 자산의 매수/매도 압력을 측정하는 지표에요. RSI와 유사하게 0에서 100 사이의 값을 가지며, 20 이하이면 과매도, 80 이상이면 과매수로 해석되는 경우가 많아요.

 


CCI(Commodity Channel Index)

CCI는 자산의 가격 변동이 평균 가격 범위에서 얼마나 벗어나 있는지를 나타내는 지표에요. +100 이상이면 과매수, -100 이하이면 과매도로 해석하는 경우가 많아요.

 

다음은 Python을 이용하여 MFI를 계산하는 코드 예시입니다.

 

def get_mfi(df, period = 14):
    # 우선적으로 각 기간에 맞게 평균 가격(TP)을 구합니다.
    typical_price = (df['high'] + df['low'] + df['close']) / 3 # TP
    money_flow = typical_price * df['volume']
    positive_flow =[]
    negative_flow = []
    # 반복문을 돌면서 기간별 양의 RMF, 음의 RMF를 구현합니다.
    # Loop through the typical price
    for i in range(1, len(typical_price)):
        if typical_price[i] > typical_price[i-1]:
            positive_flow.append(money_flow[i-1])
            negative_flow.append(0)
        elif typical_price[i] < typical_price[i-1]:
            negative_flow.append(money_flow[i-1])
            positive_flow.append(0)
        else:
            positive_flow.append(0)
            negative_flow.append(0)
    positive_mf = []
    negative_mf = []
    # 기간동안 평균 가격들의 분류가 끝난 경우, RMF 계산식을 이용해 평균 가격과 당일 거래량을 곱합니다.
    # Get all of the positive money flows within the time period
    for i in range(period-1, len(positive_flow)):
        positive_mf.append(sum(positive_flow[i+1-period : i+1]))
    # Get all of the negative money flows within the time period
    for i in range(period-1, len(negative_flow)):
        negative_mf.append(sum(negative_flow[i+1-period : i+1]))
    # MFR을 계산합니다. 그 후 MFI를 구합니다.
    mfi = list(100 * (np.array(positive_mf) / (np.array(positive_mf) + np.array(negative_mf))))
    df['mfi'] = mfi
    return df

RSI, MFI, CCI 비교

RSI 가격 변동의 강도 측정 최근 가격 변동의 평균 상승폭과 하락폭 비교 RSI > 70 (과매수), RSI < 30 (과매도)
MFI 가격과 거래량을 모두 고려한 매수/매도 압력 측정 가격과 거래량을 이용한 Money Flow 계산 MFI > 80 (과매수), MFI < 20 (과매도)
CCI 가격 변동이 평균 가격 범위에서 얼마나 벗어나는지 측정 가격 변동과 평균 가격의 차이 계산 CCI > 100 (과매수), CCI < -100 (과매도)

지표 설명 계산 과매수/과매도 기준

 


마무리: 파이썬과 엑셀로 투자 분석의 새로운 시대를 열다!

이 글에서는 파이썬과 엑셀을 활용하여 상대강도지수(RSI)를 분석하는 방법을 알아보았어요. RSI는 주식 시장에서 투자 결정을 내리는 데 도움을 주는 유용한 지표이고, 파이썬을 이용하면 쉽고 효율적으로 RSI를 계산하고, 엑셀과의 연동을 통해 결과를 시각화하여 분석할 수 있다는 장점이 있습니다. 또한, MFI와 CCI와 같은 다른 지표들과 함께 활용하면 투자 분석의 정확성을 높일 수 있습니다.

 

하지만 RSI는 절대적인 투자 지표가 아니라는 점을 잊지 마세요. RSI를 포함한 모든 투자 지표는 참고 자료일 뿐, 실제 투자 결정은 여러 요소를 종합적으로 고려하여 신중하게 내려야 합니다. 이 글이 여러분의 투자 분석에 도움이 되기를 바라며, 앞으로도 다양한 투자 분석 기법과 도구에 대한 정보를 공유해 드릴게요!

 

QnA

Q1. RSI 지표를 사용하는 데 있어서 주의해야 할 점은 무엇인가요?

 

A1. RSI는 과매수/과매도 신호를 제공하지만, 절대적인 매매 신호로 받아들여서는 안 돼요. RSI를 포함한 모든 투자 지표는 참고 자료일 뿐, 실제 투자 결정은 다양한 요소들을 종합적으로 고려하여 신중하게 내려야 합니다. 또한, 시장 상황이나 자산의 특성에 따라 RSI의 적용 방식이 달라질 수 있으므로, 꾸준히 학습하고 개선하는 자세가 중요해요.

 

Q2. 파이썬으로 RSI를 계산하는 방법을 더 자세히 알고 싶어요.

 

A2. 파이썬으로 RSI를 계산하는 방법은 이 글에서 소개된 코드를 참고하시면 돼요.  코드의 각 부분에 대한 설명을 꼼꼼히 읽고, 직접 코드를 실행해 보면서 이해를 높이는 것이 좋습니다. 또한, Pandas와 NumPy 라이브러리에 대한 추가적인 학습을 통해 데이터 분석 능력을 향상시킬 수 있습니다.

 

Q3. MFI와 CCI는 RSI와 어떤 차이점이 있나요?

 

A3. RSI는 가격 변동만을 고려하는 반면, MFI는 가격과 거래량을 함께 고려하여 매수/매도 압력을 측정하는 지표에요. CCI는 가격 변동이 평균 가격 범위에서 얼마나 벗어나는지를 나타내는 지표이고요. 따라서, 분석 목적에 따라 적절한 지표를 선택하여 활용하는 것이 중요합니다.

 

파이썬,엑셀,RSI,상대강도지수,투자,주식,분석,데이터분석,투자전략,코딩,알고리즘,퀀트,quant,MFI,MoneyFlowIndex,CCI,CommodityChannelIndex,과매수,과매도,매매,트레이딩,투자지표,재테크,금융,Python,Excel,FinancialAnalysis,TechnicalAnalysis,TradingStrategy,Investing,AlgorithmTrading,DataScience,Backtesting,Pyupbit,Upbit