파이썬 자동매매 개발, matplotlib 다양한 그래프 그리기

최근 금융 시장에서는 알고리즘 매매와 자동매매 시스템의 중요성이 날로 증가하고 있습니다.
이러한 시스템의 핵심 기능 중 하나는 데이터를 효과적으로 시각화하는 방법입니다. Python의
matplotlib 라이브러리는 데이터 시각화를 위한 강력하고 유연한 도구로 널리 사용됩니다.
이 포스트에서는 자동 매매 시스템 개발의 기본적인 아이디어와 함께 matplotlib을 사용한
다양한 그래프 그리기 방법에 대해 알아보겠습니다.

1. 자동매매 시스템 소개

자동매매 시스템은 미리 정의된 전략에 따라 시장에 거래를 자동으로 실행하는 소프트웨어입니다.
이 시스템은 차트 분석, 가격 변동, 거래량 등 여러 가지 요소를 기반으로 매입 및 매도를 결정합니다.
파이썬은 이러한 소프트웨어 개발을 위한 매우 범용적인 프로그래밍 언어로, 다양한 라이브러리와 API를 제공하여
쉽게 개발할 수 있습니다.

1.1. 알고리즘 거래의 장점

  • 감정 배제: 시간에 따른 일관된 결정 기준을 유지합니다.
  • 속도: 시장의 변동에 즉각적으로 반응할 수 있습니다.
  • 백테스팅: 과거 데이터를 사용하여 전략을 검토하고 개선할 수 있습니다.

2. 데이터 수집 및 전처리

자동매매 시스템에서 Excel, CSV, 또는 API를 통해 데이터 수집이 가장 기본적인 단계입니다.
주식 데이터는 Yahoo Finance API나 Alpha Vantage API 등을 통해 쉽게 읽어올 수 있습니다.
여기서는 Yahoo Finance API를 활용하여 주식 데이터를 얻는 방법을 소개하겠습니다.

2.1. 필요한 라이브러리 설치

다음 명령어로 필요한 라이브러리를 설치합니다:

pip install yfinance matplotlib pandas

2.2. 주식 데이터 가져오기

아래는 yfinance 라이브러리를 이용하여 주식 데이터를 가져오는 예제 코드입니다.

import yfinance as yf

symbol = 'AAPL'
data = yf.download(symbol, start='2020-01-01', end='2023-01-01')
print(data.head())

3. matplotlib을 사용한 데이터 시각화

matplotlib는 데이터 시각화를 위해 가장 많이 사용되는 Python 라이브러리입니다.
다양한 차트 및 그래프를 생성할 수 있으며, 그리기 위한 간단한 코드 작성으로 가능합니다.

3.1. 기본적인 선 그래프 그리기

시간에 따른 주가의 변화를 나타내기 위해 선 그래프를 그릴 수 있습니다. 아래는
시간별 주가를 시각화하는 예제입니다.

import matplotlib.pyplot as plt

plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='AAPL 종가', color='blue')
plt.title('AAPL 주가 추세')
plt.xlabel('날짜')
plt.ylabel('주가')
plt.legend()
plt.grid()
plt.show()

3.2. 이동평균선 그리기

주가의 추세를 더욱 명확하게 파악하기 위해 이동평균선을 추가할 수 있습니다.
이동평균선은 특정 기간 동안의 평균 주가를 나타내어 시장의 흐름을 파악하는 데 도움이 됩니다.

data['SMA_20'] = data['Close'].rolling(window=20).mean()

plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='AAPL 종가', color='blue')
plt.plot(data['SMA_20'], label='20일 이동평균선', color='orange')
plt.title('AAPL 주가와 이동평균선')
plt.xlabel('날짜')
plt.ylabel('주가')
plt.legend()
plt.grid()
plt.show()

3.3. Candlestick 차트 그리기

matplotlib를 이용한 Candlestick 차트를 그리기 위해서는 별도의 라이브러리가 필요합니다.
mplfinance를 사용하여 Candlestick 차트를 그리는 방법을 알아보겠습니다. 이 차트는
개별 거래일의 시가, 종가, 고가 및 저가 정보를 시각적으로 표현하여 시장의 변동성을 쉽게 파악할 수 있습니다.

pip install mplfinance
import mplfinance as mpf

mpf.plot(data, type='candle', volume=True, title='AAPL Candlestick 차트', 
         ylabel='주가', style='charles')

4. 자동매매 전략 개발

이제 데이터를 시각화했으니, 이를 바탕으로 간단한 자동매매 전략을 개발해 보겠습니다.

4.1. 전략: 이동평균 교차

이동평균 교차 전략은 단기 이동평균선이 장기 이동평균선 위로 교차할 때 매수하고,
아래로 교차할 때 매도하는 전략입니다. 아래는 이를 구현한 예제 코드입니다.

data['SMA_50'] = data['Close'].rolling(window=50).mean()

# 매수 신호 및 매도 신호 생성
data['Signal'] = 0
data['Signal'][20:] = np.where(data['SMA_20'][20:] > data['SMA_50'][20:], 1, 0)
data['Position'] = data['Signal'].diff()

plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='AAPL 종가', alpha=0.5)
plt.plot(data['SMA_20'], label='20일 이동평균선', alpha=0.75)
plt.plot(data['SMA_50'], label='50일 이동평균선', alpha=0.75)

# 매수 신호 점
plt.plot(data[data['Position'] == 1].index, 
         data['SMA_20'][data['Position'] == 1], 
         '^', markersize=10, color='g', label='매수 신호')
# 매도 신호 점
plt.plot(data[data['Position'] == -1].index, 
         data['SMA_20'][data['Position'] == -1], 
         'v', markersize=10, color='r', label='매도 신호')

plt.title('이동평균 교차 전략 - AAPL')
plt.xlabel('날짜')
plt.ylabel('주가')
plt.legend()
plt.grid()
plt.show()

5. 결론

자동매매 시스템의 개발은 데이터 수집과 시각화, 그리고 유효한 매매 전략에 대한 깊은 이해를
요구합니다. matplotlib은 이러한 과정에서 매우 유용한 도구로, 데이터의 흐름과
패턴을 한눈에 확인할 수 있도록 도와줍니다. 다양한 그래프를 통해 시장의 동향을 파악하고,
이를 바탕으로 효과적인 투자 결정을 내릴 수 있습니다. 앞으로도 계속해서 다양한 자동매매 전략을
개발하고, 데이터 시각화 기술을 활용하여 성과를 높이는 방법을 연구해 보길 바랍니다.

6. 참고자료