TA-Lib는 금융 시장 분석에 필수적인 도구로서 다양한 지표의 계산을 도와준다. TA-Lib에 대한 소개는 [TA-Lib] #1 기술적 분석과 TA-Lib의 개요을 참고하고, 설치에 관한 사항은 [TA-Lib] #2: 기술적 분석을 위한 TA-Lib 설치를 참고하길 바란다. 가격 데이터를 받아오기 위한 yahooquery 사용법은 [파이썬] Yahooquery로 과거 주식 데이터와 재무 데이터 얻는 방법을 참고하면 된다.
from yahooquery import Ticker
import talib
import pandas as pd
# 삼성 주식 데이터 받아오기
google = Ticker("005930.KS")
price_data = google.history(period="2y")
close_prices = price_data['close'].values
# 단순 이동 평균 계산
sma = talib.SMA(close_prices, timeperiod=20)
# 지수 이동 평균 계산
ema = talib.EMA(close_prices, timeperiod=20)
# 가중 이동 평균 계산
wma = talib.WMA(close_prices, timeperiod=20)
# 결과 출력
result = pd.DataFrame({
'Close Prices': close_prices,
'SMA': sma,
'EMA': ema,
'WMA': wma
})
print(result.tail())
Close Prices SMA EMA WMA
487 68900.0 70450.0 69944.221083 69709.047619
488 68000.0 70255.0 69759.057171 69475.714286
489 67500.0 69960.0 69543.908869 69213.333333
490 67300.0 69660.0 69330.203262 68960.000000
491 67000.0 69410.0 69108.279142 68706.666667
이동 평균을 활용하면 시장의 전반적인 추세를 분석할 수 있다.
last_5_sma = sma[-5:]
# 상승 추세 확인
if all(last_5_sma[i] < last_5_sma[i + 1] for i in range(4)):
print("시장은 상승 추세이다.")
# 하락 추세 확인
elif all(last_5_sma[i] > last_5_sma[i + 1] for i in range(4)):
print("시장은 하락 추세이다.")
else:
print("시장은 안정적이다.")
이 예제에서는 마지막 5일 동안의 이동 평균을 통해 시장의 추세를 분석하고 있다. 이동 평균이 연속적으로 상승하면 상승 추세로, 하락하면 하락 추세로 판단한다. 이 외에도 다른 기간과 다른 이동 평균 지표를 활용하여 보다 정교한 분석을 수행할 수 있다.
sma5 = talib.SMA(close_prices, timeperiod=5)
sma20 = talib.SMA(close_prices, timeperiod=20)
sma60 = talib.SMA(close_prices, timeperiod=60)
# 가정: 마지막 5일 동안의 단기, 중기, 장기 이동 평균 값
short_ma_last_5 = sma5[-5:]
mid_ma_last_5 = sma20[-5:]
long_ma_last_5 = sma60[-5:]
# 각 이동 평균이 연속적으로 상승하는지 확인
is_short_ma_rising = all(x < y for x, y in zip(short_ma_last_5, short_ma_last_5[1:]))
is_mid_ma_rising = all(x < y for x, y in zip(mid_ma_last_5, mid_ma_last_5[1:]))
is_long_ma_rising = all(x < y for x, y in zip(long_ma_last_5, long_ma_last_5[1:]))
# 추세 분석
if is_short_ma_rising and is_mid_ma_rising and is_long_ma_rising:
print("강력한 상승 추세")
elif is_short_ma_rising:
print("단기 상승 추세")
elif is_long_ma_rising:
print("장기 상승 추세")
else:
print("추세가 불분명함")
이 예제에서는 마지막 5일 동안의 단기, 중기, 장기 이동 평균을 비교하여 시장의 추세를 분석하고 있다.
이 방법은 각 이동 평균의 변화를 함께 고려하여 시장의 전반적인 상황을 파악하고, 상승과 하락 추세를 세분화하여 정확하게 분석할 수 있는 장점이 있다. 다른 기간과 다른 이동 평균 지표를 활용하여 보다 정교한 분석을 수행할 수도 있으며, 투자 전략에 유연하게 적용할 수 있다.
골든 크로스는 단기 이동 평균선이 장기 이동 평균선을 상향 돌파할 때 발생한다. 다음 코드는 골든 크로스를 찾는 예시이다.
short_sma = talib.SMA(close_prices, timeperiod=20)
long_sma = talib.SMA(close_prices, timeperiod=60)
# 골든 크로스 찾기
for i in range(1, len(close_prices)):
if short_sma[i] > long_sma[i] and short_sma[i-1] <= long_sma[i-1]:
print(f"골든 크로스 발견: {i}일")
데드 크로스는 단기 이동 평균선이 장기 이동 평균선을 하향 돌파할 때 발생한다. 다음 코드는 데드 크로스를 찾는 예시이다.
# 데드 크로스 찾기
for i in range(1, len(close_prices)):
if short_sma[i] < long_sma[i] and short_sma[i-1] >= long_sma[i-1]:
print(f"데드 크로스 발견: {i}일")
이동 평균과 TA-Lib를 활용한 시장 분석은 투자자에게 중요한 정보를 제공할 수 있다. 단순한 이동 평균부터 골든 크로스, 데드 크로스와 같은 복잡한 지표까지 다양한 방법으로 시장 추세와 변화를 분석할 수 있다. 이를 통해 투자 전략을 보다 정교하게 계획하고 실행할 수 있으며, 시장의 미묘한 움직임을 파악하는 데 도움이 될 것이다.
CloneCoding
한 줄의 코드에서 시작되는 혁신!