TA-Lib을 활용한 기술적 분석 (1/2)

2024. 4. 23. 23:17금융 데이터 분석

반응형

TA-Lib은 기술적 분석을 위해, 주요 지표들을 쉽게 다룰수 있도록 지원해주는 Python 패키지입니다. 이 패키지에 대해서 간략하게 소개한적이 있지만( https://direction-f.tistory.com/110) 구체적인 활용예시들에 대해서는 다루지 않아, 이번 포스팅에서 주요 지표들과 함께 TA-Lib 활용 방법에 대해서 한번 정리해보겠습니다.

TA-lib의 설치는 일반적으로 pip install을 활용하여 설치하기가 어렵습니다. 제가 앞서 정리하면서 활용했던 사이트도 사라지고, 조금씩 설치방법이 변경되는 것으로 보입니다. 따라서 Ta-lib 공식 페이지에서 어떻게 설치하는지 확인하시어 진행하는것이 좋을 것 같습니다.

https://pypi.org/project/TA-Lib/

[이동평균선(SMA, Simple Moving Average)]

이동평균선은 가장 기본적인 지표로, 지표에 이름에서 알 수 있듯이 지정한 기간을 이동하면서 평균값을 구하는 것입니다. 20일 이동평균선이라면 해당일부터 20일전까지 평균값이 해당일의 이동평균이 됩니다.

이동평균선이 위로 움직이고 있다면 주가가 상승하는 추세로, 하락하고 있다면 하락하는 추세로 볼 수 있을 것입니다.

import pandas as pd
import yfinance as yf
import talib
import matplotlib.pyplot as plt

df = yf.download("IBM", start="2020-01-01", end="2020-12-31", progress=False, auto_adjust=True)
df["sma_20"] = talib.SMA(df["Close"], timeperiod=20)

 

[방향성 지수( DMI ,Directional Movement Index)]

해당 지표는 추세의 강도를 나타내는 지표로  +DI(Plus Directional Indicator)와 -DI(Minus Directional Indicator)로 이루어져 있으며, 이를 통해 상승 추세의 강도와 하락 추세의 강도를 측정합니다.

해당 지표의 계산 산식은 아래와 같습니다.

https://alphasquare.oopy.io/board/technical-indicator/dmi

 

위 수식에서 확인할 수 있는것 같이 +DI가 계속증가한다는 것은 전일 고가보다 당일 고가가 높은 경우가 많다는 것이고 이는 시장이 상승추세에 있음을 나타냅니다. 반면에 -DI가 계속 증가한다는 것은 시장이 하락 추세에 있음을 알 수 있습니다.

df["+DMI"] = talib.PLUS_DI(df["High"], df["Low"],df["Close"], timeperiod= 14)
df["-DMI"] = talib.MINUS_DI(df["High"], df["Low"],df["Close"], timeperiod= 14)

 [평균방향성 지수(ADX, Average Directional Movement Index)]

 ADX는 +DI와 -DI를 이용하여 구합니다. 먼저 DX를 정의하면 DX의 수식은 아래와 같습니다.

https://www.investopedia.com/terms/d/dmi.asp

위에서 구한 DX를 평균을 내면 ADX가 됩니다. +DI와 -DI는 각각 상승추세와 하락추세를 나타낸다고 볼 수 있으며, 만약 횡보하는 시장이라면 +DI, -DI모두 0에 가까운 값을 가지게 될 것입니다. 이 경우에는 DX는 작은값을 가질 것입니다. 만약 상승추세가 강하다면 +DI가 큰값을, 하락추세가 강하다면 -DI가 큰값을 가지게 될 것이며 이는 DX가 큰값을 가지게 할 것입니다.

따라서 ADX는 지금 현재의 추세가 얼마나 강한지를 나타냅니다. ADX는 0~100의 값을 가지며 50을 넘으면 현재 추세가 매우 강함을 나타냅니다.

df["ADX"] = talib.ADX(df["High"], df["Low"],df["Close"], timeperiod= 14)

[볼린저밴드(Bollinger band)]

볼린저밴드는 주가의 변동성을 파악하는 도구입니다. 중심선, 상단선, 하단선으로 구분되며, 중심선은 "20일 이동평균선", 상단선은 "20일 이동편균선 + 표준펀차x2", 하단선은" 20일 이동평균선-표준편차x2"입니다.

볼린저 밴드를 벗어나는 값은 아웃라이어라고 볼 수 있으며, 이에 따라 상단선과 하단선은 지지선 또는 저항선으로 작용될 수도 있습니다.

만약 변동성적이 작은 시장이라면 표준편차가 작기때문에 볼린저 밴드의 폭은 좁아질 것입니다.

df["bb_up"], df["bb_mid"], df["bb_low"] = talib.BBANDS(df["Close"], timeperiod = 20)
반응형