업데이트: 2026년 11월 3일. RSI의 정의, 계산, 70/30 구간과 다이버전스를 해석할 때의 조건을 다룹니다. 차트와 숫자는 가상 데이터로 만든 설명용 예시이며, 매매 성과를 측정한 결과가 아닙니다.
RSI는 최근 상승폭과 하락폭의 균형을 0–100으로 바꾼다
RSI(Relative Strength Index, 상대강도지수)는 J. 웰스 와일더(J. Welles Wilder Jr.)가 1978년 저서 New Concepts in Technical Trading Systems에서 소개한 모멘텀 지표입니다. 일정 기간의 평균 상승폭과 평균 하락폭을 비교해 0에서 100 사이 값으로 표시합니다. 이름은 비슷하지만 한 종목을 지수와 비교하는 “상대강도(relative strength comparison)“와는 다른 지표입니다.
직관은 단순합니다. 최근 상승폭이 하락폭보다 크면 RSI가 50 위로, 반대면 50 아래로 갑니다. 하락이 전혀 없으면 100, 상승이 전혀 없으면 0입니다. 오른 날의 개수가 아니라 오르내린 크기를 평균한다는 점이 중요합니다.
첫 평균은 단순평균, 이후는 와일더 평활이다
StockCharts ChartSchool이 정리한 계산 순서는 다음과 같습니다. 기본 기간은 와일더가 제안한 14입니다. 하락폭은 양수로 바꿔 계산합니다.
첫 평균 상승폭 = 처음 14개 변화 중 상승폭 합 / 14
첫 평균 하락폭 = 처음 14개 변화 중 하락폭 합 / 14
이후 평균 = (직전 평균 × 13 + 현재 상승폭 또는 하락폭) / 14
RS = 평균 상승폭 / 평균 하락폭
RSI = 100 − 100 / (1 + RS)
이 평활은 α = 1/14인 지수평균이라 과거 값의 영향이 오래 남습니다. 계산을 시작한 시점과 사용한 과거 데이터 길이에 따라 같은 날의 RSI가 플랫폼마다 조금 다를 수 있습니다. 백테스트에서는 실거래 시점에 실제로 가지고 있던 데이터 길이로 다시 계산해야 합니다.
아래 코드는 기간 3의 작은 예에서 손으로 확인할 수 있는 값을 검증합니다. 변화가 +1, −0.5, +1이면 첫 평균 상승폭은 2/3, 평균 하락폭은 1/6이고 RS는 4, RSI는 80입니다.
def wilder_rsi(closes, n=14):
"""Wilder RSI. Returns a list aligned with closes (None until n changes exist)."""
changes = [b - a for a, b in zip(closes, closes[1:])]
out = [None] * len(closes)
if len(changes) < n:
return out
avg_gain = sum(max(c, 0) for c in changes[:n]) / n
avg_loss = sum(max(-c, 0) for c in changes[:n]) / n
def to_rsi(gain, loss):
if loss == 0:
return 100.0 if gain > 0 else 50.0
return 100 - 100 / (1 + gain / loss)
out[n] = to_rsi(avg_gain, avg_loss)
for i in range(n, len(changes)):
c = changes[i]
avg_gain = (avg_gain * (n - 1) + max(c, 0)) / n
avg_loss = (avg_loss * (n - 1) + max(-c, 0)) / n
out[i + 1] = to_rsi(avg_gain, avg_loss)
return out
closes = [10, 11, 10.5, 11.5, 12, 11] # changes: +1, -0.5, +1, +0.5, -1
r = wilder_rsi(closes, n=3)
assert abs(r[3] - 80.0) < 1e-9 # gain 2/3, loss 1/6 -> RS 4
assert abs(r[4] - 100 * 11 / 13) < 1e-9 # gain 11/18, loss 1/9 -> RS 5.5
assert abs(r[5] - 50.0) < 1e-9 # both averages 11/27 -> RS 1
assert wilder_rsi(list(range(1, 31)))[-1] == 100.0 # no losses at all
assert wilder_rsi(list(range(30, 0, -1)))[-1] == 0.0 # no gains at all
상승도 하락도 없는 구간은 RS가 정의되지 않습니다. 위 코드는 이 경우를 50으로 처리했지만, 플랫폼마다 처리 방식이 다를 수 있으므로 비교할 때 확인해야 합니다.
70과 30은 매매 명령이 아니라 관찰 구간이다
와일더는 70 위를 과매수, 30 아래를 과매도로 보았습니다. 이것은 최근 상승이나 하락이 한쪽으로 치우쳤다는 기술일 뿐, 가격이 곧 반대로 움직인다는 뜻은 아닙니다. 강한 상승 추세에서는 RSI가 70 위나 그 근처에 오래 머물 수 있고, 강한 하락 추세에서는 30 아래에 오래 머물 수 있습니다.
| RSI 구간 | 와일더의 명칭 | 이 글의 해석 |
|---|---|---|
| 70 이상 | 과매수 | 최근 상승폭이 하락폭보다 크게 우세함 |
| 30–70 | 중립 | 한쪽으로 크게 치우치지 않음 |
| 30 이하 | 과매도 | 최근 하락폭이 상승폭보다 크게 우세함 |
ChartSchool은 이 기준을 80/20처럼 조정할 수 있다고 설명합니다. 또 콘스턴스 브라운(Constance Brown)은 상승장에서 RSI가 대체로 40–90 범위에서, 하락장에서는 10–60 범위에서 움직이는 경향을 관찰했습니다. 같은 70이라도 시장 국면에 따라 의미가 달라진다는 뜻입니다. 이 범위는 관찰된 경향이지 고정된 법칙이 아니며, 자산과 기간별로 다시 확인해야 합니다.
“30 아래로 내려갔다가 다시 30 위로 올라올 때”처럼 규칙을 쓰면 해석은 분명해지지만, 그 규칙이 비용을 넘는 성과를 내는지는 별도의 검증 문제입니다.
다이버전스와 실패 스윙은 조건부 경고다
와일더가 설명한 RSI 신호에는 다이버전스와 실패 스윙이 있습니다.
다이버전스
가격은 더 낮은 저점을 만들었는데 RSI는 더 높은 저점을 만들면 상승 다이버전스, 가격은 더 높은 고점인데 RSI는 더 낮은 고점이면 하락 다이버전스라고 부릅니다. 최근 움직임의 힘이 이전보다 약해졌다는 관찰입니다.
다만 ChartSchool은 강한 추세에서 다이버전스가 오해를 낳는다고 경고합니다. 강한 상승 추세에서도 하락 다이버전스는 여러 번 나타날 수 있고, 그동안 가격은 계속 오를 수 있습니다. 앤드루 카드웰(Andrew Cardwell)은 하락 다이버전스를 오히려 상승장에서 흔한 현상으로 보았습니다. 다이버전스는 “추세 전환이 임박했다”가 아니라 “모멘텀이 둔화됐다”는 정도로 읽는 편이 정확합니다.
실패 스윙
실패 스윙은 가격과 비교하지 않고 RSI만 봅니다. 상승 실패 스윙은 RSI가 30 아래로 내려갔다가 30 위로 돌아오고, 다시 밀렸을 때 30 위에서 버틴 뒤 직전 RSI 고점을 넘는 형태입니다. 하락 실패 스윙은 70을 기준으로 이를 뒤집은 형태입니다. 정의가 명확해 규칙으로 옮기기 쉽지만, 그 자체로 높은 적중률을 보장하는 근거는 이 글의 출처에 없습니다.
기간과 시간프레임은 함께 검증한다
기간을 줄이면 RSI가 더 자주 70과 30에 닿고, 늘리면 덜 닿습니다. 기간 7과 기간 21의 70은 같은 정도의 과열을 뜻하지 않습니다. 기간을 바꾸면 70/30 같은 기준선도 함께 다시 정해야 합니다.
시간프레임도 같은 문제입니다. 1시간봉 RSI와 일봉 RSI는 서로 다른 기간의 움직임을 요약합니다. 큰 시간프레임으로 국면을 보고 작은 시간프레임으로 진입 시점을 정하는 방식은 흔히 쓰이지만, 그 조합이 유효한지는 같은 자산·비용 조건에서 따로 확인해야 합니다. 기간·기준선·시간프레임 조합을 여러 개 시험했다면 과적합 방지 칼럼의 워크포워드 검증으로 선택 과정까지 다시 검증합니다.
다른 지표와 함께 쓸 때는 규칙을 먼저 고정한다
RSI를 다른 지표와 함께 보면 판단이 정교해진다는 설명이 많지만, 조건을 겹친다고 신뢰도가 자동으로 올라가지는 않습니다. 같은 가격에서 계산한 모멘텀 지표 두 개는 비슷한 정보를 반복할 가능성이 큽니다. 볼린저밴드 창안자 존 볼린저도 서로 직접 연관되지 않은 지표를 조합하라고 권합니다. RSI와 MACD는 모두 가격 모멘텀에서 나오므로, 두 신호가 동시에 나온 것을 독립된 두 증거로 셀 수 없습니다.
조합을 쓰려면 다음 순서를 따릅니다.
- 진입·청산 조건을 숫자로 먼저 고정합니다. 예: “RSI(14)가 30 아래에서 30 위로 올라오고, 종가가 20일 이동평균 위에 있을 때”.
- 조건을 추가할 때마다 신호 수가 얼마나 줄어드는지 기록합니다. 신호가 너무 적으면 결과는 우연에 크게 좌우됩니다.
- 거래 비용과 체결 지연을 넣은 뒤, 조건을 고르는 데 쓰지 않은 기간에서 다시 확인합니다.
자료와 적용 범위
- StockCharts ChartSchool: Relative Strength Index (RSI): 와일더(1978) 출처, 14기간 기본값, 첫 평균과 평활식, 70/30 기준, 다이버전스·실패 스윙, 브라운의 범위 이동과 카드웰의 해석.
- Bollinger Band Rules: 서로 직접 연관되지 않은 지표를 조합하라는 볼린저의 원칙.
- Park & Irwin (2007), “What Do We Know About the Profitability of Technical Analysis?”: 기술적 규칙 연구에서 데이터 스누핑과 사후 규칙 선택 문제를 정리한 문헌 검토.
- 이 글은 RSI의 계산과 해석 조건을 설명합니다. 특정 RSI 규칙이 수익을 낸다거나 다이버전스가 반전을 예측한다고 주장하지 않으며, 투자 자문이 아닙니다.


