AlgoLab Blog · 매매 전략

RSI + 스토캐스틱 결합 매도 전략 — 과열장 매도 타점 5가지 패턴 + 코드

가이드 2026-05-12 · 약 15분 읽기 · 알고랩 AlgoLab

상승장에서 RSI가 80~90대에 한 달 내내 고착되어 있는데 주가는 계속 올라갑니다. "이게 RSI 과열인데 왜 안 빠지지?" 답답하셨던 분이 많을 겁니다. 이 글은 과열장에서 매도 타점을 잡지 못하는 문제를 RSI + 스토캐스틱 결합 전략으로 해결하는 방법을 정리합니다.

5가지 매도 시그널 패턴 + Python·Pine Script 코드 예시 + 실전 적용 시 주의점까지. 백테스트만 잘 나오면 안 되니, 실거래에서 작동시키는 방법도 함께 다룹니다.

왜 RSI 단독으로는 매도 타점이 안 잡히는가

RSI(Relative Strength Index)는 모멘텀의 강도를 측정합니다. 0~100 사이 값으로 표시되고, 일반적으로 70 이상을 과열, 30 이하를 과매도로 봅니다. 문제는 강한 상승장에서 RSI가 80 이상에 며칠~몇 주 동안 머무는 경우가 흔하다는 점입니다.

RSI는 "지금이 과열이다"는 정보만 줄 뿐, "언제 팔아야 하는지"는 알려주지 않습니다. 이 정보 부족을 메우는 게 스토캐스틱입니다.

스토캐스틱이 다른 점

스토캐스틱(Stochastic Oscillator)은 최근 N봉 구간에서 현재 가격이 어느 위치에 있는지를 측정합니다. 두 개의 선이 있습니다.

스토캐스틱은 RSI보다 훨씬 빠르게 반응합니다. 며칠~몇 주에 걸쳐 80 이상을 유지하기 어렵고, 호가 변동에 따라 자주 진동합니다. 이게 RSI의 단점(반응 늦음)을 보완합니다.

왜 결합인가 — 두 지표의 역할 분담

두 지표를 결합하는 핵심 아이디어:

역할지표해석
전체 상황 (강도)RSI"지금 과열인가?"
매매 타이밍 (세부)스토캐스틱"단기 고점이 찍혔는가?"

RSI는 "큰 그림"을 보고, 스토캐스틱은 "타점"을 잡습니다. 둘 다 매도 신호일 때만 행동 → false signal이 크게 줄고, 매도 시점이 정밀해집니다.

핵심 직관: RSI 80+ (과열) 상태에서 스토캐스틱 %K가 %D를 위에서 아래로 통과(데드크로스)하면 → 강한 매도 신호. "이미 과열인데 단기 모멘텀까지 꺾였다"는 의미.

5가지 결합 매도 시그널 패턴

다음 5가지는 알고랩이 자동매매 의뢰받으면서 가장 자주 구현하는 결합 패턴입니다. 강도·신뢰도 순으로 정리.

PATTERN 1

1. 베이직 매도 — RSI 과열 + 스토 데드크로스

가장 단순하고 검증된 결합. 입문자도 바로 적용 가능.

RSI(14) ≥ 70
AND %K(t-1) ≥ %D(t-1) AND %K(t) < %D(t)

해석: 과열 구간에서 %K가 %D를 위→아래로 뚫는 순간이 단기 고점 신호. 평균 신호 정확도는 50~60% 수준으로 단독 사용 시 false signal이 있지만, 다른 패턴의 기본 조건으로 자주 활용.

PATTERN 2

2. 강화 매도 — RSI 강한 과열 + 스토 둘 다 과매수에서 크로스

패턴 1보다 엄격한 조건. 신호 빈도 ↓, 정확도 ↑.

RSI(14) ≥ 80
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회 정도의 드물지만 강한 신호. 알고랩 의뢰에서 "확실한 매도만 잡고 싶다"는 분에게 권장.

PATTERN 3

3. 다이버전스 — 가격 신고가 vs 지표 하락

가장 강력한 매도 신호. 단, 패턴 인식 난이도가 높음.

가격: 최근 N봉 최고가 갱신
AND RSI(14): 이전 고점 대비 하락
AND %K: 이전 고점 대비 하락

해석: 가격은 신고가를 찍는데 RSI와 스토캐스틱은 이전 고점에 못 미침. 매수 모멘텀이 약해지고 있다는 의미. 반전이 임박했다는 강한 시그널이지만, 자동매매로 구현할 때 "고점 검출 로직"이 까다로움. 알고랩은 보통 ZigZag 인디케이터로 고점을 식별한 후 다이버전스를 자동 판정합니다.

PATTERN 4

4. 다중 시간프레임 — 큰 그림은 RSI, 타점은 스토

실전에서 가장 정밀한 패턴. 시간프레임을 명시적으로 분리.

일봉 RSI(14) ≥ 70 (과열 확인)
AND 5분봉 %K가 %D 데드크로스 (정밀 타점)

해석: 일봉 RSI는 큰 그림(주봉 단위 과열)을 보고, 5분봉 스토캐스틱은 분 단위 타점을 잡음. 매수자와 매도자 간 단기 균형이 무너지는 시점을 정확히 포착할 수 있어 슬리피지 ↓. 장 중 자동매매에 가장 잘 어울리는 패턴.

PATTERN 5

5. 거래량 동반 매도 — 3중 결합

RSI + 스토 + 거래량까지 결합한 가장 보수적 패턴.

RSI(14) ≥ 70
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가지 패턴 모두 "매도 후보" 신호이지 자동 매도 명령이 아닙니다. 실제 자동매매는 추가 필터(추세 확인, 거래량 확인, 슬리피지 가드, 리스크 한도)와 함께 동작해야 안전합니다.

한 사람이 두 지표를 동시에 보기 어려운 이유

위 패턴을 수동으로 적용하려면 다음을 동시에 봐야 합니다:

10종목을 추적한다면 동시 모니터링 항목이 50~80개. 사람은 불가능합니다. 자동매매로 만들면 두 지표 결합 조건이 충족되는 순간 자동으로 매도되어 시점·정확성 모두 잡힙니다.

알고랩이 의뢰받으면 표준으로 적용하는 것

마무리 — 결합이 단일보다 강한 이유

단일 지표는 "한 시각에서의 판단"입니다. 시장은 다차원이라 한 시각만으로는 매도 타점을 정확히 못 잡습니다. RSI(강도) + 스토캐스틱(타이밍) 결합은 "강도 있는 상황에서 단기 모멘텀 변화"를 잡는 다차원 신호이므로 정확도가 훨씬 높습니다.

같은 원리로 거래량·이평선·MACD·볼린저밴드 등도 결합 가능. 다만 결합이 많아질수록 신호 빈도가 줄고 디버깅이 복잡해지니, RSI + 스토 (+ 거래량) 정도가 자동매매에 가장 균형 잡힌 조합입니다.

알고랩 무료 전략 검토: RSI + 스토캐스틱 같은 결합 전략을 이미 운영 중이거나 검토 중이시면 알고랩이 무료로 코드/명세서 검토해드립니다. 빠진 안전장치·잘못된 파라미터·실거래 격차 위험을 짚어드립니다.

RSI + 스토캐스틱 자동매매 봇 제작

이 5가지 패턴 중 원하는 조합을 자동매매로 구현해드립니다. 백테스트 + 실거래 검증까지 포함.
지금 바로 무료 상담을 시작하세요.

무료 상담 시작하기