본문 바로가기

바이낸스 가입방법
  • 코인 잡기술 블로그
기술/지표 알림

모든 코인 RSI 알림

by 금붕맨 2023. 4. 8.
반응형

코인 RSI

 

코인 RSI 알림 설정

 

바이낸스 API로 가져올 수 있는가?

바이낸스 API

마켓 데이터 항목에서 RSI는 찾아볼 수 없었습니다. 저번 거래량의 경우에는 API문서를 통해 response 받을 수 있다는 것을 확인했지만 아마 이제 거의 모든 지표는 직접 만드셔야 할 것입니다. 제 블로그에 '지표 알림 봇' 카테고리를 만든 이유이기도 하며, 앞으로 다른 지표들도 다루도록 하겠습니다.

 

 

RSI 공식

RSI = RS / ( 1+ RS ) *100

일정기간 동안

AU : 가격이 전 캔들 가격보다 상승한 캔들의 상승분들의 평균값
AD : 가격이 전 캔들 가격보다 하락한 캔들의 하락분들의 평균값

RS : AU / AD

 

공식을 보니 캔들의 시세로만 이루어진 지표였네요. 그러므로 Kline에서 종가에 해당하는 'close'열의 정보만 가져온다면 충분히 만들 수 있는 지표라고 볼 수 있습니다. 위의 사진에서 24시간 변화량이 있어 기간은 6 캔들부터 25 캔들까지 다양하게 변화를 줄 수 있고 자신의 투자에 맞는 기간으로 설정하시면 될 것 같습니다. 매개변수를 설정할 기간으로 넣으면 좋겠네요.

 

그런데 위 공식은 위키백과가 출처인 자료이며 공식 그대로 계산해 본 결과 바이낸스에 나타난 RSI값과 다르다는 것을 알 수 있었습니다. 아마 최근캔들일수록 높은 가중치를 부여하는 방식인 지수가중이동평균을 AU와 AD 식에 사용한 듯합니다. 그 계수가 얼마인지 알려주는 곳을 찾기 힘들었기  때문에 골치 아프게도 직접 비교해 가며 구하였습니다. AU와 AD를 구할 때 사용하는 평균법은 Welles Wider Moving average를 사용합니다. 지수가중이동평균과 같이 가중치가 지수적으로 분포되어 있으며 일반적인 지수이동평균 EMA와는 계수가 다릅니다.

 

EMA(지수이동평균)

EMA = price(t) * K + EMA (y) * (1-K)

price(t): 오늘의 종가

EMA(y): 어제의 EMA

K(가중승수) = 2 / (period+1)

위 공식은 일반적인 지수이동평균(EMA)의 계산공식입니다.

 

Welles Wider MA

Welles Wider MA = price(t) * K + WMA(y) * (1-K)

price(t): 오늘의 종가

WMA(y): 어제의 Welles Wider MA

K(가중승수) = 1 / period

위 공식은 RSI의 AU와 AD를 구할 때 사용하는 Welles Wider MA의 계산공식입니다. EMA와 비교해 보시면 K(가증승수)의 식이 다르다는 것을 볼 수 있습니다. 그러므로 파이썬 메서드 중 EMA를 구하는 ewm()를 사용할 때 가증승수에 해당하는 alpha를 a = 1 / period와 같은 형식으로 넣어주시면 됩니다. 

 

 

전체코드

import binance as bn
import threading

def rsi(symbol, interval, period):
    try:
        close = bn.get(symbol, interval)['close']
        delta = close.diff(1)
        #close 행과 행의 차이를 구합니다. 간격은 1입니다.
        gain = delta.where(delta > 0, 0)
        loss = -delta.where(delta < 0, 0)
        #gain(상승폭)은 delta가 양수면 delta를 그대로 들여오고 나머지는 0으로 반환합니다.
        #loss의 경우 반대로 하되 음수가 되므로 앞에 마이너스 부호를 붙여줍니다.

        c = period - 1
        a = 1 / period
        
        #지수가중이동평균을 구하기 위해 필요한 계수입니다. 둘 중 하나만 사용하시면 됩니다.
        #com = c , alpha = a

        AU = gain.ewm(alpha=(a)).mean()
        AD = loss.ewm(alpha=(a)).mean()
        #ewm().mean()는 지수가중이동평균을 구하는 함수입니다. 매개변수로 a값을 넣어줍니다.
        RS = AU / AD

        RSI = round((RS / (1 + RS)) * 100 ,2)
		return RSI

    except Exception as e:
        if str(e).startswith('429'):
            bn.tel_text(symbol + "  " + str(e))
        else:
            pass

tickers = bn.tickers("all")

def run():
    for i in tickers:
        RSI = bn.rsi(i, "5m", 12)
        RSI998 = RSI.iloc[-2]
        if RSI998 < 20:
            bn.tel_text(i + "  RSI: " +str(RSI998))

    threading.Timer(270, run).start()

run()

조건식은 5분 봉 기준 RSI값이 20 이하로 마감되면 만족하도록 설정하였습니다. rsi함수는 나중에 binance.py에 추가하면 반환값이 RSI를 쉽게 불러올 수 있습니다. 매개변수는 (symbol, interval, period)로 심벌과 인터벌은 문자열로 넣어주시면 됩니다.

 

 

RSI 알림

SXP와 CTK의 RSI값이 각각 18.76, 18.32로 20 이하 조건에 만족하여 알림이 왔습니다.

 

 

SXP RSI 알림

SXP코인으로 RSI를 확인하였더니 18.7591, 알림으로 온 값은 18.76으로 반올림을 한다면 정확히 일치하였습니다. 

 

 

후기

이번에 거래량을 제외하고 처음으로 지표를 다루어 보았는데 이해하는 데 있어서 만만치가 않았습니다. 솔직히 대부분 지표들이 이동평균선(MA)처럼 쉬울 줄 만 알고 접근하였는데 저의 부족함만 느꼈던 포스팅이었습니다. "지수가중이동평균" 이름부터 이해가 잘 안 되고 어디에 가중치를 주었는지, 수치는 어느 정도여야 하는지 정말 하나도 모른 상태에서 진행하다 보니 많이 지치네요. 단순히 30 이하는 과매도, 70 이상은 과매수로만 알고 있던 간단한 지표인 줄 알았던 RSI를 자세히 알게 되는 시간이었습니다. 매매하시는 분들이라면 한 번쯤은 자주 사용하는 지표들을 깊게 파고드시는 것을 추천드립니다.

반응형

'기술 > 지표 알림' 카테고리의 다른 글

바이낸스 롱/숏 비율 알림 받기  (429) 2023.04.16
MACD 알림 설정하는 방법  (415) 2023.04.13
지수이동평균(EMA) 가중이동평균(WMA) 계산  (457) 2023.04.11
이동 평균(MA) 골든크로스 알림  (398) 2023.04.09
코인 거래량 알림  (415) 2023.04.07

댓글