Post

Python으로 Upbit RSI 계산하기

Python을 활용하여 암호화폐 거래소 Upbit에 있는 종목의 RSI 계산하는 방법에 대해 소개합니다.

1. RSI 란?

RSI(Relative Strength Index, 상대 강도 지수)는 주식, 외환, 암호화폐 등 다양한 금융 자산의 기술적 분석에서 사용되는 모멘텀 지표입니다. RSI는 특정 기간 동안의 자산 가격의 변동을 바탕으로 자산이 과매수(Overbought) 또는 과매도(Oversold) 상태에 있는지를 알 수 있습니다.

1.1. RSI 계산 방법

RSI 계산식은 다음과 같습니다.

  1. 상승과 하락 계산
    • 일정 기간 동안의 각 종가 변화를 계산합니다.
    • 상승(U) = 금일 종가 - 전일 종가 (금일 종가가 전일 종가보다 높은 경우)
    • 하락(D) = 전일 종가 - 금일 종가 (금일 종가가 전일 종가보다 낮은 경우)
  2. 평균 상승과 평균 하락 계산
    • 일반적으로는 14일 기간을 기준으로 합니다.
    • 평균 상승 = 일정 기간 동안의 상승(U) 합계 / 기간
    • 평균 하락 = 일정 기간 동안의 하락(D) 합계 / 기간
  3. RSI 계산
    • RS (Relative Strength) = 평균 상승 / 평균 하락
    • RSI = 100 - (100 / (1 + RS))

이렇게 계산된 RSI 값은 0에서 100 사이의 값을 가지게됩니다. 일반적으로 70 이상이면 과매수, 30 이하이면 과매도로 간주하는데, 이를 참고하여 자신만의 트레이딩 전략을 만들 수 있습니다.

계산하는 방법에 대해서는 알았으니 Python 코드를 사용하여 작성해보겠습니다.

2. 파이썬으로 RSI 계산하기

pyupbit 라이브러리를 활용할 예정이므로, 우선 pyupbit 의존성을 추가하도록 하겠습니다.

1
pip install pyupbit

이후, 다음과 같이 코드를 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def calculate_rsi(ticker, interval='minute1', period=14):
    """
    특정 코인의 RSI를 계산하는 함수.

    Parameters:
    ticker (str): 코인 티커 (예: 'KRW-BTC')
    interval (str): 봉의 간격 ('minute1', 'minute3', 'minute5', 'minute10', 'minute15', 'minute30', 'minute60', 'minute240', 'day')
    period (int): RSI 계산에 사용할 기간 (default: 14)
    """
    # 데이터 불러오기
    df = pyupbit.get_ohlcv(ticker, interval=interval, count=250)

    # 가격 변동 계산
    delta = df['close'].diff()
    delta = delta[1:]

    # 상승과 하락 분리
    gain = delta.clip(lower=0)
    loss = delta.clip(upper=0).abs()

    # 평균 상승과 평균 하락 계산
    avg_gain = gain.ewm(alpha=1 / period).mean()
    avg_loss = loss.ewm(alpha=1 / period).mean()

    # RS 계산
    rs = avg_gain / avg_loss

    # RSI 계산
    rsi = 100 - (100 / (1 + rs))

    return rsi.iloc[-1]


if __name__ == '__main__':
    ticker = 'KRW-BTC'  # 원하는 코인의 티커를 설정
    intervals = ['minute1', 'minute3', 'hour1', 'hour4', 'day']  # 원하는 봉의 간격을 설정

    for interval in intervals:
        rsi = calculate_rsi(ticker, interval=interval)
        print(f"RSI ({interval}): {rsi}")

실행 결과 실행 결과

This post is licensed under CC BY 4.0 by the author.