본문 바로가기
파이썬엑셀

파이썬 엑셀로 RSI 활용! 주식/코인 투자 전략

by mypick 2024. 11. 8.

주식이나 코인 투자, 혹시 하고 계신가요? 📈 요즘 시장 상황이 쉽지 않아서 걱정이 많으실 텐데, 좀 더 나은 투자 결정을 내리기 위해 파이썬과 엑셀을 활용해보는 건 어떠세요? 특히, 오늘은 RSI(Relative Strength Index, 상대강도지수)라는 기술적 지표를 파이썬으로 구현하고, 이를 활용하여 효과적인 투자 전략을 세우는 방법을 알려드릴게요. 어려울 것 같지만, 의외로 쉽게 따라 할 수 있으니, 걱정 마시고 천천히 따라와 보세요! 😉

 


RSI(상대강도지수)란 무엇일까요?

RSI는 주식이나 암호화폐 시장에서 흔히 쓰는 기술적 분석 지표 중 하나예요. 쉽게 말해, 특정 기간 동안 가격이 얼마나 빠르게 상승하고 있는지, 또는 하락하고 있는지를 나타내는 지표라고 할 수 있죠. 어떤 종목이 과매수 상태인지, 아니면 과매도 상태인지를 파악하는 데 아주 유용하게 활용될 수 있어요.

 

RSI는 0부터 100까지의 값을 가지는데, 일반적으로 70 이상이면 과매수, 30 이하이면 과매도로 판단한답니다. 즉, RSI가 70 이상이면 가격이 너무 빠르게 상승해서 조만간 조정이 올 가능성이 높고, 반대로 30 이하이면 가격이 너무 많이 내려가서 반등할 가능성이 높다는 걸 의미하죠. 물론, 이건 일반적인 기준일 뿐, 절대적인 기준은 아니에요.

 

RSI를 사용할 때에는 다른 기술적 지표들과 함께 종합적으로 판단하는 게 좋아요. 예를 들어, RSI가 과매수 구간에 있지만, 주가 차트의 흐름이 여전히 상승세를 유지하고 있다면, 섣불리 매도하기보다는 상황을 좀 더 지켜보는 게 현명할 수 있겠죠? 🤔

 


RSI 계산 공식

RSI 계산 공식은 겉보기에는 좀 복잡해 보이지만, 파이썬으로 구현하면 생각보다 간단해요.

 

RSI는 다음과 같은 공식으로 계산됩니다.

 

$$ RSI = 100 - \frac{100}{1 + RS} $$

 

여기서 RS는 Relative Strength를 의미하며, 평균 상승폭(Average Gain)과 평균 하락폭(Average Loss)의 비율을 나타내요.

 


RSI를 활용한 매매 전략

RSI를 활용한 매매 전략은 크게 두 가지로 나눌 수 있어요.

 

  • 매수 신호: RSI가 30 이하로 떨어진 후 다시 상승할 때 매수하는 전략이에요.
  • 매도 신호: RSI가 70 이상으로 올라간 후 다시 하락할 때 매도하는 전략이에요.

예를 들어, 어떤 코인의 RSI가 25까지 떨어졌다가 다시 35까지 상승했다면, 이를 매수 신호로 해석할 수 있어요. 반대로, RSI가 75까지 올라갔다가 다시 70까지 하락했다면, 매도 신호로 해석할 수 있겠죠.

 

하지만, RSI만 보고 섣불리 매매 결정을 내리는 건 위험해요. RSI는 보조 지표일 뿐, 주가 흐름을 완벽하게 예측하는 건 불가능하거든요. 따라서, RSI와 함께 다른 기술적 지표나 시장 상황을 종합적으로 고려하여 신중하게 매매 결정을 내려야 한답니다.

 


파이썬으로 RSI 구현하기

