주식 투자를 시작하면 누구나 한 번쯤 "지금이 매수 시점일까?", "언제 팔아야 할까?"라는 고민에 빠지게 됩니다. 기술적 분석은 과거의 주가 데이터와 거래량을 바탕으로 미래의 가격 움직임을 예측하려는 방법론입니다. 이 글에서는 파이썬을 활용하여 삼성전자 주가를 분석하면서 가장 기본적이면서도 실전에서 널리 사용되는 기술적 지표들을 배워보겠습니다.
먼저 필요한 라이브러리들을 설치하고 삼성전자의 주가 데이터를 가져와야 합니다.
# 필요한 라이브러리 설치 (터미널에서 실행) # pip install yfinance pandas matplotlib numpy import yfinance as yf import pandas as pd import matplotlib.pyplot as plt import numpy as np from datetime import datetime, timedelta # 한글 폰트 설정 (맥 OS) plt.rcParams ['font.family'] = 'AppleGothic' # 윈도의 경우: plt.rcParams ['font.family'] = 'Malgun Gothic' plt.rcParams ['axes.unicode_minus'] = False # 마이너스 기호 깨짐 방지 # 삼성전자 주가 데이터 다운로드 (최근 1년) ticker = "005930.KS" # 삼성전자의 야후 파이낸스 티커 end_date = datetime.now() start_date = end_date - timedelta(days=365) df = yf.download(ticker, start=start_date, end=end_date) print(f"데이터 크기: {len(df)}일") print(df.head())
야후 파이낸스에서 제공하는 데이터는 시가(Open), 고가(High), 저가(Low), 종가(Close), 조정종가(Adj Close), 거래량(Volume) 등을 포함합니다. 일반적으로 기술적 분석에서는 종가(Close)를 주로 사용합니다.
이동평균선은 가장 기본적이면서도 강력한 기술적 지표입니다. 일정 기간 동안의 주가 평균을 계산하여 가격 추세를 파악하는 도구입니다.
우리는 B, C, D, E colume처럼 5일간의 평균을 구하고 싶다. 다만 오늘 포함 과거 5일, 에제 포함 과거 5 일등 시간일과 종료일은 다르다. 우리는 5일 이동평균을 구하는 것이므로 Excel로 I7의 공식은 =AVERAGE(G3:G7), I8의 공식은 =AVERAGE(G4:G87)처럼, 하루를 걸러 다시 5일 동안의 평균을 구하는 계산이 필요하다. 아래 Excel표를 보면 쉽게 이해되리가 생각딘다.
주가분석에는 단기분석은 5일, 10일, 중기분석은 20일, 40일, 80일, 장기분석은 120일, 230일 등을 사용하는데, 그래프가 더 편하다면 44 일등으로 fine tunning을 해서 사용해도 무방하다.
단기 이동평균(40일): 최근의 가격 흐름을 민감하게 반영합니다.
장기 이동평균(120일): 전체적인 추세를 나타냅니다.
골든크로스(GC): 단기 이동평균선이 장기 이동평균선을 상향 돌파하면 매수 신호
데드크로스(DC): 단기 이동평균선이 장기 이동평균선을 하향 돌파하면 매도 신호
차트를 보면 주가가 이동평균선 위에 있을 때는 상승 추세, 아래에 있을 때는 하락 추세로 판단할 수 있습니다. 또한 40일선이 120일선 위에 있으면 전반적인 상승 모멘텀이 있다고 볼 수 있습니다.
다음은 실제로 삼성전자의 이동평균과 DC, GC를 살펴봅시다
# 필요한 라이브러리 설치 (터미널에서 실행)
# pip install yfinance pandas matplotlib numpy
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime, timedelta
# 한글 폰트 설정 (맥 OS)
plt.rcParams ['font.family'] = 'AppleGothic'
# 윈도의 경우: plt.rcParams ['font.family'] = 'Malgun Gothic'
plt.rcParams ['axes.unicode_minus'] = False # 마이너스 기호 깨짐 방지
# 삼성전자 주가 데이터 다운로드 (최근 1년)
ticker = "005930.KS" # 삼성전자의 야후 파이낸스 티커
end_date = datetime.now()
start_date = end_date - timedelta(days=365)
df = yf.download(ticker, start=start_date, end=end_date)
print(f"데이터 크기: {len(df)}일")
print(df.head())
이 코드를 Jupyter Cell에 넣고 실행을 하면
첫 5일 동안의 실제 데이터를 보여줍니다. 여러분도 궁금하면 어서 Jupyter를 설치해서 코드를 돌려보세요.
이제는 이동평균선을 구하는 코드입니다. 중기인 40일과 장기인 120일 이동평균선 두 개를 그려보겠습니다.
# 이동평균선 계산
df ['MA40'] = df ['Close']. rolling(window=40). mean()
df ['MA120'] = df ['Close']. rolling(window=120). mean() # 시각화
plt.figure(figsize=(14, 7)) plt.plot(df.index, df ['Close'], label='삼성전자 주가', linewidth=2) plt.plot(df.index, df ['MA40'], label='40일 이동평균', linewidth=1.5, linestyle='--')
plt.plot(df.index, df ['MA120'], label='120일 이동평균', linewidth=1.5, linestyle='--')
plt.title('삼성전자 주가와 이동평균선', fontsize=16, fontweight='bold')
plt.xlabel('날짜', fontsize=12)
plt.ylabel('주가 (원)', fontsize=12)
plt.legend(loc='best')
plt.grid(True, alpha=0.3)
plt.tight_layout() plt.show()
plt.savefig("sma2.png", dpi=300)
상승전자 주가(파랑선) 차트는 최근의 급격한 상승을 반영하듯 45% 이상의 경사를 보이고 있으며, 이 구조는 매우 기반이 약하고 급락을 경계해야 한다.
현재 40일 이동평균이 중장기인 120일선의 위에 있는 Golden cross를 보이고 있고, 두 이동평균의 간격 또한 벌어지고 있는 모습인데, 이는 급격한 상승을 했음에도 불구하고 여전히 상승 모멘텀(미국발 반도체경기, 삼성전자 영업실적 등 호재) 영향이라고 판단된다. 그러나 이동평균은 선행지표가 아니라 후행지표라서 다른 기술적 지표들과의 Confirm이 필요하다.
다음 편은 RSI 등을 통해, 그간 급등한 삼성전자 주식이 조정을 받을 가능성이 있는지를 살펴보도록 하겠습니다.