쉽게 따라 만드는 파이썬 주식 자동매매 시스템
주식 투자에 대한 관심이 높아지면서, 많은 사람들이 자동매매 시스템을 도전해보고 싶어합니다. 자동매매 시스템은 특정한 전략에 따라 주식을 사고 파는 프로그램을 의미합니다. 오늘은 간단한 파이썬 기반의 주식 자동매매 시스템을 만드는 방법을 소개하겠습니다. 이 시스템을 통해 기초적인 자동매매 프로세스를 이해하고 적용해 볼 수 있습니다.
1. 필요한 라이브러리 설치
주식 자동매매 시스템을 만들기 위해 일정한 라이브러리가 필요합니다. 아래의 라이브러리를 설치하세요.
pip install pandas numpy matplotlib yfinance
- pandas: 데이터 처리에 유용한 라이브러리입니다.
- numpy: 수치 연산을 위한 라이브러리입니다.
- matplotlib: 데이터 시각화를 위한 라이브러리입니다.
- yfinance: 야후 파이낸스 API를 통해 주식 데이터를 가져오는 라이브러리입니다.
2. 주식 데이터 가져오기
주식 데이터를 가져오기 위해 yfinance를 사용합니다. 아래의 코드를 작성해 원하는 주식의 데이터를 로드해 봅시다.
import yfinance as yf
# 주식 티커 정의 (예: 애플)
ticker = 'AAPL'
# 데이터 가져오기 (예: 1년치 일일 데이터)
data = yf.download(ticker, period='1y', interval='1d')
print(data.head())
3. 간단한 이동 평균 전략
자동매매 시스템의 핵심은 매매 전략입니다. 여기서는 간단한 이동 평균 교차 전략을 사용해 보겠습니다. 20일과 50일 이동 평균을 계산하여 매매 결정을 내리는 예제입니다.
# 이동 평균 계산
data['SMA20'] = data['Close'].rolling(window=20).mean()
data['SMA50'] = data['Close'].rolling(window=50).mean()
# 매수 신호 및 매도 신호 생성
data['Signal'] = 0
data['Signal'][20:] = np.where(data['SMA20'][20:] > data['SMA50'][20:], 1, 0)
data['Position'] = data['Signal'].diff()
print(data[['Close', 'SMA20', 'SMA50', 'Signal', 'Position']].tail())
4. 거래 시뮬레이션
직접적인 매매를 진행하기 전에 모의 거래를 통한 백테스팅을 해보겠습니다. 실제 거래에서는 여러 가지 조건을 고려해야 하지만, 여기서는 단순화를 위해 매수와 매도 신호에 따라 수익률을 계산합니다.
initial_capital = 10000
shares = 0
capital = initial_capital
for i in range(len(data)):
if data['Position'][i] == 1: # 매수
shares += capital // data['Close'][i]
capital -= shares * data['Close'][i]
elif data['Position'][i] == -1: # 매도
capital += shares * data['Close'][i]
shares = 0
capital += shares * data['Close'].iloc[-1] # 마지막 주가로 보유 주식 매도
profit = capital - initial_capital
print(f"Initial Capital: {initial_capital}, Final Capital: {capital}, Profit: {profit}")
5. 시각화
마지막으로, 주가와 이동 평균을 시각화하여 매매 신호를 보기 좋게 나타낼 수 있습니다.
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price', alpha=0.5)
plt.plot(data['SMA20'], label='20-Day SMA', alpha=0.75)
plt.plot(data['SMA50'], label='50-Day SMA', alpha=0.75)
# 매수와 매도 신호 표시
plt.plot(data[data['Position'] == 1].index,
data['SMA20'][data['Position'] == 1],
'^', markersize=10, color='g', lw=0, label='Buy Signal')
plt.plot(data[data['Position'] == -1].index,
data['SMA20'][data['Position'] == -1],
'v', markersize=10, color='r', lw=0, label='Sell Signal')
plt.title(f'{ticker} Price and Trading Signals')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()
6. 결론
이렇게 간단한 파이썬 주식 자동매매 시스템을 구축해보았습니다. 실제로 이 시스템을 활용하기 위해서는 여러 가지 복잡한 요소를 고려해야 하지만, 기본적인 메커니즘을 이해하는 데 도움이 될 것입니다. 앞으로 더 발전된 시스템을 만들기 위해 다양한 전략과 데이터를 탐구해 보는 것도 좋겠죠. 주식 투자에 있어 자동매매 시스템은 강력한 도구가 될 수 있으니, 많은 실험을 통해 나만의 전략을 개발해 보세요!