이제 파이썬을 이용해서 RSI를 구현해볼게요. 🐍 파이썬으로 RSI를 구현하는 것은 생각보다 쉬워요. 먼저, Pandas 라이브러리를 이용하여 주가 데이터를 불러오고,  함수를 사용하여 가격 변화량을 계산합니다. 그리고,  함수와  함수를 이용하여 상승폭과 하락폭을 계산하고, 마지막으로 RSI 공식을 적용하면 끝이에요!

 


코드 예시

import pandas as pd

def calculate_rsi(data, window=14):
    delta = data['Close'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()
    rs = gain / loss
    rsi = 100 - (100 / (1 + rs))
    return rsi

# 예시 데이터
data = pd.DataFrame({
    'Close': [100, 102, 101, 105, 107, 106, 108, 110]
})

data['RSI'] = calculate_rsi(data)
print(data)

 코드는 간단한 예시일 뿐, 실제로 주식이나 암호화폐 데이터를 분석할 때에는 더 많은 데이터를 가져와서 분석해야 해요. 그리고, RSI를 활용하여 매매 전략을 구현하려면, 위 코드에 추가적인 로직을 구현해야 할 거예요.

 


RSI와 함께 활용하면 좋은 다른 지표들

RSI는 유용한 지표이지만, 단독으로 사용하기보다는 다른 지표들과 함께 활용하면 더욱 효과적인 투자 전략을 세울 수 있어요. RSI와 함께 자주 사용되는 지표들을 소개해 드릴게요.

 


MFI(Money Flow Index)

MFI는 RSI와 비슷하지만, 거래량까지 고려하여 계산하는 지표예요. RSI는 가격 변화만을 고려하는 반면, MFI는 가격 변화와 거래량을 모두 고려하기 때문에, 시장의 힘을 더욱 정확하게 파악할 수 있답니다.

 


CCI(Commodity Channel Index)

CCI는 가격 변동성을 측정하는 지표예요. CCI가 100을 넘어서면 과매수, -100을 밑돌면 과매도로 판단하는 경우가 많아요. CCI는 RSI와 함께 사용하면, 시장의 과열 또는 냉각 여부를 더욱 명확하게 판단하는 데 도움이 된답니다.

 


MACD(Moving Average Convergence Divergence)

MACD는 두 개의 이동평균선의 차이를 이용하여 주가의 추세를 파악하는 지표예요. MACD가 0선 위로 올라가면 상승 추세, 0선 아래로 내려가면 하락 추세로 해석할 수 있어요. MACD는 RSI와 함께 사용하면, 주가의 추세 변화를 더욱 정확하게 파악할 수 있답니다.

 


실제 데이터를 활용한 RSI 분석

자, 이제 실제 데이터를 이용해서 RSI를 분석해보고, 파이썬 코드를 통해 어떻게 구현하는지 살펴볼게요. 업비트 API를 통해 비트코인 15분 봉 데이터를 가져와서 RSI를 계산해볼 거예요.

 


데이터 불러오기

import pickle
import pyupbit

# 이전 글에서 작성한 API의 Key들 활용
with open('./keypair/upbit_secret_key.pkl', 'rb') as k:
    secret_key = pickle.load(k)
upbit = pyupbit.Upbit(secret_key['access key'], secret_key['secret key'])

# 15분봉 비트코인 데이터 부름
temp_df = pyupbit.get_ohlcv('KRW-BTC',
                           interval="minute15",
                           count=500,
                           to='20220827 22:00:00',
                           period=0.1)

 코드를 통해 업비트에서 비트코인 15분 봉 데이터를 가져왔어요. 이 데이터를 활용해서 RSI를 계산해볼게요.

 


RSI 계산 및 시각화


import numpy as np
import pandas as pd

def get_rsi(df, period=14):
    df["close"] = df["close"]
    delta = df["close"].diff()  # 종가의 차이를 계산
    up, down = delta.copy(), delta.copy()  # 상승분과 하락분을 따로 계산하기 위해 복사
    up[up < 0] = 0  # 상승분, U
    down[down > 0] = 0  # 하락분, D
    _gain = up.ewm(com=(period - 1), min_periods=period).mean()  # AU(U값의 평균)
    _loss = down.abs().ewm(com=(period - 1), min_periods=period).mean()  # DU(D값의 평균)
    RS = _gain / _loss
    rsi_14 = pd.Series(100 - (100 / (1 + RS)), name="RSI")
    df['rsi'] = rsi_14
    return df

get_rsi(temp_df).tail(20)

 코드를 통해 RSI를 계산하고, 을 이용하여 최근 20개의 데이터를 출력했어요.

 

2022-08-27 17:00:00 29720000 29750000 29680000 29700000 221.45 48.52
2022-08-27 16:45:00 29700000 29770000 29670000 29720000 324.03 50.74
2022-08-27 16:30:00 29750000 29770000 29680000 29700000 206.97 49.34
2022-08-27 16:15:00 29800000 29820000 29700000 29750000 228.55 52.37
2022-08-27 16:00:00 29780000 29830000 29750000 29800000 216.65 54.92

날짜 시가 고가 저가 종가 거래량 RSI

 

위 표는 실제 비트코인 15분 봉 데이터를 이용하여 계산한 RSI 값을 보여줘요. 이 데이터를 통해 비트코인의 가격 변동 추이와 RSI 값의 변화를 함께 살펴보면, 좀 더 효과적인 매매 전략을 세울 수 있을 거예요.

 


QnA

Q1. RSI는 어떤 경우에 활용하면 좋을까요?

 

A1. RSI는 주식이나 암호화폐의 가격이 과매수 또는 과매도 상태인지 판단하는 데 유용해요. 또한, 주가 흐름의 변화를 파악하고 매수 또는 매도 시점을 결정하는 데에도 도움이 될 수 있죠.

 

Q2. RSI만 보고 투자 결정을 내려도 될까요?

 

A2. 아니요, RSI는 보조 지표일 뿐, 단독으로 사용하기보다는 다른 지표들과 함께 종합적으로 판단하는 것이 좋아요. RSI만 보고 섣불리 매매 결정을 내리면 큰 손실을 볼 수도 있으니, 주의해야 한답니다.

 

Q3. 파이썬으로 RSI를 구현하는 데 어려움을 느낀다면 어떻게 해야 할까요?

 

A3. 파이썬으로 RSI를 구현하는 데 어려움을 느끼신다면, 온라인 강의나 자료들을 참고하시면 도움이 될 거예요. 그리고, 파이썬 커뮤니티에 질문을 남기면 다른 개발자들의 도움을 받을 수도 있답니다.

 

마무리

오늘은 파이썬을 활용하여 RSI 지표를 구현하고, 이를 투자 전략에 활용하는 방법을 알아봤어요. RSI는 주식이나 암호화폐 투자에 도움이 되는 유용한 지표이지만, 절대적인 기준은 아니라는 점을 꼭 기억해야 해요. RSI와 함께 다른 지표들을 종합적으로 활용하고, 시장 상황을 고려하여 신중하게 투자 결정을 내리는 것이 중요하답니다.

 

항상 투자에는 리스크가 따른다는 점을 유념하시고, 자신에게 맞는 투자 전략을 세우는 것이 중요해요.

 

키워드:파이썬, Python, RSI, 상대강도지수, RelativeStrengthIndex, 주식투자, 코인투자, 투자전략, 기술적분석, TechnicalAnalysis, 엑셀, Excel, 데이터분석, DataAnalysis, 알고리즘트레이딩, AlgorithmicTrading, 업비트, Upbit, API, 파이썬개발, PythonDevelopment, quant, 퀀트, 금융공학, FinancialEngineering, 투자, 투자팁, 재테크, 가치투자, 성장주, 주식시장, 코인시장, 암호화폐, Cryptocurrency, 투자공부, 매매, 매매전략