본문 바로가기

Little Investment/Study investing

주식 RSI에 대해 알아보기

반응형

주식 RSI에 대해 알아보기

이번 포스트에서는 주식 보조지표 중 하나인 RSI에 대해서 알아보고자 한다.
RSI의 경우 필자도 자주 확인하는 보조지표인데, RSI가 무엇인지, 계산 방법, 활용법 등에 대해서 간단하게 알아보자.
또한 Python을 활용해 RSI를 계산하고 차트를 생성하는 방법도 함께 알아보고자 한다.

목차

RSI(Relative Strength Index)란?

✔ RSI(Relative Strength Index)

RSI는 주식, 선물, 외환 등 다양한 금융 시장에서 과매수나 과매도 상태를 판별하는 데 사용되는 보조지표이다.
RSI는 가격의 상대적인 강도를 나타내며, 0과 100 사이의 값을 갖는다.

RSI는 1978년, J. Welles Wilder Jr.에 의해 소개되었다.
그는 처음 RSI를 자신의 책 "New Concepts in Technical Trading Systems"에서 제시했으며, 이후로 RSI는 기술 분석가들 사이에서 가장 널리 사용되는 지표 중 하나가 되었다.

Wilder는 RSI를 14일 주기로 사용하는 것을 제안했으나, 트레이더와 분석가는 다양한 시간 프레임에 따라 RSI를 조정하여 사용하기도 한다.

RSI는 다양한 금융 시장에서 주요한 기술 분석 도구로 인정받고 있으며, 주식, 선물, 외환 등의 다양한 마켓에 적용 가능한 범용적인 지표이다.


✔ RSI Signal

RSI만으로는 가끔씩 확실한 거래 신호를 얻기 어려울 수 있다.
이를 보완하기 위해 RSI Signal 개념이 도입되었다.
RSI Signal은 RSI의 이동평균선을 통해 생성된다.
이 선은 RSI 지표와 함께 차트에 표시되어 RSI 값의 변화와 흐름을 좀 더 명확하게 확인할 수 있게 해준다.
일반적으로 9일 이동평균으로 계산된다.


RSI/RSI Signal

RSI/Signal 계산 방법

✔ RSI 계산

1. 평균 이익(Average Gain)평균 손실(Average Loss)을 계산한다.
이 값들은 주어진 기간동안의 이익과 손실의 평균값이다.
14일 동안의 RSI를 계산할 때, 14일 동안의 상승분과 하락분의 평균을 계산한다.

💠 \(\text{Average Gain}= \frac{\text{최근 13일간의 이익 합}+\text{오늘의 이익}}{14} \)

💠 \(\text{Average Loss}= \frac{\text{최근 13일간의 손실 합}+\text{오늘의 손실}}{14} \)

이익은 주가가 상승한 날의 상승폭을, 손실은 주가가 하락한 날의 하락폭을 말하며, 이익 또는 손실이 없는 날은 0으로 계산한다.


2. 다음으로, 상대강도(RS, Relative Strength)를 계산해야한다.
RS는 평균 이익을 평균 손실로 나눈 값이다.

💠 \(\text{RS} = \frac{\text{Average Gain}}{\text{Average Loss}} \)


3. 마지막으로 RSI를 계산한다.
이는 상대 강도를 기반으로 0에서 100 사이의 값으로 변환한 것이다.

💠 \( RSI = 100 - \frac{100}{1 + RS} \)

🚀 \( \text{RSI} = \frac{\text{n일간의 상승폭의 합}}{\text{n일간의 상승폭의 합+n일간의 하락폭의 합}}\times100\)


✔ RSI Signal 계산

RSI Signal 라인은 일반적으로 RSI의 이동 평균을 사용하여 계산된다.
주로 사용하는 이동 평균 기간은 9일이다.

💠 \(\text{RSI Signal} = \text{최근 9일간의 RSI 값의 평균}\)

RSI 설정 방법 / 수식관리자로 Signal 추가

HTS와 MTS에서 RSI를 적용하는 방법에 대해서 알아보자.
여기서는 키움증권의 영웅문 기준으로만 확인해보겠다.

✔ 영웅문 HTS RSI 적용

영웅문 HTS에서는 종합차트에서 메뉴항목검색에 RSI를 검색하면 '[기] RSI'가 검색된다.
해당 항목을 더블클릭하면 차트에 RSI가 추가된다.


영웅문 HTS RSI 적용


근데 위 사진으로 보면 RSI 시그널은 표시되지 않는다.
영웅문 HTS에서 RSI 시그널은 수식관리자를 통해 추가해야만 한다.


✔ 영웅문 HTS RSI & RSI Signal 적용

1. 수식관리자 메뉴 열기

종합차트에서 마우스 우클릭을 하면 수식관리자 메뉴를 확인할 수 있다.


영웅문 수식관리자


수식관리자에서 '새로 만들기'를 클릭해준다.


수식관리자 새로만들기


2. 수식 입력

