파이썬 자동매매 개발, 이동평균선 그리기

자동매매 시스템은 주식, 외환, 암호화폐 등 다양한 금융 시장에서 투자 결정을 자동으로 수행하는 프로그램을 말합니다. 이러한 시스템을 개발할 때, 다양한 기술적 지표를 활용하여 매매 신호를 생성하는데, 그 중 하나가 이동평균선(Moving Average, MA)입니다. 이동평균선은 특정 기간 동안의 가격 변화 추세를 파악하는 데 유용한 도구입니다. 이 글에서는 파이썬을 이용하여 이동평균선을 그리는 방법에 대해 자세히 설명하겠습니다.

이동평균선의 개요

이동평균선은 주가나 다른 가격 지표의 평균을 일정 기간 동안 계산하여 차트에 표시하는 것입니다. 이동평균선의 형태에 따라 다음과 같은 여러 종류가 있습니다:

  • 단순 이동평균선 (SMA): 선택한 기간 동안의 가격의 단순 평균입니다.
  • 지수 이동평균선 (EMA): 최근 가격에 가중치를 더하여 계산한 평균으로, 보다 민감한 반응을 보입니다.
  • 가중 이동평균선 (WMA): 각 가격에 대해 가중치를 부여하여 계산한 평균입니다.

이번 강좌에서는 단순 이동평균선(SMA)을 예로 들어 그래프에 그리는 방법을 다룰 것입니다.

필요한 라이브러리 설치

파이썬으로 이동평균선을 그리기 위해서는 다음과 같은 라이브러리가 필요합니다:

  • pandas: 데이터 처리와 분석을 위한 라이브러리입니다.
  • numpy: 수치 계산을 위한 라이브러리입니다.
  • matplotlib: 데이터를 시각화하기 위한 라이브러리입니다.
  • yfinance: Yahoo Finance에서 데이터를 가져오는 라이브러리입니다.

다음 명령어를 사용하여 라이브러리를 설치할 수 있습니다:

pip install pandas numpy matplotlib yfinance

주식 데이터 가져오기

이제 Yahoo Finance에서 주식 데이터를 가져오는 방법을 알아보겠습니다. 다음 코드를 사용하여 애플(Apple Inc.)의 데이터를 가져올 수 있습니다:

import yfinance as yf

# 애플 주식 데이터 다운로드
ticker = 'AAPL'
data = yf.download(ticker, start='2020-01-01', end='2021-01-01')
print(data.head())

위 코드는 2020년 1월 1일부터 2021년 1월 1일까지의 애플 주식 데이터를 가져와 출력합니다. 데이터는 날짜, 개장가(Open), 고가(High), 저가(Low), 종가(Close), 거래량(Volume) 등의 열로 구성되어 있습니다.

단순 이동평균선 계산하기

이동평균선을 계산하는 것은 매우 간단합니다. pandas 라이브러리의 rolling 함수를 사용하면 특정 기간 동안의 이동평균선을 쉽게 구할 수 있습니다. 예를 들어, 20일 이동평균선을 계산하는 코드는 다음과 같습니다:

# 20일 이동 평균 계산
data['SMA_20'] = data['Close'].rolling(window=20).mean()

위 코드는 애플 주식 데이터의 종가를 기준으로 20일 이동평균선을 새 열 ‘SMA_20’로 추가합니다.

이동평균선 시각화하기

이제 계산한 이동평균선을 차트에 시각화할 차례입니다. matplotlib 라이브러리를 사용하여 시각화를 진행하겠습니다:

import matplotlib.pyplot as plt

# 시각화
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='종가', color='blue')
plt.plot(data['SMA_20'], label='20일 이동평균선', color='orange')
plt.title('애플 주식(주간) 종가 및 이동평균선')
plt.xlabel('날짜')
plt.ylabel('가격($)')
plt.legend()
plt.grid()
plt.show()

코드를 실행하면 애플 주식의 종가와 20일 이동평균선이 함께 그려진 차트가 나타납니다. 파란색 선은 종가를 나타내고, 주황색 선은 20일 이동평균선을 나타냅니다.

형태를 바꾸어 다양한 이동평균선 그리기

여기서 여러 다른 기간의 이동평균선도 추가할 수 있습니다. 예를 들어, 50일 및 200일 이동평균선을 추가해 봅시다:

# 50일과 200일 이동 평균 계산
data['SMA_50'] = data['Close'].rolling(window=50).mean()
data['SMA_200'] = data['Close'].rolling(window=200).mean()

# 시각화
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='종가', color='blue')
plt.plot(data['SMA_20'], label='20일 이동평균선', color='orange')
plt.plot(data['SMA_50'], label='50일 이동평균선', color='green')
plt.plot(data['SMA_200'], label='200일 이동평균선', color='red')
plt.title('애플 주식(주간) 종가 및 이동평균선')
plt.xlabel('날짜')
plt.ylabel('가격($)')
plt.legend()
plt.grid()
plt.show()

이 코드를 실행하면 세 가지 다른 이동평균선이 표시된 차트를 생성할 수 있습니다. 이렇게 각기 다른 이동평균선을 시각화하면 시장 트렌드를 보다 명확히 분석할 수 있습니다.

결론

이번 글에서는 파이썬을 사용하여 이동평균선을 계산하고 시각화하는 방법에 대해 알아보았습니다. 이동평균선은 시장의 추세를 이해하고 매매 신호를 생성하는 데 유용합니다. 우리는 이동평균선을 자동매매 시스템의 한 부분으로 통합할 수 있으며, 이를 통해 보다 스마트한 거래를 할 수 있습니다. 자동매매 시스템 개발에 있어서 이동평균선은 매우 기본적이면서도 효과적인 도구 중 하나입니다.

다음 단계

이러한 기초를 바탕으로, 보다 복잡한 거래 전략을 개발하고, 다른 기술적 지표 또는 알고리즘을 사용하여 시스템을 확장할 수 있습니다. 예를 들어, RSI(상대 강도 지수)와 함께 이동평균선을 사용할 수도 있습니다. 자신의 전략을 다양화하고 실험해 보십시오!

참고문헌