반응형
안녕하세요.
이번에는 RSI지표를 구하는 방법에 대해 말해보려고 합니다.
RSI(Relative Strength Index) 지표
RSI지표란 상대 강도를 나타내는 것으로 주식, 선물에서 사용은 물론 코인에서도 사용합니다.
가격이 전보다 상승한 것을 UP, 하락한 것을 DN이라고 가정했을 때 U와 D의 평균값을 구하여
U(평균)/D(평균) = RS라고 하고
RSI지표는 RSI = RS/(1+RS) 이렇게 식이 나옵니다.
(참고로 하락할 경우 UP가 음수가 나오는데 이럴경우 0으로 간주합니다. 반대도 마찬가지)
결과의 해석
50을 기준으로 70이상을 초과매수 국면으로, 30이하를 초과매도 구간으로 구분하는데
간단히 말하자면 70이상은 단기간에 과열, 30이하는 단기간의 하락정도로 나타납니다.
https://codereader37.tistory.com/173
import pandas as pd
import ccxt
def rsi_calc(ohlc: pd.DataFrame, period: int = 7):
ohlc = ohlc[4].astype(float)
delta = ohlc.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")
def rsi_binance(itv='1h', simbol='ETH/USDT'):
binance = ccxt.binance()
ohlcv = binance.fetch_ohlcv(symbol="ETH/USDT", timeframe=itv, limit=200)
df = pd.DataFrame(ohlcv)
rsi = rsi_calc(df,7).iloc[-1]
return rsi
k = rsi_binance(itv='15m')
r = rsi_binance(itv='1h')
여기에 나와있는 코드를 조금 수정했습니다.
14개로 평균을 냈는데 실제로 바이낸스 15분과 비교해보니 값이 다르더군요.
조정해보니까 7이면 똑같더라구요.!
맨 밑에 k 값에서 15m을 조정하면 원하는 시간의 rsi 지표를 구할 수 있습니다.
뭐랄까 요즘 코딩이나 이런 것을 배우는데 참 편해진 것 같네요.
중요한 것은 아이디어라고 생각합니다.
반응형
댓글