지표명은 원하는 이름으로 정하고 아래 이미지처럼 수식 이름과 수식을 작성해준다.

[수식1]
이름 : RSI %P1%
수식 : RSI(P1)

[수식2]
이름 : Signal %P2%
수식 : eavg(RSI(P1), P2)


수식1, 수식2에 수식 이름 및 수식 작성


여기서 이름에 %P1%, %P2%는 해당 수식을 차트에 표시할 때 입력된 수치가 차트에 함께 표시하게 해주는 방법이다.


수식 이름 규칙



3. 지표 조건 설정

지표 조건 설정 탭으로 가서 P1에는 14, P2는 9로 설정해준다.
여기서 P1은 RSI의 기간을 설정하는 것이며, P2는 RSI Signal의 이동평균 기준 일을 설정하는 것이다.
이 수치는 자유롭게 변경 가능하다.


지표 조건 설정


4. 라인 설정

라인 설정탭에 가서 원하는 색상을 설정해준다.
여기서 RSI 라인에 과열, 침체 부분에 기준값을 입력해준다.
기준값이 70 이상이면 과매수, 30이면 과매도인 것을 표시하기 위함이다.


RSI 기준값 설정


5. 기준선 설정

기준선 설정은 30과 70을 추가해주고, 라인 설정 컬러 및 너비는 원하는 스타일로 지정해준다.
값을 입력 후에 '+ 기준선 추가' 버튼을 클릭해주면 된다.
이 기준선은 이제 RSI가 차트에 표시될 때 30과 70에 수평선을 추가해준다.
이 수평선을 통해 RSI가 30 이하인지, 70 이상인지 확인하기 편하다.


기준선 설정


6. 작업 저장

모든 설정을 완료한 후에 '작업저장'을 클릭한다.
저장을 하기 전에 '수식검증'을 통해 수식에 틀린 것은 없는지 검토도 가능하다.


작업 저장


7. 적용

종합차트 좌측에 '사용자지표' 항목에 저장한 RSI Signal을 확인해볼 수 있다.
해당 지표를 더블 클릭하면 지표가 추가된다.


RSI Signal 추가


사용자지표를 더블클릭하면 P1, P2도 변경 가능하다.


RSI 설정



✔ 영웅문 MTS RSI 적용

영웅문 MTS에서는 차트 화면에서 설정(톱니바퀴) 버튼을 클릭한다.
그리고서 지표설정 검색하는 입력칸에 RSI를 검색하고 검색 결과에서 RSI를 선택한다.
그리고서 보조지표 항목의 RSI 좌측에 체크 표시를 활성화하면 차트에 적용된다.


영웅문 MTS RSI 적용


영웅문 MTS RSI 적용


HTS와는 다르게 시그널이 함께 적용되어 있다.


영웅문 MTS RSI 적용


RSI의 설정방법은 보조지표-RSI 항목에서 우측에 설정(톱니바퀴)을 클릭하면 지표 설정이 가능하다.


영웅문 MTS RSI 설정


지표조건설정에서 RSI의 기간, 시그널의 이동평균 일수를 변경할 수 있으며,
라인설정에서 차트의 스타일을 설정할 수 있다.


영웅문 MTS RSI 설정

RSI 매매 활용법

RSI를 활용하는 매매 방법을 간단하게 소개하고자 한다.
RSI 다이버전스도 알아두면 좋지만 이 내용은 다음에 따로 포스트하고자 한다.


✔ 과매수와 과매도 판별

  • RSI가 30 이하일 경우
    과매도 상태로 간주되며, 가격이 과도하게 하락했다는 신호로 해석될 수 있다
    즉, 가격이 상승할 가능성이 있으므로, RSI가 30 부근일 때 매수한다.

  • RSI가 70 이상일 경우
    과매수 상태로 간주되며, 이는 가격이 과도하게 상승했다는 신호로 해석될 수 있다.
    즉, 가격이 하락할 가능성이 있으므로, RSI가 70 부근일 때 매도한다.

RSI 과매도/과매수


✔ 센터라인 크로스

  • RSI가 50선을 상향 돌파할 경우
    강세의 시작을 의미할 수 있으므로, RSI가 50을 상향 돌파시 매수로 접근해볼 수 있다.
  • RSI가 50선을 하향 돌파할 경우
    약세의 시작을 의미할 수 있으므로, RSI가 50을 향해 접근할 때 매도로 접근해볼 수 있다.

RSI 센터라인 크로스


✔ RSI/RSI Signal 크로스

  • 상향 크로스
    RSI가 RSI Signal 아래에서 위로 돌파할 때이다.
    이는 종종 가격의 상승세가 시작되거나 강화될 가능성이 있다는 신호로 해석된다.
    즉, 매수 신호로 간주될 수 있다.

  • 하향 크로스
    RSI가 RSI Signal 위에서 아래로 돌파할 때이다.
    이는 종종 가격의 하락세가 시작되거나 강화될 가능성이 있다는 신호로 해석된다.
    즉, 매도 신호로 간주될 수 있다.

