파이썬으로 RSI 계산하기 (업비트(Upbit) Open API 활용)
IT2024. 3. 4. 23:17코인이나 주식에서 트레이딩하는 투자자들은 다양한 기술적 분석 도구를 사용합니다. 분석을 위해 많이 보는 지표 중 RSI(Relative Strength Index
, 상대강도지수)는 매우 인기 있는 지표 중 하나입니다.
본 글에서는 RSI의 개념을 설명하고, pyupbit
라이브러리와 업비트 Open API를 활용하여 RSI
를 계산하는 방법에 대해 소개합니다.
RSI란?
RSI는 1978년에 J. Welles Wilder가 개발하였으며, 시장의 모멘텀을 분석하는 데 유용합니다. RSI는 0에서 100 사이의 값을 가지며, 특정 자산의 가격 변동성을 측정하는 지표입니다.
일반적으로 RSI 값이 70 이상이면 과매수(overbought
) 상태로 가격 하락이 예상되고, 30 이하면 과매도(oversold
) 상태로 가격 상승이 예상됩니다.
pyupbit 라이브러리 설치
pyupbit는 업비트 거래소의 API를 파이썬에서 쉽게 사용할 수 있도록 만든 라이브러리입니다. 이 라이브러리를 사용하여 시장의 데이터를 가져와 RSI를 계산을 할 수 있습니다.
우선, pyupbit
라이브러리를 설치합니다
pip install pyupbit
파이썬을 활용하여 RSI 계산
이제 파이썬(Python) 코드를 작성하여 RSI를 계산해 보겠습니다
import pyupbit
def calculate_rsi(symbol, period=14):
# 업비트에서 가상화폐의 일봉 데이터를 조회
df = pyupbit.get_ohlcv(symbol, 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와 RSI를 계산
rs = avg_gain / avg_loss
rsi = 100.0 - (100.0 / (1.0 + rs))
return rsi[-1]
# 비트코인의 RSI
symbol = "KRW-BTC"
rsi = calculate_rsi(symbol)
print(f"{symbol} RSI: {rsi}")
pyupbit.get_ohlcv
함수를 사용해, 계산하고 싶은 코인 심볼의 일봉 데이터를 가져옵니다..diff()
메서드로 가격 변동을 계산하고,.where()
메서드로 상승분과 하락분을 구분합니다.ewm(...).mean()
메서드로 지정된 기간(period) 동안의 평균 상승분과 하락분을 계산합니다.- 마지막으로, 상대강도(
RS
)를 구하고 상대강도로RSI
를 계산합니다.
위와 같이 함수로 만들어두고, symbol 값만 대입하여 여러가지 코인의 RSI를 계산할 수 있습니다.
결론
RSI는 트레이딩에서 중요한 기술적 분석 도구로, 과매수 또는 과매도 상태인지를 판단하는 데 유용합니다. RSI를 계산하여 과매도 일때 매수, 과매수일때 매도하는 방식으로 트레이딩 봇을 만들 수도 있습니다.
관련 글
'IT' 카테고리의 다른 글
python과 pyupbit로 호가 주문 취소하기 (0) | 2024.05.03 |
---|---|
Media Stream 정의와 Streaming 기술 요소 (0) | 2024.05.02 |
Kohya_ss를 이용하여 LoRA 트레이닝 (Stable Diffusion) (0) | 2024.02.12 |
EUC-KR와 CP949 인코딩 (한글 인코딩) (0) | 2024.02.02 |
MacOS에 쉽게 여러 버전의 JDK 관리하는 방법 (0) | 2024.01.01 |
IT 기술에 대한 글을 주로 작성하고, 일상 내용, 맛집/숙박/제품 리뷰 등 여러가지 주제를작성하는 블로그입니다. 티스토리 커스텀 스킨도 개발하고 있으니 관심있으신분은 Berry Skin을 검색바랍니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!