시스템트레이딩

[업비트 시스템 트레이딩] 2024.05.20 / RSI

joggerin 2024. 5. 20. 15:35
728x90

0. Summary

1. RSI: Relative Strength Index
2. 유용한 투자지표 중의 하나이며 알고리즘에 추가 예정
3. 장기로 볼지, 단기로 볼지는 고민중

 

1. RSI 란?

● RSI: Relative Strength Index

RSI란 주가의 상승방향이 더 강한지, 하락경향이 더 강한지를 나타내주는 지표이다.직역하면 상대강도지수라고 불린다.

● 어떻게 사용하는 것인가?

0~100의 값으로 확인이 되고, 그 절반인 50을 기준으로 50이상이면 매수 우세, 50이하이면 매도 우세로 판단하는 경우가 많다. 그리고 70 이상이면 과매수, 30 이하면 과매도라고 판단을 하는 것 같다. 

그리고 얘도 MACD와 비슷하게 signal 선이 존재하고, 이 값과 RSI선을 같이 확인하면서 추세를 판단하기도 한다. 즉, RSI와 시그널선의 크로싱되는 시점 기준으로 매수, 매도의 추세를 판단하는 것이다. RSI가 시그널선 위로 가면 매수가 점차 늘어나는 것으로 이해가 되고, 반대의 경우에는 매도가 늘어난다고 보면 되겠다. 

● 그대로 믿어도 되는지?

물론 이 지표는 참고되는 자료이므로 30, 50, 70에 얽매일 수도 있겠지만, 자신만의 알고리즘에 맞지 않는다면 일부를 튜닝해서 쓰는 것도 좋을 것 같다.

 

 

2. RSI의 계산

● 계산의 기본 개념

RSI는 특정 기간 동안의 평균 상승폭과 평균 하락폭을 비교하여 계산된다. 주로 14일 기간을 사용하지만, 개개인의 성향에 맞게 조정하면 된다. 평균 상승폭(Average Gain)과 평균 하락폭의 비율인 RS부터 구하고 이걸로 RSI를 구하면 된다.

● chatGPT를 이용하여 기본 frame 도출

직접 구현하려고 했는데, 요즘은 다 chatGPT를 이용한다고 하니 한번 시도해봤다. chatGPT에게 RSI 코드를 구현하는 것을 알려달라고 하니 아래와 같은 응답을 했다. 정말 빠르고 편하게 나온다 ㄷㄷ 이걸 기본 frame으로 해서 RSI를 구현하였다.

import pandas as pd

def calculate_rsi(data, period=14):
    # 데이터의 가격 차이 계산
    delta = data['Close'].diff()
    
    # 상승분과 하락분을 분리
    gain = delta.where(delta > 0, 0)
    loss = -delta.where(delta < 0, 0)
    
    # 평균 상승과 평균 하락 계산
    avg_gain = gain.rolling(window=period, min_periods=1).mean()
    avg_loss = loss.rolling(window=period, min_periods=1).mean()
    
    # RS 및 RSI 계산
    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    
    return rsi

# 예시 데이터
data = pd.DataFrame({
    'Close': [120, 125, 130, 128, 127, 130, 133, 132, 131, 128, 126, 124, 125, 126, 128]
})

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

 

3. 결론

● 유용한 지표 중의 하나이다

RSI는 투자자들에게 자산의 현재 상태와 잠재적인 가격 반전 시점을 파악하는 데 유용한 보조지표이다. RSI를 통해 과매수 및 과매도 상태를 판단하고, 이를 기반으로 보다 현명한 투자 결정을 내릴 수 있다. Python을 사용하여 RSI를 계산하는 것은 비교적 간단하다. MACD보다 더 편하게 계산할 수 있으니, 이를 통해 투자 전략을 강화하려고 한다.

 

4. 주의사항

투자는 항상 본인의 선택이고 그에 따른 결과도 책임을 져야 한다. 해당 포스트 뿐만 아니라 이 블로그의 모든 글은 개인적인 의견일 뿐이니 조심해야 한다

728x90