RSI + 스토캐스틱 결합 매도 전략 — 과열장 매도 타점 5가지 패턴 + 코드
상승장에서 RSI가 80~90대에 한 달 내내 고착되어 있는데 주가는 계속 올라갑니다. "이게 RSI 과열인데 왜 안 빠지지?" 답답하셨던 분이 많을 겁니다. 이 글은 과열장에서 매도 타점을 잡지 못하는 문제를 RSI + 스토캐스틱 결합 전략으로 해결하는 방법을 정리합니다.
5가지 매도 시그널 패턴 + Python·Pine Script 코드 예시 + 실전 적용 시 주의점까지. 백테스트만 잘 나오면 안 되니, 실거래에서 작동시키는 방법도 함께 다룹니다.
왜 RSI 단독으로는 매도 타점이 안 잡히는가
RSI(Relative Strength Index)는 모멘텀의 강도를 측정합니다. 0~100 사이 값으로 표시되고, 일반적으로 70 이상을 과열, 30 이하를 과매도로 봅니다. 문제는 강한 상승장에서 RSI가 80 이상에 며칠~몇 주 동안 머무는 경우가 흔하다는 점입니다.
- RSI 80 = 과열 → "팔아야 하나?"
- 다음 날도 RSI 82 → "이미 늦었나? 그래도 더 갈 수도..."
- 일주일 후 RSI 88, 가격은 +15% → "진작에 팔았어야..."
- 한 달 후 RSI 75로 떨어지면서 가격 -8% → "이미 손해"
RSI는 "지금이 과열이다"는 정보만 줄 뿐, "언제 팔아야 하는지"는 알려주지 않습니다. 이 정보 부족을 메우는 게 스토캐스틱입니다.
스토캐스틱이 다른 점
스토캐스틱(Stochastic Oscillator)은 최근 N봉 구간에서 현재 가격이 어느 위치에 있는지를 측정합니다. 두 개의 선이 있습니다.
- %K (빠른 선) — 최근 N봉의 최고가-최저가 범위에서 현재 종가 위치 (0~100)
- %D (느린 선) — %K의 단순이동평균(보통 3)
스토캐스틱은 RSI보다 훨씬 빠르게 반응합니다. 며칠~몇 주에 걸쳐 80 이상을 유지하기 어렵고, 호가 변동에 따라 자주 진동합니다. 이게 RSI의 단점(반응 늦음)을 보완합니다.
왜 결합인가 — 두 지표의 역할 분담
두 지표를 결합하는 핵심 아이디어:
| 역할 | 지표 | 해석 |
|---|---|---|
| 전체 상황 (강도) | RSI | "지금 과열인가?" |
| 매매 타이밍 (세부) | 스토캐스틱 | "단기 고점이 찍혔는가?" |
RSI는 "큰 그림"을 보고, 스토캐스틱은 "타점"을 잡습니다. 둘 다 매도 신호일 때만 행동 → false signal이 크게 줄고, 매도 시점이 정밀해집니다.
핵심 직관: RSI 80+ (과열) 상태에서 스토캐스틱 %K가 %D를 위에서 아래로 통과(데드크로스)하면 → 강한 매도 신호. "이미 과열인데 단기 모멘텀까지 꺾였다"는 의미.
5가지 결합 매도 시그널 패턴
다음 5가지는 알고랩이 자동매매 의뢰받으면서 가장 자주 구현하는 결합 패턴입니다. 강도·신뢰도 순으로 정리.
1. 베이직 매도 — RSI 과열 + 스토 데드크로스
가장 단순하고 검증된 결합. 입문자도 바로 적용 가능.
AND %K(t-1) ≥ %D(t-1) AND %K(t) < %D(t)
해석: 과열 구간에서 %K가 %D를 위→아래로 뚫는 순간이 단기 고점 신호. 평균 신호 정확도는 50~60% 수준으로 단독 사용 시 false signal이 있지만, 다른 패턴의 기본 조건으로 자주 활용.
2. 강화 매도 — RSI 강한 과열 + 스토 둘 다 과매수에서 크로스
패턴 1보다 엄격한 조건. 신호 빈도 ↓, 정확도 ↑.
AND %K(t-1) ≥ 80 AND %D(t-1) ≥ 80
AND %K(t-1) ≥ %D(t-1) AND %K(t) < %D(t)
해석: RSI 80+ 강한 과열 + 스토 두 선 모두 과매수 영역(80+)에서 데드크로스 → 매우 강한 매도 후보. 한 달에 1~3회 정도의 드물지만 강한 신호. 알고랩 의뢰에서 "확실한 매도만 잡고 싶다"는 분에게 권장.
3. 다이버전스 — 가격 신고가 vs 지표 하락
가장 강력한 매도 신호. 단, 패턴 인식 난이도가 높음.
AND RSI(14): 이전 고점 대비 하락
AND %K: 이전 고점 대비 하락
해석: 가격은 신고가를 찍는데 RSI와 스토캐스틱은 이전 고점에 못 미침. 매수 모멘텀이 약해지고 있다는 의미. 반전이 임박했다는 강한 시그널이지만, 자동매매로 구현할 때 "고점 검출 로직"이 까다로움. 알고랩은 보통 ZigZag 인디케이터로 고점을 식별한 후 다이버전스를 자동 판정합니다.
4. 다중 시간프레임 — 큰 그림은 RSI, 타점은 스토
실전에서 가장 정밀한 패턴. 시간프레임을 명시적으로 분리.
AND 5분봉 %K가 %D 데드크로스 (정밀 타점)
해석: 일봉 RSI는 큰 그림(주봉 단위 과열)을 보고, 5분봉 스토캐스틱은 분 단위 타점을 잡음. 매수자와 매도자 간 단기 균형이 무너지는 시점을 정확히 포착할 수 있어 슬리피지 ↓. 장 중 자동매매에 가장 잘 어울리는 패턴.
5. 거래량 동반 매도 — 3중 결합
RSI + 스토 + 거래량까지 결합한 가장 보수적 패턴.
AND %K(t-1) ≥ %D(t-1) AND %K(t) < %D(t)
AND 거래량(t) ≥ 평균 거래량(20) × 1.5
해석: 매도 신호 발생 시점에 거래량이 평소 대비 1.5배 이상 → "기관/큰손이 실제로 팔고 있다"는 확신. 거래량 가짜 신호(허위 거래) 위험이 있으니 가급적 큰 거래소·메이저 종목에 적용.
Python 구현 — 5가지 패턴 통합 코드
실제 자동매매 봇에 들어가는 형태로 정리. NumPy + Pandas 기반.
import numpy as np
import pandas as pd
def compute_rsi(closes: pd.Series, period: int = 14) -> pd.Series:
delta = closes.diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 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 + 1e-10)
return 100 - 100 / (1 + rs)
def compute_stoch(highs, lows, closes, k_period=14, d_period=3):
hh = highs.rolling(k_period).max()
ll = lows.rolling(k_period).min()
k = (closes - ll) / (hh - ll + 1e-10) * 100
d = k.rolling(d_period).mean()
return k, d
def check_sell_signals(df: pd.DataFrame) -> dict:
"""df: columns = open, high, low, close, volume"""
rsi = compute_rsi(df["close"], 14)
k, d = compute_stoch(df["high"], df["low"], df["close"], 14, 3)
vol_avg = df["volume"].rolling(20).mean()
# 마지막 두 봉
rsi_now = rsi.iloc[-1]
k_now, k_prev = k.iloc[-1], k.iloc[-2]
d_now, d_prev = d.iloc[-1], d.iloc[-2]
vol_now = df["volume"].iloc[-1]
vol_ma = vol_avg.iloc[-1]
bear_cross = (k_prev >= d_prev) and (k_now < d_now)
signals = {}
# 패턴 1: 베이직
signals["pattern_1"] = (rsi_now >= 70) and bear_cross
# 패턴 2: 강화
signals["pattern_2"] = (
rsi_now >= 80 and k_prev >= 80 and d_prev >= 80 and bear_cross
)
# 패턴 5: 거래량 동반
signals["pattern_5"] = (
signals["pattern_1"] and vol_now >= vol_ma * 1.5
)
return signals
다이버전스(패턴 3)와 다중 시간프레임(패턴 4)은 상태 추적이 추가로 필요해 위 코드에 포함하지 않았습니다. 알고랩이 의뢰받으면 ZigZag 기반 고점 검출 + 시간프레임 동기화 로직을 추가합니다.
Pine Script (TradingView) 버전
차트에서 직접 확인하고 싶으면 TradingView에서 다음 코드 사용. 알림(웹훅)으로 자동매매 연동 가능.
//@version=5
indicator("RSI + Stochastic Sell Signal", overlay=true)
// 입력값
rsiLen = input.int(14, "RSI Length")
kLen = input.int(14, "Stoch %K Length")
dLen = input.int(3, "Stoch %D Length")
rsiOverbought = input.int(70, "RSI Overbought")
strongOverbought = input.int(80, "Strong Overbought")
// 지표 계산
rsiV = ta.rsi(close, rsiLen)
k = ta.stoch(close, high, low, kLen)
d = ta.sma(k, dLen)
bearCross = ta.crossunder(k, d)
// 패턴 1: 베이직
pattern1 = rsiV >= rsiOverbought and bearCross
// 패턴 2: 강화
pattern2 = rsiV >= strongOverbought and k[1] >= strongOverbought
and d[1] >= strongOverbought and bearCross
// 시각화
plotshape(pattern1, "베이직 매도", shape.triangledown,
location.abovebar, color.red, size=size.small)
plotshape(pattern2, "강화 매도", shape.labeldown,
location.abovebar, color.red, text="STRONG", size=size.normal)
// 웹훅 알림
alertcondition(pattern1, "Sell Signal", "RSI+Stoch SELL")
alertcondition(pattern2, "Strong Sell", "RSI+Stoch STRONG SELL")
이 인디케이터를 TradingView 차트에 추가하면 패턴 발생 시 빨간 화살표로 표시됩니다. Alert 설정 후 웹훅 URL을 입력하면 자동매매로 연동 가능 — 알고랩은 [TradingView 웹훅 가이드](/blog/tradingview-webhook-guide)에서 자세히 다뤘습니다.
실전 적용 시 주의점 — 백테스트 결과만 믿지 마세요
위 5가지 패턴을 백테스트해보면 결과가 예쁘게 나오는 경우가 많습니다. 그런데 실거래에서는 절반 이하로 떨어지는 게 일반적입니다. 이유는 알고랩 별도 글 [백테스트 +50%인데 실거래 -10% — 80%가 떨어지는 7가지 진짜 이유](/blog/backtest-vs-live-trading-gap)에서 다뤘으니, 여기서는 결합 전략 특유의 함정만 짚습니다.
1. 신호 발생 시점 vs 실제 매매 시점 차이
봉 종가 기준 신호가 나옵니다. 그런데 실거래는 다음 봉 시가에 체결 → 갭 손실 위험. 해법: 분봉으로 내려가서 신호 발생 후 즉시 매도 + 슬리피지 가드.
2. 스토캐스틱 잦은 false cross
%K %D는 자주 진동해 한 봉에서 크로스, 다음 봉에 역크로스 같은 노이즈가 흔합니다. 해법: 크로스 후 N봉(예: 3봉) 유지될 때 확정 신호로 처리.
3. 시장 체제 변화 — 강세장 vs 약세장
강세장(추세 강함) → RSI 80+ 한 달 지속 → 매도 신호 잦음 → 잦은 손실 약세장 → 매수 회피용으로 활용 (롱 진입 차단) 해법: 시장 체제 감지(예: 200일 이평선 위/아래) + 체제별 파라미터 다르게.
4. 자산별 파라미터 튜닝
같은 RSI 14 + 스토 14/3가 BTC·KOSPI·삼성전자 모두에서 같이 작동하지 않습니다. 해법: 자산별 백테스트 → 자산별 임계치(예: BTC는 RSI 75, 삼성은 70).
주의: 위 5가지 패턴 모두 "매도 후보" 신호이지 자동 매도 명령이 아닙니다. 실제 자동매매는 추가 필터(추세 확인, 거래량 확인, 슬리피지 가드, 리스크 한도)와 함께 동작해야 안전합니다.
한 사람이 두 지표를 동시에 보기 어려운 이유
위 패턴을 수동으로 적용하려면 다음을 동시에 봐야 합니다:
- 일봉 RSI 값 (현재가 + 추세)
- 분봉 스토캐스틱 %K %D 두 선
- 두 선 간 크로스 여부 (이전 봉 vs 현재 봉 비교)
- 거래량 평균과 현재 비교
- 이 모든 게 매도 후보 종목 N개에 대해 동시에
10종목을 추적한다면 동시 모니터링 항목이 50~80개. 사람은 불가능합니다. 자동매매로 만들면 두 지표 결합 조건이 충족되는 순간 자동으로 매도되어 시점·정확성 모두 잡힙니다.
알고랩이 의뢰받으면 표준으로 적용하는 것
- 5가지 패턴 중 의뢰자가 선호하는 1~3개를 선택
- 일봉/분봉 등 다중 시간프레임 동시 처리
- 크로스 확정 N봉 유지 (false signal 방지)
- 슬리피지 가드 (시장가 대신 호가 ±1 지정가)
- 리스크 한도 (일일 손실 -X% 도달 시 신호 무시)
- 텔레그램 신호 알림 (수동 매도 옵션) + 자동 매도 선택 가능
- 백테스트 리포트 (Walk-forward 포함)
마무리 — 결합이 단일보다 강한 이유
단일 지표는 "한 시각에서의 판단"입니다. 시장은 다차원이라 한 시각만으로는 매도 타점을 정확히 못 잡습니다. RSI(강도) + 스토캐스틱(타이밍) 결합은 "강도 있는 상황에서 단기 모멘텀 변화"를 잡는 다차원 신호이므로 정확도가 훨씬 높습니다.
같은 원리로 거래량·이평선·MACD·볼린저밴드 등도 결합 가능. 다만 결합이 많아질수록 신호 빈도가 줄고 디버깅이 복잡해지니, RSI + 스토 (+ 거래량) 정도가 자동매매에 가장 균형 잡힌 조합입니다.
알고랩 무료 전략 검토: RSI + 스토캐스틱 같은 결합 전략을 이미 운영 중이거나 검토 중이시면 알고랩이 무료로 코드/명세서 검토해드립니다. 빠진 안전장치·잘못된 파라미터·실거래 격차 위험을 짚어드립니다.
RSI + 스토캐스틱 자동매매 봇 제작
이 5가지 패턴 중 원하는 조합을 자동매매로 구현해드립니다. 백테스트 + 실거래 검증까지 포함.
지금 바로 무료 상담을 시작하세요.