본문 바로가기
퀀트 분석/퀀트 기초

[Python] 파이썬으로 주식 보조지표 구하기(RSI, MACD 등)

by 쿼카퀀트 2021. 8. 14.
728x90

이번엔 주가로부터 RSI, MACD 등의 보조지표를 계산하는 방법을 알아보겠습니다.

 

보조지표 계산을 돕는 파이썬 패키지는 매우 다양한데요, 이번엔 그 중 제가 유용하게 사용중인 ta 패키지를 사용해보겠습니다.

 

1. TA로 보조지표 구하기

먼저, 터미널에서 ta 패키지를 설치해줍니다.

pip install ta

 

다음으론 주가 데이터를 받아와야 합니다. 야후 주가 데이터 추출 링크에 들어가면 야후 파이낸스로 주가 데이터를 받아올 수 있는 방법에 대해 설명하니, 필요하신 경우 방문해주세요ㅎㅎ 전 아래 코드로 애플의 21년 4월 이후 데이터를 불러왔습니다.

import yfinance as yf

data = yf.download('AAPL',start='2021-04-01')

다운받은 data 변수를 확인하면, 아래처럼 Open, High, Low, Close, Adj Close, Volume 6개의 컬럼이 나오고, 각 row는 하루를 나타내는 데이터가 나옵니다.

 

중요한 것은, ta 패키지를 쓰기 위해선 꼭 최신 날짜가 맨 아래 row로 가야 한다는 점입니다. (yf 패키지를 안 쓰시는 분들은 시간 순서가 제대로 됐나 꼭 확인해주세요)

최신 날짜가 맨 아래쪽 row로 가야합니다

 

이제 받아온 주가 데이터로 볼린저밴드를 계산해보겠습니다. (볼린저 밴드 외 지표에 대한 설명은 맨 아래 있습니다)

import ta

bol_h = ta.volatility.bollinger_hband(data['Close'])
bol_l = ta.volatility.bollinger_lband(data['Close'])

이렇게만 하면, ta 패키지가 애플의 Close 값을 바탕으로 볼린저밴드를 계산합니다.

 

제대로 계산이 됐나 한번 그림을 그려서 확인해보시죠.

import matplotlib.pyplot as plt

plt.plot(data['Close'],c='k')
plt.plot(bol_h,c='r')
plt.plot(bol_l,c='g')

애플의 주가는 검은색, 볼린저밴드의 상단 밴드는 빨간색, 하단 밴드는 초록색 선으로 그렸습니다.

네, 보시다시피 볼린저밴드가 제대로 계산되었습니다. 최근 주가가 볼린저밴드 상단에 거의 걸쳐있네요.

 

 

 

2. TA 패키지 설명 - ta로 어떤 보조지표를 구할 수 있나요?

방금 ta 패키지 설명을 보시며, ta.volatility.bollinger_hband 이런건 다 뭐냐, 볼린저밴드 말고 딴건 어떻게 구하냐~ 라는 생각이 드실겁니다.

 

이는 ta 패키지 설명에 잘 나와있어, 링크와 함께 간략한 각각의 설명을 여기에 표로 붙여드리겠습니다. (너무 많아 여기에 전부 설명하기는 어렵지만, 위 링크에서 사용법에 대해 자세한 설명이 나와있어 사용하는데에 전혀 문제 없을거에요!)

 

크게 Volume, Volatility, Trend, Momentum, Other 다섯 가지의 분류가 있으며, 각각의 분류에 많은 보조지표가 구현돼 있습니다.

Volume
  • Money Flow Index (MFI)
  • Accumulation/Distribution Index (ADI)
  • On-Balance Volume (OBV)
  • Chaikin Money Flow (CMF)
  • Force Index (FI)
  • Ease of Movement (EoM, EMV)
  • Volume-price Trend (VPT)
  • Negative Volume Index (NVI)
  • Volume Weighted Average Price (VWAP)
Volatility
  • Average True Range (ATR)
  • Bollinger Bands (BB)
  • Keltner Channel (KC)
  • Donchian Channel (DC)
  • Ulcer Index (UI)
Trend
  • Simple Moving Average (SMA)
  • Exponential Moving Average (EMA)
  • Weighted Moving Average (WMA)
  • Moving Average Convergence Divergence (MACD)
  • Average Directional Movement Index (ADX)
  • Vortex Indicator (VI)
  • Trix (TRIX)
  • Mass Index (MI)
  • Commodity Channel Index (CCI)
  • Detrended Price Oscillator (DPO)
  • KST Oscillator (KST)
  • Ichimoku Kinkō Hyō (Ichimoku)
  • Parabolic Stop And Reverse (Parabolic SAR)
  • Schaff Trend Cycle (STC)
Momentum
  • Relative Strength Index (RSI)
  • Stochastic RSI (SRSI)
  • True strength index (TSI)
  • Ultimate Oscillator (UO)
  • Stochastic Oscillator (SR)
  • Williams %R (WR)
  • Awesome Oscillator (AO)
  • Kaufman's Adaptive Moving Average (KAMA)
  • Rate of Change (ROC)
  • Percentage Price Oscillator (PPO)
  • Percentage Volume Oscillator (PVO)
other
  • Daily Return (DR)
  • Daily Log Return (DLR)
  • Cumulative Return (CR)

 

저는 아래와 같이 다양한 지표를 구하는데에 ta 패키지를 사용하고 있습니다. pyta등 다양한 패키지가 존재하지만, ta가 가장 사용성이 좋고 편한 것 같아, 저는 얘를 사용하고 있습니다. 

rsi = ta.momentum.rsi(close)
macd = ta.trend.macd(close)
macdsignal = ta.trend.macd_signal(close)
bol_h = ta.volatility.bollinger_hband(close)
bol_avg = ta.volatility.bollinger_mavg(close)
bol_l = ta.volatility.bollinger_lband(close)
obv = ta.volume.on_balance_volume(close,volume)

 

모두들 보조지표로 투자 시그널 잡아내는 작업 화이팅입니다!

728x90

댓글