RSI / RSI Signal 크로스

RSI의 한계

RSI는 명확한 지표 범위 (0~100)를 가지고 있어 해석이 상대적으로 간단하고, 주가의 추세를 판단하는 데 도움을 주는 좋은 지표이다. 하지만 RSI 또한 다른 보조지표처럼 주의할 점이 몇가지 존재한다.


  • 과매수/과매도 지속
    RSI가 70 이상(과매수) 또는 30 이하(과매도)의 영역에 들어가면 시장의 반전을 예상할 수 있지만, 강한 추세에서는 RSI가 오랜 시간 동안 과매수 또는 과매도 영역에 머무를 수 있다. 이로 인해 너무 일찍 거래를 실행할 수 있어, 잘못된 진입 또는 청산 시점을 가져올 수 있다.

  • 다이버전스의 오해
    가격과 RSI 사이의 다이버전스는 잠재적인 가격 변동의 징후로 해석되곤 한다.
    그러나 모든 다이버전스가 실제로 가격의 반전을 의미하는 것은 아니다.
    때로는 가격이 계속해서 움직일 수 있다.

  • 중립 영역의 불명확성
    RSI가 30과 70 사이에 있을 때, 시장의 방향성이 불분명해질 수 있다.
    이 영역에서의 RSI는 명확한 거래 신호를 제공하지 않을 수 있어, 트레이더들에게 혼란을 줄 수 있다.

  • 시장의 복잡성 무시
    RSI는 과거 가격 데이터만을 기반으로 계산된다.
    따라서 기본적인 요소, 뉴스 이벤트, 중앙 은행의 결정 등 시장에 영향을 줄 수 있는 다양한 요소들을 고려하지 않는다.
Python으로 RSI 계산

Python을 사용해서 RSI를 계산하고 차트를 생성해보겠다.
계산을 위해 pandas 라이브러리를 사용했으며, 차트는 matplotlib를 사용했다.
샘플 데이터는 아래와 같으며, 각 코드에 대한 자세한 설명은 아래 포스트를 참고 부탁드린다.


샘플 데이터



✔ Python으로 RSI 계산/차트 전체 코드

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.dates import DateFormatter

df = pd.read_csv('../TEST.csv')
df['date'] = pd.to_datetime(df['date'])

# RSI 계산
delta = df['close'].diff()
gains = delta.where(delta > 0, 0)
losses = -delta.where(delta < 0, 0)
avg_gain = gains.rolling(window=14).mean()
avg_loss = losses.rolling(window=14).mean()
rs = avg_gain / avg_loss
df['RSI'] = 100 - (100 / (1 + rs))

# RSI Signal 계산
df['RSI_Signal'] = df['RSI'].rolling(window=9).mean()

# 차트 생성
fig, ax = plt.subplots(2, 1, figsize=(14, 10), sharex=True)

# 종가 차트 생성
ax[0].plot(df['date'], df['close'], label='Close', color='lightgreen')
ax[0].set_title('Close Price')
ax[0].legend()

# RSI/RSI Signal 차트 생성
ax[1].plot(df['date'], df['RSI'], label='RSI', color='sandybrown')
ax[1].plot(df['date'], df['RSI_Signal'], label='RSI Signal', color='plum')

# 과매도/과매수 구간 배경색 설정
ax[1].fill_between(df['date'], 70, df['RSI'], where=(df['RSI'] >= 70), color='lightcoral', alpha=0.4)
ax[1].fill_between(df['date'], 30, df['RSI'], where=(df['RSI'] <= 30), color='lightblue', alpha=0.4)

ax[1].axhline(0, linestyle='--', alpha=0.5, color='gray')
ax[1].axhline(20, linestyle='--', alpha=0.5, color='orange')
ax[1].axhline(30, linestyle='--', alpha=0.5, color='green')
ax[1].axhline(70, linestyle='--', alpha=0.5, color='green')
ax[1].axhline(80, linestyle='--', alpha=0.5, color='orange')
ax[1].axhline(100, linestyle='--', alpha=0.5, color='gray')
ax[1].set_title('RSI Value')
ax[1].legend()

# x-axis 월 단위로 변경
months = mdates.MonthLocator()
date_fmt = DateFormatter("%Y-%m")
ax[1].xaxis.set_major_locator(months)
ax[1].xaxis.set_major_formatter(date_fmt)

plt.tight_layout()
plt.show()

해당 코드를 실행하면 아래와 같은 차트를 생성한다.


Python으로 RSI 차트 구현

RSI는 과매수나 과매도 상태를 판단하는 데 도움이 되는 유용한 기술적 지표이다.
그러나 RSI만을 독립적으로 사용하는 것은 위험할 수 있다.
다른 기술적 지표, 패턴, 기본 분석과의 조합을 통해 더욱 객관적이고 전반적인 거래 결정을 내리는 것이 중요하다.

커피 한 잔으로
저를 응원해주세요!
반응형

loading