본문 바로가기
파이썬엑셀

파이썬 엑셀로 주식 차트 분석: 이동평균선 계산 마스터하기

by mypick 2024. 11. 7.

주식 투자를 하다 보면 꼭 마주치는 차트! 그리고 그 차트에서 빼놓을 수 없는 것이 바로 이동평균선이죠. 5일선, 20일선, 60일선… 익숙한 용어들이지만, 정확히 어떻게 계산되는지, 어떤 의미를 가지는지 궁금하신 분들 많으실 거예요. 오늘은 파이썬을 이용해서 주식 데이터의 이동평균선을 직접 계산하고, 그 의미를 파악하는 방법을 알아보려고 해요. 혹시라도 코딩에 관심 있으신 분들이나 주식 투자를 좀 더 깊이 이해하고 싶으신 분들에게 도움이 되길 바라면서, 하나하나 차근차근 풀어드릴게요!

 

혹시라도 코딩에 관심 있으신 분들이나 주식 투자를 좀 더 깊이 이해하고 싶으신 분들에게 도움이 되길 바라면서, 하나하나 차근차근 풀어드릴게요!

 

주식 데이터 분석에 파이썬과 엑셀을 활용하면 어떤 장점이 있을까요? 엑셀로도 충분히 이동평균선을 계산할 수 있지만, 파이썬을 활용하면 훨씬 더 효율적이고 다양한 분석이 가능해요. 엑셀처럼 수동으로 계산하고 복사 붙여넣기 하는 작업을 반복하지 않아도 되고, 한 번 작성한 코드를 재활용해서 다른 주식 데이터에도 쉽게 적용할 수 있거든요. 게다가 파이썬 라이브러리들을 활용하면 이동평균 뿐 아니라 다양한 기술적 지표들을 손쉽게 계산하고 시각화할 수 있어서 주식 분석에 훨씬 더 유용하게 사용할 수 있어요.

 


파이썬으로 이동평균선 계산하기: Pandas 라이브러리 활용

이동평균선을 계산하려면 먼저 주식 데이터를 가져와야겠죠? 파이썬에서는 FinanceDataReader와 Pandas라는 라이브러리를 이용하면 쉽게 주식 데이터를 가져오고, 다양한 계산을 할 수 있어요. FinanceDataReader는 한국 주식 시장 데이터를 쉽게 가져올 수 있도록 도와주는 멋진 라이브러리이고, Pandas는 데이터 분석에 꼭 필요한 라이브러리인데, 데이터를 다루고 분석하는 데 매우 유용하답니다.

 


FinanceDataReader로 주식 데이터 가져오기

FinanceDataReader를 사용해서 삼성전자의 주가 데이터를 가져와 볼게요. 아래 코드를 보시면, 2021년 6월 3일부터 2022년 6월 3일까지의 삼성전자 주가 데이터를 가져와서 라는 변수에 저장하는 것을 확인할 수 있어요.

 

import FinanceDataReader as fdr
import pandas as pd

# 삼성전자 주가 데이터 다운로드
df = fdr.DataReader('005930', '2021-06-03', '2022-06-03')

Pandas의 rolling() 함수와 mean() 함수로 이동평균 계산하기

자, 이제 주식 데이터를 가져왔으니 이동평균을 계산해 볼까요? Pandas 라이브러리의  함수와  함수를 사용하면 아주 쉽게 계산할 수 있어요.   함수는 특정 기간 동안의 데이터를 묶어서 계산하는 데 사용하고,  함수는 그 묶인 데이터의 평균을 계산하는 데 사용한답니다.

 

예를 들어, 5일 이동평균을 계산하려면 처럼 코드를 작성하면 돼요. 는 삼성전자 주가 데이터에서 종가를 의미하고, 는 5일 동안의 데이터를 묶어서, 은 그 5일 동안의 종가 평균을 계산하라는 의미랍니다.

 

아래 코드는 5일, 20일, 60일, 120일 이동평균을 계산하는 예시에요.

 

# 이동 평균 계산
df['5일_이동평균'] = df['Close'].rolling(5).mean()
df['20일_이동평균'] = df['Close'].rolling(20).mean()
df['60일_이동평균'] = df['Close'].rolling(60).mean()
df['120일_이동평균'] = df['Close'].rolling(120).mean()

결과를 엑셀 파일로 저장하기

