RSI 30 이하 과매도 종목, 국내주식에서 찾는 3가지 방법
RSI가 30 아래로 내려간 국내 상장 종목을 매일 찾아내는 방법을 HTS 조건검색, 엑셀, 스크리너 순으로 비교합니다. 그리고 과매도가 곧 매수 신호가 아닌 이유까지.
“RSI 30 이하는 과매도”라는 문장은 어디서나 볼 수 있습니다. 그런데 막상 오늘 RSI가 30 아래로 내려간 국내 종목이 무엇인지 알아내려고 하면 방법을 설명해 주는 글이 거의 없습니다.
검색해 보면 상위에 뜨는 건 대부분 해외 FX 브로커가 번역해 놓은 일반론이거나, 코인 차트 이야기입니다. 코스피·코스닥 2,700여 개 종목에서 실제로 조건에 맞는 종목을 뽑는 방법은 따로 알아내야 합니다.
이 글에서는 세 가지 방법을 실제 절차와 함께 비교하고, 마지막에 왜 “RSI 30 이하 = 매수”가 위험한 단축 사고인지를 짚습니다.
RSI가 정확히 무엇을 측정하는가
방법으로 넘어가기 전에 한 문단만 정리하겠습니다. 이 부분을 건너뛰면 뒤에 나오는 함정을 이해할 수 없습니다.
RSI(Relative Strength Index)는 J. Welles Wilder가 1978년에 제시한 지표로, 최근 N일 동안 오른 날의 상승폭 평균과 내린 날의 하락폭 평균의 비율입니다. 기본값은 14일입니다.
RS = (N일간 상승분 평균) / (N일간 하락분 평균)
RSI = 100 - (100 / (1 + RS))
여기서 중요한 건 RSI가 가격의 절대 수준이 아니라 최근 움직임의 성격을 잰다는 점입니다. RSI 25는 “이 주식이 싸다”는 뜻이 아니라 “최근 14일 동안 내린 날의 하락폭이 오른 날의 상승폭을 압도했다”는 뜻입니다. 싼 게 아니라 급하게 떨어졌다는 관측입니다.
“급하게 떨어졌다”에서 “그러니 반등한다”로 넘어가는 건 논리 비약입니다. 급하게 떨어진 이유가 실적 쇼크나 상장폐지 위험이면 RSI는 계속 20대에 머물면서 주가는 더 빠집니다. 이걸 실무에서는 “과매도 구간에 눌러앉는다”고 표현합니다.
방법 1 — 증권사 HTS 조건검색식
가장 정통적인 방법입니다. 키움증권 기준으로 설명하지만 다른 증권사도 구조는 비슷합니다.
절차
- HTS에서 조건검색 화면을 엽니다 (키움 영웅문 기준 화면번호 0150).
- 좌측 지표 트리에서
기술적분석 → 지표순위분석 → RSI또는기술적분석 → 모멘텀지표 → RSI를 찾습니다. - 기간을 14, 기준선을 30으로 설정하고 “RSI(14) 30 이하” 조건을 추가합니다.
- 여기서 끝내면 안 됩니다. 아래 필터를 반드시 함께 겁니다.
- 거래대금 하한 (예: 20일 평균 거래대금 10억 원 이상) — 없으면 체결도 안 되는 종목이 잔뜩 나옵니다
- 관리종목·투자경고 제외
- 우선주 제외 (원하는 경우)
- 검색 후 조건식을 저장하고, 실시간 검색으로 등록합니다.
장점과 단점
장점: 무료이고, 실시간이며, 조건을 무한히 조합할 수 있습니다. 검색된 종목을 바로 주문 화면으로 넘길 수도 있습니다.
단점: 조건검색식 자체를 짜는 게 진입장벽입니다. 실제로 크몽·탈잉에서 조건검색식 강의가 유료로 팔리고 있다는 사실이 이걸 증명합니다. 그리고 결정적으로 과거 검증이 안 됩니다. “이 조건이 지난 3년간 몇 번 맞았나”를 HTS 조건검색만으로는 알 수 없습니다.
방법 2 — 데이터를 직접 받아서 계산
개발자거나 엑셀에 익숙하다면 이 방법이 가장 자유롭습니다.
파이썬 예시
import pandas as pd
def rsi(close: pd.Series, period: int = 14) -> pd.Series:
"""Wilder 방식 RSI. 단순이동평균이 아니라 지수평활(alpha=1/period)을 씁니다."""
delta = close.diff()
gain = delta.clip(lower=0)
loss = -delta.clip(upper=0)
avg_gain = gain.ewm(alpha=1 / period, adjust=False).mean()
avg_loss = loss.ewm(alpha=1 / period, adjust=False).mean()
rs = avg_gain / avg_loss
return 100 - (100 / (1 + rs))
# 종목별 종가 데이터프레임(행=날짜, 열=종목코드)이 있다고 가정
today_rsi = prices.apply(rsi).iloc[-1]
oversold = today_rsi[today_rsi <= 30].sort_values()
print(oversold.head(20))
RSI를 단순이동평균(rolling(14).mean())으로 계산하는 코드가 인터넷에 많이 돌아다닙니다. Wilder의 원래 정의는 지수평활이고, HTS와 대부분의 차트 서비스도 지수평활을 씁니다. 단순이동평균으로 계산하면 증권사 화면의 숫자와 값이 달라져서 나중에 “왜 안 맞지?”로 시간을 버리게 됩니다.
데이터는 어디서
- pykrx — 한국거래소 데이터를 파이썬으로 가져오는 오픈소스 라이브러리
- 증권사 OpenAPI — 한국투자증권 KIS Developers, 키움 OpenAPI+ 등. 계좌와 앱키 발급이 필요합니다
- FinanceDataReader — 국내외 시세를 폭넓게 지원
장점: 완전한 자유. 백테스트까지 이어서 할 수 있습니다. 단점: 데이터 정합성 관리가 생각보다 큰 일입니다. 액면분할·병합 처리, 수정주가 반영, 상장폐지 종목 처리, 거래정지일 처리를 직접 다 해야 합니다. 이걸 대충 하면 백테스트 결과가 통째로 틀립니다.
방법 3 — 스크리너 서비스
조건검색식을 짜지도, 데이터 파이프라인을 만들지도 않고 결과만 보는 방법입니다.
무료로 쓸 수 있는 것들:
| 서비스 | 국내주식 | 기술적 지표 | 비고 |
|---|---|---|---|
| TradingView | 지원 | RSI·MACD 등 다수 | 무료 플랜은 저장 슬롯·알림 제한 |
| Investing.com | 지원 | 일부 | 지표 조합 자유도 낮음 |
| FnGuide 스크리너 | 지원 | 제한적 | 재무 지표 중심 |
| 한국경제 스크리너 | 지원 | 제한적 | 재무 지표 중심 |
| 토스증권 골라보기 | 지원 | 매우 제한적 | 초보자용, 간편함이 장점 |
국내 서비스는 대체로 재무 지표(PER·PBR·ROE) 중심이고, 기술적 지표 스크리닝은 약합니다. 반대로 TradingView는 기술적 지표는 강한데 국내 종목 데이터의 세부 정합성과 한글 종목 정보에서 아쉬운 부분이 있습니다.
그래서 RSI 30 이하를 사면 되나
여기가 이 글의 핵심입니다. 결론부터 말하면 그것만으로는 안 됩니다.
RSI 30 이하 조건만 걸고 기계적으로 매수하는 전략에는 구조적인 문제가 세 가지 있습니다.
1) 추세장에서 신호가 무력화됩니다
강한 하락 추세에서 RSI는 20~30 구간에 몇 주씩 머뭅니다. Wilder 본인도 RSI를 추세가 없는 구간에서 쓰는 지표로 설계했습니다. 상승 추세에서는 RSI가 40 아래로 잘 안 내려가고, 하락 추세에서는 60 위로 잘 안 올라갑니다. 이걸 모르면 “왜 과매도인데 계속 빠지지”라는 상황을 반복하게 됩니다.
2) 하락에는 이유가 있습니다
RSI가 25까지 빠진 종목 리스트를 뽑아보면 상당수가 다음 중 하나입니다.
- 분기 실적 쇼크 직후
- 유상증자·전환사채 발행 공시 직후
- 관리종목 지정 또는 감사의견 이슈
- 업종 전체의 구조적 침체
이런 종목은 RSI가 낮아서가 아니라 낮아질 만해서 낮은 겁니다. 그래서 스크리닝 조건에 재무·공시 필터를 함께 거는 게 중요합니다.
3) 표본 조건 없이는 승률을 말할 수 없습니다
인터넷에는 “RSI 과매도 매수 승률 70%” 같은 숫자가 떠다닙니다. 그런데 이 숫자는 다음을 밝히지 않으면 무의미합니다.
- 대상 종목군 (전 종목? 코스피200? 거래대금 상위?)
- 기간 (강세장만 담았는지)
- 청산 규칙 (며칠 후? 목표수익률? 손절선?)
- 상장폐지 종목 포함 여부 (생존 편향)
- 거래비용 반영 여부
조건이 없는 승률 숫자는 데이터가 아니라 광고 문구입니다.
실전에서 쓸 만한 조건 조합
RSI 단독 대신 조합해서 쓰는 방향을 권합니다. 아래는 자주 쓰이는 형태입니다.
- RSI + 추세 필터 — RSI(14) ≤ 30 그리고 종가 > 200일 이동평균. 장기 상승 추세 안에서의 일시적 눌림만 잡습니다.
- RSI + 다이버전스 — 주가는 저점을 낮췄는데 RSI는 저점을 높인 경우. 단순 과매도보다 신뢰도가 높다고 알려져 있습니다.
- RSI + 거래량 — RSI ≤ 30 도달일의 거래량이 20일 평균의 2배 이상. 투매 클라이맥스를 포착하려는 접근입니다.
- RSI + 유동성/재무 필터 — 거래대금 하한, 관리종목 제외, 자본잠식 제외.
이 각각이 실제로 얼마나 효과가 있는지는 직접 검증해야 알 수 있습니다. 남이 계산한 승률을 믿지 말고, 조건을 명확히 정의한 다음 같은 기준으로 비교해 보세요.
정리
- RSI 30 이하는 “싸다”가 아니라 “급하게 떨어졌다”는 관측입니다.
- 국내 종목에서 조건에 맞는 종목을 찾는 방법은 HTS 조건검색 / 직접 계산 / 스크리너 세 가지이고, 각각 자유도와 편의성이 다릅니다.
- 어떤 방법을 쓰든 거래대금·관리종목 필터는 필수입니다. 이게 없으면 결과 목록의 절반이 쓸 수 없는 종목입니다.
- RSI 단독보다 추세·거래량·다이버전스와 조합하는 편이 낫고, 그 효과는 조건을 밝힌 검증으로 확인해야 합니다.
다음 글에서는 여기서 언급한 RSI 다이버전스를 상승·하락·히든 세 종류로 나눠서, 실제 차트에서 어떻게 구분하는지 다루겠습니다.