[파이썬] 업비트 지표 구하기 - RSI(상대강도지수)

2023. 3. 6. 09:00자동매매/업비트

반응형

RSI란,  Relative Strength Index의 약자로, 한국어로 역하면 상대간도지수하고 한다. RSI는 가격의 상승압력과 하락압력 간의 상대적인 강도를 나타내며, 일정 기간 동안 주가가 전일 가격에 비해 상승한 변화량과 하락한 변화량의 평균값을 구하여, 상승한 변화량이 크면 과매수, 하락한 변화량이 크면 과매도로 판단하는 방식이다.

 

 

반응형

 

 

계산방법은 주어진 기간의 모든 날의 주가에 대해서 아래와 같다.

 

  • U = 가격이 전일 가격보다 상승한 날의 상승분 (Up)
  • D = 가격이 전일 가격보다 하락한 날의 상승분 (Down)
  • AU = U값의 평균 (Average Ups)
  • AD = D값의 평균 (Average Downs)
  • RS = AU / AD (Relative Strength)
  • RSI = RS / (1 + RS) 또는 RSI = AU / (AU + AD)

 

대체로 RSI 값은 백분율로 나타내며, 파라미터로 사용되는 기간은 14일은 권장되며, 그 외에 9일, 14~15일, 25~28일 등 상황에 따라서 적절히 조절해서 사용한다.

 

 

 

 

유사한 지표로는 Stochastic-Fast와 비슷하게 나오지만 그래프 변화가 너무 잦고 급격하게 변하는 등 노이즈가 많아서 실전에서는 거의 사용되지 않으며, Stochastic-Slow RSI를 함께 활용하면 효율적이라는 견해가 많다.

 

 

from urllib import response
import pyupbit
import pandas as pd
import requests


# RSI 정의
def rsi(ohlc: pd.DataFrame, period: int = 14):
    ohlc["trade_price"] = ohlc["trade_price"]
    delta = ohlc["trade_price"].diff()
    gains, declines = delta.copy(), delta.copy()
    gains[gains < 0] = 0
    declines[declines > 0] = 0

    _gain = gains.ewm(com=(period -1), min_periods = period).mean()
    _loss = declines.abs().ewm(com=(period -1), min_periods = period).mean()

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


# Upbit 로그인 시작
access = "액세스 코드 입력"
secret = "시크릿코드 입력"
upbit = pyupbit.Upbit(access, secret)


# RSI 값 구하기
querystring = {"market":'KRW-BTC',"count":"200"}
response = requests.request("GET", url, params=querystring)
data = response.json()
df = pd.DataFrame(data)
df = df.iloc[::-1]
nrsi = rsi(df, 14).iloc[-1]


print('KRW-BTC', " RSI 200 : ", nrsi)

 

RSI (R elative Strength Index, 상대강도지수)

 

반응형