계산된 이동평균을 엑셀 파일로 저장하고 싶다면  함수를 사용하면 돼요. 아래 코드는 에 저장된 데이터를 "삼성전자_이동평균.xlsx"라는 이름의 엑셀 파일로 저장하는 코드랍니다.

 

# 결과 저장
df.to_excel("삼성전자_이동평균.xlsx")

이동평균선의 의미와 활용

이동평균선은 주가의 추세를 파악하는 데 유용하게 사용되는 기술적 지표에요. 주가가 어떤 방향으로 움직이고 있는지, 즉 상승 추세인지 하락 추세인지를 판단하는 데 도움을 주죠.

 


이동평균선의 종류

이동평균선은 계산 방식에 따라 몇 가지 종류가 있어요.

 

  • 단순 이동 평균(SMA, Simple Moving Average): 가장 기본적인 이동평균선으로, 특정 기간 동안의 주가를 단순히 평균한 값을 연결한 선이에요. 우리가 앞에서 계산했던 5일, 20일, 60일 이동평균이 모두 SMA에 속한답니다.
  • 지수 이동 평균(EMA, Exponential Moving Average): 최근 데이터에 더 큰 가중치를 부여하여 계산하는 이동평균선이에요. 최근 주가 변화에 더 민감하게 반응한다고 생각하시면 돼요.
  • 가중 이동 평균(WMA, Weighted Moving Average): 최근 데이터에 가중치를 부여하여 계산하는 이동평균선의 또 다른 유형이에요. EMA와 비슷하지만, 가중치를 부여하는 방식이 조금 다르죠.

이동평균선으로 주가 추세 파악하기

이동평균선은 주가의 추세를 파악하는 데 유용하게 쓰여요. 예를 들어, 주가가 5일 이동평균선 위에 있고, 5일 이동평균선이 상승하고 있다면, 주가가 상승 추세에 있다고 판단할 수 있죠. 반대로, 주가가 5일 이동평균선 아래에 있고, 5일 이동평균선이 하락하고 있다면, 주가가 하락 추세에 있다고 해석할 수 있답니다.

 


골든 크로스와 데드 크로스

두 개 이상의 이동평균선을 함께 사용하면 더욱 다양한 정보를 얻을 수 있어요. 특히, 골든 크로스와 데드 크로스는 주식 투자에서 많이 사용되는 개념이죠.

 

  • 골든 크로스: 단기 이동평균선이 장기 이동평균선을 위쪽으로 뚫고 지나가는 것을 의미해요. 일반적으로 상승 신호로 해석되죠. 예를 들어, 5일 이동평균선이 20일 이동평균선을 위쪽으로 뚫고 지나가면, 주가가 상승할 가능성이 높다고 판단할 수 있어요.
  • 데드 크로스: 단기 이동평균선이 장기 이동평균선을 아래쪽으로 뚫고 지나가는 것을 의미해요. 일반적으로 하락 신호로 해석되죠. 예를 들어, 5일 이동평균선이 20일 이동평균선을 아래쪽으로 뚫고 지나가면, 주가가 하락할 가능성이 높다고 생각할 수 있답니다.

실제 주식 데이터를 이용한 이동평균선 계산 및 시각화

이제 실제 주식 데이터를 이용해서 이동평균선을 계산하고, 시각화하는 방법을 알아볼게요. Matplotlib 라이브러리를 사용하면 손쉽게 차트를 그릴 수 있답니다.

 


필요한 라이브러리 import

먼저, 필요한 라이브러리를 import 해주세요.

 

import FinanceDataReader as fdr
import pandas as pd
import matplotlib.pyplot as plt

주식 데이터 불러오기 및 이동평균 계산

FinanceDataReader를 사용하여 삼성전자 주식 데이터를 가져오고, 앞서 설명했던 방식대로 5일, 20일 이동평균을 계산해 볼게요.

 

# 삼성전자 주가 데이터 가져오기
df = fdr.DataReader('005930', '2023-01-01', '2023-10-27') 

# 5일, 20일 이동평균 계산
df['MA5'] = df['Close'].rolling(window=5).mean()
df['MA20'] = df['Close'].rolling(window=20).mean()

이동평균선 시각화

Matplotlib를 사용해서 종가와 5일, 20일 이동평균선을 차트에 그려볼게요.

 

