이번엔 앞서 yfinance, finance-datareader, pykrx에서 가져온 주식 가격 데이터에 기술적 분석 및 보조지표를 곁들일 수 있는 패키지를 소개한다. TA-Lib이라는 패키지인데 기본은 C/C++로 만들어진 패키지인데 python으로 래핑 되어있는 패키지를 설치할 거다. 이 패키지는 다른 소위 기술적 분석(Technical Analysis) 패키지나 솔루션에 어떻게 보면 기본이 되는 패키지인데 나중에 설명할 pandas-ta라는 패키지도 TA-Lib을 래핑 한 패키지다. 한동안 유지보수가 안되다가 최근에는 다시 github 레포지터리도 업데이트되고 있는 듯하다.
https://github.com/TA-Lib/ta-lib-python
우선 설치 방법은 다음과 같다. 이 포스팅에서는 리눅스에 설치하는 것을 전제로 설명한다.
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)
'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)
이번에는 기술적 지표로 많이 사용들 하시는 상대강도지수(RSI, Relative Strength Index)를 추가해 보겠다.
df = stock.get_market_ohlcv('20220720', '20240310', '005930')
df['RSI14'] = talib.RSI(df['종가'],14)
print(df)
아주 간단하다. 이 패키지를 사용하며 고민해야 할 것은 지표의 의미가 뭔지, 어떤 지표를 사용하는지에 대한 고민이 주가 될 것이다. 사용법은 아주 간단하니..
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 |