기술적 분석 라이브러리 TA-LIB Python Wrapper

2019-08-15 • quantpython, ta-lib • 3 min read

기술적 분석(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