# 차트 그리기
plt.figure(figsize=(12, 6))  # 차트 크기 조절
plt.plot(df.index, df['Close'], label='Close')
plt.plot(df.index, df['MA5'], label='MA5')
plt.plot(df.index, df['MA20'], label='MA20')
plt.legend()  # 범례 표시
plt.title('삼성전자 주가 및 이동평균선')  # 차트 제목
plt.xlabel('날짜')  # x축 레이블
plt.ylabel('주가')  # y축 레이블
plt.grid(True)  # 격자 표시
plt.show()

 차트를 보면 어떤 점을 확인할 수 있을까요? 주가가 5일선과 20일선 위에 있으면 상승 추세, 아래에 있으면 하락 추세로 판단할 수 있다는 것을 확인할 수 있을 거예요. 또한, 5일선이 20일선을 위로 뚫으면 골든 크로스, 아래로 뚫으면 데드 크로스가 발생하는 것을 확인할 수 있답니다.

 


좀 더 심화된 이동평균선 활용


이동평균선은 기본적인 활용 외에도 좀 더 다양하고 심화된 방식으로 활용될 수 있어요.

 


볼린저 밴드

볼린저 밴드는 이동평균선과 표준편차를 함께 사용하여 주가의 변동성을 나타내는 지표에요. 이동평균선을 중심으로 상단 밴드와 하단 밴드를 표시하여 주가가 어느 정도 범위 내에서 움직이는지, 그리고 변동성이 어느 정도인지를 파악하는 데 도움을 주죠.

 


MACD

MACD(Moving Average Convergence Divergence)는 두 개의 이동평균선의 차이를 이용하여 주가의 추세 변화를 파악하는 지표에요. MACD선과 시그널선이 교차하는 지점을 통해 매수/매도 시점을 판단하기도 한답니다.

 


RSI

RSI(Relative Strength Index)는 주가의 상승 폭과 하락 폭을 비교하여 주가의 과매수/과매도 여부를 판단하는 지표에요. RSI 값이 일정 수준을 넘어서면 과매수, 떨어지면 과매도로 판단할 수 있죠.

 


주식 데이터 분석 예시: 삼성전자 주가 데이터 활용

2023-10-20 67,000 67,200 66,500 골든 크로스
2023-10-23 67,500 67,400 66,800  
2023-10-24 68,000 67,600 67,000  
2023-10-25 67,800 67,700 67,200  
2023-10-26 68,200 67,900 67,400  
2023-10-27 68,500 68,100 67,600  

날짜 종가 5일 이동평균 20일 이동평균 골든 크로스/데드 크로스

 


자주 묻는 질문 (FAQ)


Q1. 이동평균선은 어떻게 해석해야 하나요?

A1. 이동평균선은 주가의 추세를 파악하는 데 도움을 주는 지표에요. 주가가 이동평균선 위에 있으면 상승 추세, 아래에 있으면 하락 추세로 해석할 수 있죠. 또한, 두 개 이상의 이동평균선을 함께 사용하면 골든 크로스와 데드 크로스를 통해 매수/매도 시점을 판단하는 데 도움을 받을 수 있답니다.

 


Q2. 어떤 기간의 이동평균을 사용해야 하나요?

A2. 사용하는 기간은 분석 목적과 투자 성향에 따라 달라질 수 있어요. 단기적인 추세를 파악하려면 5일 또는 10일 이동평균을, 장기적인 추세를 파악하려면 20일, 60일, 120일 이동평균을 사용하는 것이 일반적이에요.

 

Q3. 이동평균선만으로 투자 결정을 내려도 될까요?

A3. 이동평균선은 유용한 지표이지만, 투자 결정을 내릴 때는 이동평균선 외에도 다른 지표들을 함께 고려하는 것이 좋아요. 거래량, RSI, MACD 등 다양한 지표들을 종합적으로 분석하여 투자 결정을 내리는 것이 현명하답니다.

 

파이썬,엑셀,주식,주식투자,차트분석,이동평균선,기술적분석,SMA,EMA,WMA,골든크로스,데드크로스,FinanceDataReader,Pandas,Matplotlib,주식데이터,주식차트,투자,알고리즘트레이딩,quant,파이썬활용,데이터분석,금융데이터,Python,Excel,Stock,StockMarket,Trading,TechnicalAnalysis,Investment,AlgorithmTrading,DataAnalysis,FinancialData