본문 바로가기
경제공부

[Chart Study] RSI (relative strength index)

by zemba 2022. 4. 30.
반응형
SMALL

안녕하세요~Zemba입니다. 지난번 포스팅에서 예고했듯이 MFI의 기본이 되는 지표 RSI에 대해서 공부해보려고 합니다.
이미 사용해보고 공부도 했지만 기록을 남기기 위해서 한번더 포스팅을 해보려고 합니다. :)

우선 RSI란? 상대강도지수라도 불리고 있으며 상승 압력과 하락 압력의 상대적인 강도를 나타내는 지표라고 합니다. 강도는 0~100까지의 수치로 표시되면 음수는 없습니다. 

차트의 형태는 다음과 같습니다.

출처 - 알파스퀘어 차트

가장 하단에 RSI지표가 보이실겁니다. 점선으로 30/70 영역이 표시가 되어있으며 그래프가 왔다 갔다 하는 모습을 볼 수 있습니다.
일반적으로 30일 경우에 과매도 구간의 신호로 판단하며 70일 경우 과매수 구간의 신호로 판단합니다. 그래서 30일 때 매수하고 70일 때 매도하는 전략을 사용하는 사람들이 많습니다. (이건 일반적인 사례)

다른 전략들도 다수 존재합니다. 앞서 말씀드린 것과같이 30/70구간에서 매수/매도를 하는 거래방법과 70부터 상승이 확실하게 시작되기 때문에 70을 상향 돌파할 때 매수하며 70선을 하향 돌파할 때 매도하는 전략을 적용하시는 분도 있습니다. 또한 주가와 RSI의 수치를 확인하며 다이버전스의 기법으로 매수/매도를 적용하시는 분도 있습니다.(요 부분은 잘 정리된 블로그들이 많기 때문에 따로 정리하진 않겠습니다.)

그럼 RSI를 구하는 방법을 살펴 보겠습니다.

RS = AU / AD
RSI = 100 - (100 / (1 + RS))
 - AU : 지난 14일 동안의 이득의 합 / 14
 - AD : 지난 14일 동안의 하락의 합 / 14


그러면 코드로 RSI를 구현해보겠습니다.

def rsi(ohlcv: pd.DataFrame, period: int = 14):
    delta = ohlcv["close"].diff(1)

    up, down = delta.copy(), delta.copy()
    up[up < 0] = 0
    down[down > 0] = 0

    _gain = up.ewm(com=(period - 1), min_periods=period).mean()
    _loss = down.abs().ewm(com=(period - 1), min_periods=period).mean()

    RS = _gain / _loss
    return pd.Series(100 - (100 / (1 + RS)), name="RSI")

주기는 기본 14일로 계산하지만 변경 가능하기 때문에 파라미터로 받을 수 있도록 설정합니다. 그리고 상승, 하락의 이득의 합을 계산하여 RSI값을 구합니다. RSI는 자료가 정말 많이서 적당히 여기까지만 포스팅해도 될 것 같습니다 ㅎㅎ 

역시나 이렇게 꾸준히 만들면 저에게 언젠가는 큰 도움이 될 것입니다. 매매법은 일반적인 부분들을 적어놓은 것이니 실제 거래에 대해서는 본인이 전략에 맞도록 잘 판단하여 거래하시길 바랍니다.
다음 포스팅에서 만나요~ ㅎ

반응형
LIST

댓글