기술적 분석 라이브러리 TA-LIB Python Wrapper
기술적 분석(Technical Analysis)는 과거 축적된 주가와 거래량 등을 분석하여 미래 주가의 방향성을 예측하는 분석 방법입니다. 대표적인 보조지표(Indicator)로 이동평균(Moving Average), 볼린저밴드(Bollinger Band), Moving Average Convergence Divergence(MACD), Relative Strength Index(RSI) 등이 있습니다.
보조지표들 외에도 차트에서 패턴을 알아내기도 합니다. 대표적인 패턴으로 Three Line Strike, Two Black Gapping, Three Black Crows, Evening Star, Abandoned Baby 등이 있습니다.
이번 포스트에서는 기술적 분석 라이브러리인 TA-LIB의 Python Wrapper에 대해서 소개하고자 합니다. TA-LIB를 이용하면 이동평균, 볼린저밴드, MACD, RSI 등의 대표적인 기술적 분석 보조지표를 쉽게 계산할 수 있고 다양한 차트 패턴을 포착할 수 있습니다. 자세한 기능은 이 문서에서 확인할 수 있습니다.
설치
우분투 환경에서 TA-LIB 설치를 진행합니다.
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xzf ta-lib-0.4.0-src.tar.gz
cd ta-lib/
./configure --prefix=/usr
make
sudo make install
다음과 같이 make가 없다는 메시지가 뜬다면 make를 먼서 설치하고 다시 make 명령을 실행하면 됩니다.
Command 'make' not found, but can be installed with:
sudo apt install make
sudo apt install make-guile
이제 TA-LIB 파이썬 라이브러리를 설치하면 됩니다. TA-LIB이 설치되어 있어야 TA-LIB 파이썬 라이브러리를 설치할 수 있습니다.
pip install ta-lib
예제
TA-LIB 파이썬 라이브러리를 이용하여 볼린저밴드를 추가해 보겠습니다. 먼저 다음과 같은 OHLCV(Open-High-Low-Close-Volume) 데이터, 즉 봉차트가 있습니다.
import pandas as pd
df = pd.read_csv('chart.csv')
close | code | date | diff | diffratio | diffsign | high | low | open | price | volume |
---|---|---|---|---|---|---|---|---|---|---|
46200.0 | 5930 | 20180823 | 100.0 | NaN | 2 | 46200.0 | 45700.0 | 46150.0 | 309343000000 | 6730918 |
46150.0 | 5930 | 20180824 | -50.0 | NaN | 5 | 46400.0 | 45550.0 | 45900.0 | 302213000000 | 6582535 |
46300.0 | 5930 | 20180827 | 150.0 | 0.325027 | 2 | 46550.0 | 46000.0 | 46100.0 | 243696000000 | 5263782 |
46550.0 | 5930 | 20180828 | 250.0 | 0.539957 | 2 | 46950.0 | 46300.0 | 46800.0 | 343323000000 | 7365976 |
46800.0 | 5930 | 20180829 | 250.0 | 0.537057 | 2 | 46800.0 | 46400.0 | 46750.0 | 259964000000 | 5572374 |
47650.0 | 5930 | 20180830 | 850.0 | 1.816239 | 2 | 47950.0 | 46700.0 | 46950.0 | 580259000000 | 12193231 |
48450.0 | 5930 | 20180831 | 800.0 | 1.678909 | 2 | 48450.0 | 47000.0 | 47100.0 | 652318000000 | 13577454 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
43500.0 | 5930 | 20190806 | -450.0 | -1.023891 | 5 | 43800.0 | 42500.0 | 42500.0 | 654805000000 | 15083824 |
43200.0 | 5930 | 20190807 | -300.0 | -0.689655 | 5 | 43900.0 | 43100.0 | 43600.0 | 434500000000 | 10002533 |
42650.0 | 5930 | 20190808 | -550.0 | -1.273148 | 5 | 43500.0 | 42650.0 | 43250.0 | 728074000000 | 16926881 |
43150.0 | 5930 | 20190809 | 500.0 | 1.172333 | 2 | 43350.0 | 43050.0 | 43250.0 | 418719000000 | 9685147 |
43700.0 | 5930 | 20190812 | 550.0 | 1.274623 | 2 | 44000.0 | 43550.0 | 44000.0 | 370531000000 | 8466169 |
43000.0 | 5930 | 20190813 | -700.0 | -1.601831 | 5 | 43500.0 | 42950.0 | 43500.0 | 314191000000 | 7276979 |
43700.0 | 5930 | 20190814 | 700.0 | 1.601831 | 2 | 44250.0 | 43500.0 | 43900.0 | 383427000000 | 8750135 |
TA-LIB 파이썬 라이브러리 모듈 이름은 talib 입니다. talib을 임포트하고 볼린저밴드를 구하는 함수를 호출합니다. 이 문서에서 함수들의 Signature를 확인할 수 있습니다.
upperband, middleband, lowerband = BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
이렇게 Upper Bollinger Band, Middle Bollinger Band, Lower Bollinger Band를 쉽게 구할 수 있습니다.
import talib
ubb, mbb, lbb = talib.BBANDS(df.close, 20, 2)
df['ubb'] = ubb
df['mbb'] = mbb
df['lbb'] = lbb
close | code | date | diff | diffratio | diffsign | high | low | open | price | volume | ubb | mbb | lbb |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
46200.0 | 5930 | 20180823 | 100.0 | NaN | 2 | 46200.0 | 45700.0 | 46150.0 | 309343000000 | 6730918 | NaN | NaN | NaN |
46150.0 | 5930 | 20180824 | -50.0 | NaN | 5 | 46400.0 | 45550.0 | 45900.0 | 302213000000 | 6582535 | NaN | NaN | NaN |
46300.0 | 5930 | 20180827 | 150.0 | 0.325027 | 2 | 46550.0 | 46000.0 | 46100.0 | 243696000000 | 5263782 | NaN | NaN | NaN |
46550.0 | 5930 | 20180828 | 250.0 | 0.539957 | 2 | 46950.0 | 46300.0 | 46800.0 | 343323000000 | 7365976 | NaN | NaN | NaN |
46800.0 | 5930 | 20180829 | 250.0 | 0.537057 | 2 | 46800.0 | 46400.0 | 46750.0 | 259964000000 | 5572374 | NaN | NaN | NaN |
47650.0 | 5930 | 20180830 | 850.0 | 1.816239 | 2 | 47950.0 | 46700.0 | 46950.0 | 580259000000 | 12193231 | NaN | NaN | NaN |
48450.0 | 5930 | 20180831 | 800.0 | 1.678909 | 2 | 48450.0 | 47000.0 | 47100.0 | 652318000000 | 13577454 | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
43500.0 | 5930 | 20190806 | -450.0 | -1.023891 | 5 | 43800.0 | 42500.0 | 42500.0 | 654805000000 | 15083824 | 48098.400537 | 46057.5 | 44016.599463 |
43200.0 | 5930 | 20190807 | -300.0 | -0.689655 | 5 | 43900.0 | 43100.0 | 43600.0 | 434500000000 | 10002533 | 48325.707442 | 45940.0 | 43554.292558 |
42650.0 | 5930 | 20190808 | -550.0 | -1.273148 | 5 | 43500.0 | 42650.0 | 43250.0 | 728074000000 | 16926881 | 48540.426385 | 45762.5 | 42984.573615 |
43150.0 | 5930 | 20190809 | 500.0 | 1.172333 | 2 | 43350.0 | 43050.0 | 43250.0 | 418719000000 | 9685147 | 48592.457113 | 45605.0 | 42617.542887 |
43700.0 | 5930 | 20190812 | 550.0 | 1.274623 | 2 | 44000.0 | 43550.0 | 44000.0 | 370531000000 | 8466169 | 48538.700905 | 45467.5 | 42396.299095 |
43000.0 | 5930 | 20190813 | -700.0 | -1.601831 | 5 | 43500.0 | 42950.0 | 43500.0 | 314191000000 | 7276979 | 48456.116156 | 45275.0 | 42093.883844 |
43700.0 | 5930 | 20190814 | 700.0 | 1.601831 | 2 | 44250.0 | 43500.0 | 43900.0 | 383427000000 | 8750135 | 48388.641439 | 45157.5 | 41926.358561 |