python 파이썬으로 주식 차트 분석 / 기술적 지표 사용하기 : TA-Lib

반응형

  이번엔 앞서 yfinance, finance-datareader, pykrx에서 가져온 주식 가격 데이터에 기술적 분석 및 보조지표를 곁들일 수 있는 패키지를 소개한다. TA-Lib이라는 패키지인데 기본은 C/C++로 만들어진 패키지인데 python으로 래핑 되어있는 패키지를 설치할 거다. 이 패키지는 다른 소위 기술적 분석(Technical Analysis) 패키지나 솔루션에 어떻게 보면 기본이 되는 패키지인데 나중에 설명할 pandas-ta라는 패키지도 TA-Lib을 래핑 한 패키지다. 한동안 유지보수가 안되다가 최근에는 다시 github 레포지터리도 업데이트되고 있는 듯하다.

https://ta-lib.org/

 

TA-Lib - Technical Analysis Library

Use TA-Lib to add technical analysis to your own financial market trading applications 200 indicators such as ADX, MACD, RSI, Stochastic, Bollinger Bands etc... See complete list... Candlestick patterns recognition Core written in C/C++ with API also avail

ta-lib.org

https://github.com/TA-Lib/ta-lib-python

 

GitHub - TA-Lib/ta-lib-python: Python wrapper for TA-Lib (http://ta-lib.org/).

Python wrapper for TA-Lib (http://ta-lib.org/). Contribute to TA-Lib/ta-lib-python development by creating an account on GitHub.

github.com

 

  우선 설치 방법은 다음과 같다. 이 포스팅에서는 리눅스에 설치하는 것을 전제로 설명한다.

pip install TA-Lib

  근데 설치가 안되는 경우가 있다. 요즘을 잘 모르겠으나 예전에는 pip로는 설치가 안 되는 경우가 많았다. 이 때는 아래 링크에서 다운로드를 받고 서버로 파일을 업로드한다. 이후 해당 경로에 가서 아래와 같이 한 줄씩 때러 넣는다.

https://sourceforge.net/projects/ta-lib/files/ta-lib/0.4.0/ta-lib-0.4.0-src.tar.gz/download

tar -xzf ta-lib-0.4.0-src.tar.gz
cd ta-lib/
./configure --prefix=/usr
make
sudo make install

  앞서 apt/apt-get을 GCC 등 패키지를 리눅스에 설치해줬으면 수월하게 설치될 거다. 이 패키지는 설치가 가장 어렵다. 그나마 리눅스 환경에서는 윈도우나 mac보다 설치가 수월한 듯하다.

 

기능 리스트는 아래와 같다.

  • Overlap Studies
  • Momentum Indicators
  • Volume Indicators
  • Volatility Indicators
  • Price Transform
  • Cycle Indicators
  • Pattern Recognition

 

우리가 주식 앱에서 사용하는 대부분의 기술적 지표들을 전부다 구현이 가능하며 샛별형이니 적삼병이니 하는 소위 말하는 봉차트 분석도 가능하다. 우선 간단하게 이동평균선을 구현해 보겠다. 주가데이터는 pykrx를 이용해서 받아오겠다.

import talib
from pykrx import stock

df = stock.get_market_ohlcv('20220720', '20240310', '005930')
df['SMA10'] = talib.SMA(df['종가'],10)

print(df)

TA-Lib SMA10 추가 결과

  'SMA10' 컬럼이 추가되고 여기에 10일 이동평균선 값이 만들어진 것을 볼 수 있다. 근데 위쪽에는 'NaN'이라고 소위 결측치가 발생하는 걸 볼 수 있는데, 이는 10일 이동평균 값을 계산하기 위해선 최소 10일 치의 데이터가 있어야 하기 때문. 이럴 때는 dropna()를 넣어서 제거해 주자.

import talib
from pykrx import stock

df = stock.get_market_ohlcv('20220720', '20240310', '005930')
df['SMA10'] = talib.SMA(df['종가'],10)
df.dropna(inplace=True)

print(df)

  inplace=True는 현재 dataframe(df)의 값을 업데이트하겠다는 말. 이렇게 쓰지 않겠다면 아래와 같이 새로운 데이터프레임에 넣어줘도 된다.

df2 = df.dropna()

  어쨌든 이렇게 dropna를 하게 되면, 아래처럼 NaN이 있던 row가 아예 삭제돼서 전체 행수가 줄어든 것을 확인할 수 있다.(403 -> 394)

TA-Lib SMA10 추가 후 NaN인 행 삭제 결과

 

  이번에는 기술적 지표로 많이 사용들 하시는 상대강도지수(RSI, Relative Strength Index)를 추가해 보겠다.

df = stock.get_market_ohlcv('20220720', '20240310', '005930')
df['RSI14'] = talib.RSI(df['종가'],14)

print(df)

TA-Lib RSI14 추가 결과

  아주 간단하다. 이 패키지를 사용하며 고민해야 할 것은 지표의 의미가 뭔지, 어떤 지표를 사용하는지에 대한 고민이 주가 될 것이다. 사용법은 아주 간단하니..

  TA-Lib에서 제공하는 기능리스트와 함께 포스팅은 마친다.

 

 

  • Overlap Studies
BBANDS Bollinger Bands
DEMA Double Exponential Moving Average
EMA Exponential Moving Average
HT_TRENDLINE Hilbert Transform - Instantaneous Trendline
KAMA Kaufman Adaptive Moving Average
MA Moving average
MAMA MESA Adaptive Moving Average
MAVP Moving average with variable period
MIDPOINT MidPoint over period
MIDPRICE Midpoint Price over period
SAR Parabolic SAR
SAREXT Parabolic SAR - Extended
SMA Simple Moving Average
T3 Triple Exponential Moving Average (T3)
TEMA Triple Exponential Moving Average
TRIMA Triangular Moving Average
WMA Weighted Moving Average

 

  • Momentum Indicators
ADX Average Directional Movement Index
ADXR Average Directional Movement Index Rating
APO Absolute Price Oscillator
AROON Aroon
AROONOSC Aroon Oscillator
BOP Balance Of Power
CCI Commodity Channel Index
CMO Chande Momentum Oscillator
DX Directional Movement Index
MACD Moving Average Convergence/Divergence
MACDEXT MACD with controllable MA type
MACDFIX Moving Average Convergence/Divergence Fix 12/26
MFI Money Flow Index
MINUS_DI Minus Directional Indicator
MINUS_DM Minus Directional Movement
MOM Momentum
PLUS_DI Plus Directional Indicator
PLUS_DM Plus Directional Movement
PPO Percentage Price Oscillator
ROC Rate of change : ((price/prevPrice)-1)*100
ROCP Rate of change Percentage: (price-prevPrice)/prevPrice
ROCR Rate of change ratio: (price/prevPrice)
ROCR100 Rate of change ratio 100 scale: (price/prevPrice)*100
RSI Relative Strength Index
STOCH Stochastic
STOCHF Stochastic Fast
STOCHRSI Stochastic Relative Strength Index
TRIX 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
ULTOSC Ultimate Oscillator
WILLR Williams' %R

 

  • Volume Indicators
AD Chaikin A/D Line
ADOSC Chaikin A/D Oscillator
OBV On Balance Volume

  • Volatility Indicators
HT_DCPERIOD Hilbert Transform - Dominant Cycle Period
HT_DCPHASE Hilbert Transform - Dominant Cycle Phase
HT_PHASOR Hilbert Transform - Phasor Components
HT_SINE Hilbert Transform - SineWave
HT_TRENDMODE Hilbert Transform - Trend vs Cycle Mode

  • Price Transform
AVGPRICE Average Price
MEDPRICE Median Price
TYPPRICE Typical Price
WCLPRICE Weighted Close Price

  • Cycle Indicators
ATR Average True Range
NATR Normalized Average True Range
TRANGE True Range

 

 

  • Pattern Recognition
CDL2CROWS Two Crows
CDL3BLACKCROWS Three Black Crows
CDL3INSIDE Three Inside Up/Down
CDL3LINESTRIKE Three-Line Strike
CDL3OUTSIDE Three Outside Up/Down
CDL3STARSINSOUTH Three Stars In The South
CDL3WHITESOLDIERS Three Advancing White Soldiers
CDLABANDONEDBABY Abandoned Baby
CDLADVANCEBLOCK Advance Block
CDLBELTHOLD Belt-hold
CDLBREAKAWAY Breakaway
CDLCLOSINGMARUBOZU Closing Marubozu
CDLCONCEALBABYSWALL Concealing Baby Swallow
CDLCOUNTERATTACK Counterattack
CDLDARKCLOUDCOVER Dark Cloud Cover
CDLDOJI Doji
CDLDOJISTAR Doji Star
CDLDRAGONFLYDOJI Dragonfly Doji
CDLENGULFING Engulfing Pattern
CDLEVENINGDOJISTAR Evening Doji Star
CDLEVENINGSTAR Evening Star
CDLGAPSIDESIDEWHITE Up/Down-gap side-by-side white lines
CDLGRAVESTONEDOJI Gravestone Doji
CDLHAMMER Hammer
CDLHANGINGMAN Hanging Man
CDLHARAMI Harami Pattern
CDLHARAMICROSS Harami Cross Pattern
CDLHIGHWAVE High-Wave Candle
CDLHIKKAKE Hikkake Pattern
CDLHIKKAKEMOD Modified Hikkake Pattern
CDLHOMINGPIGEON Homing Pigeon
CDLIDENTICAL3CROWS Identical Three Crows
CDLINNECK In-Neck Pattern
CDLINVERTEDHAMMER Inverted Hammer
CDLKICKING Kicking
CDLKICKINGBYLENGTH Kicking - bull/bear determined by the longer marubozu
CDLLADDERBOTTOM Ladder Bottom
CDLLONGLEGGEDDOJI Long Legged Doji
CDLLONGLINE Long Line Candle
CDLMARUBOZU Marubozu
CDLMATCHINGLOW Matching Low
CDLMATHOLD Mat Hold
CDLMORNINGDOJISTAR Morning Doji Star
CDLMORNINGSTAR Morning Star
CDLONNECK On-Neck Pattern
CDLPIERCING Piercing Pattern
CDLRICKSHAWMAN Rickshaw Man
CDLRISEFALL3METHODS Rising/Falling Three Methods
CDLSEPARATINGLINES Separating Lines
CDLSHOOTINGSTAR Shooting Star
CDLSHORTLINE Short Line Candle
CDLSPINNINGTOP Spinning Top
CDLSTALLEDPATTERN Stalled Pattern
CDLSTICKSANDWICH Stick Sandwich
CDLTAKURI Takuri (Dragonfly Doji with very long lower shadow)
CDLTASUKIGAP Tasuki Gap
CDLTHRUSTING Thrusting Pattern
CDLTRISTAR Tristar Pattern
CDLUNIQUE3RIVER Unique 3 River
CDLUPSIDEGAP2CROWS Upside Gap Two Crows
CDLXSIDEGAP3METHODS Upside/Downside Gap Three Methods

 

  • Statistic Functions
BETA Beta
CORREL Pearson's Correlation Coefficient (r)
LINEARREG Linear Regression
LINEARREG_ANGLE Linear Regression Angle
LINEARREG_INTERCEPT Linear Regression Intercept
LINEARREG_SLOPE Linear Regression Slope
STDDEV Standard Deviation
TSF Time Series Forecast
VAR Variance
반응형