머신러닝 및 딥러닝 알고리즘 트레이딩, 이동 평균 모델의 구축

현대 금융 시장에서 알고리즘 트레이딩은 많은 투자자와 트레이더에게 필수적인 도구가 되었습니다. 특히 머신러닝(ML) 및 딥러닝(DL) 기술을 활용한 자동매매 시스템은 그 효율성과 정확성 덕분에 각광받고 있습니다. 이 강좌에서는 이동 평균(MA) 모델을 중심으로 머신러닝 및 딥러닝 알고리즘을 활용한 트레이딩 시스템을 구축하는 방법에 대해 자세히 다루겠습니다.

1. 이동 평균(MA) 개요

이동 평균은 주식, 상품, 외환 등 다양한 자산의 가격 추세를 분석하는 데 사용되는 기법입니다. 주식의 가격 변동성을 감소시키고, 장기적인 트렌드를 파악하기 위해 계산됩니다. 이동 평균에는 여러 종류가 있으며, 그 중에서도 가장 일반적으로 사용되는 두 가지는 간단 이동 평균(SMA)과 지수 이동 평균(EMA)입니다.

1.1 간단 이동 평균(SMA)

SMA는 특정 기간의 가격을 단순히 평균하여 계산한 값입니다. 예를 들어, 5일 SMA는 최근 5일간의 종가를 모두 더한 후 5로 나눈 값입니다. SMA는 직관적이며 이해하기 쉽지만, 가격 변화에 대해 민감하지 않은 단점이 있습니다.

1.2 지수 이동 평균(EMA)

EMA는 최근 가격에 더 많은 가중치를 부여하여 계산되므로 최신 가격 변동에 더 민감합니다. 이는 빠르게 변하는 시장에서 더욱 효과적인 지표가 됩니다. EMA는 다음과 같은 공식을 사용하여 계산됩니다:

EMA = (현재 가격 * k) + (이전 EMA * (1 - k))
k = 2 / (N + 1)  // N은 이동 평균을 계산할 기간

2. 머신러닝을 활용한 이동 평균 모델 구축

머신러닝을 적용하는 이동 평균 모델은 과거 데이터를 기반으로 주식의 미래 가격을 예측할 수 있습니다. 다음 단계로 이번 프로젝트에서 사용할 데이터셋을 준비하고, 머신러닝 알고리즘을 선택하여 모델을 구축하는 방법에 대해 알아보겠습니다.

2.1 데이터 준비

주식 데이터가 포함된 CSV 파일을 사용하여 모델을 구축합니다. 일반적으로 주식 데이터는 Open, High, Low, Close, Volume 등의 열로 구성됩니다. 이 데이터를 pandas 라이브러리를 사용하여 불러옵니다:

import pandas as pd

# 데이터 불러오기
data = pd.read_csv('stock_data.csv')
print(data.head())

2.2 데이터 전처리

데이터 전처리는 머신러닝 모델이 더 잘 학습할 수 있도록 하는 중요한 단계입니다. 결측값 처리, 이상치 제거, 특성 선택 및 스케일링 등의 작업이 포함됩니다. 특히, 이동 평균을 계산하기 위한 새로운 열을 추가해야 합니다:

# 결측값 처리
data.fillna(method='ffill', inplace=True)

# 이동 평균 열 추가
data['SMA_5'] = data['Close'].rolling(window=5).mean()
data['EMA_5'] = data['Close'].ewm(span=5, adjust=False).mean()

2.3 특성과 타겟 변수 설정

머신러닝 모델을 훈련시키기 위해 데이터의 입력 특성과 예측할 타겟 변수를 설정해야 합니다. 예를 들어, ‘Close’ 가격에 대한 예측을 진행할 수 있습니다:

X = data[['SMA_5', 'EMA_5', 'Volume']]
y = data['Close'].shift(-1)  # 다음 날의 종가 예측
X = X[:-1]  # 마지막 행 제거
y = y[:-1]

2.4 머신러닝 모델 선택

여러 머신러닝 알고리즘 중에서 Decision Tree, Random Forest, XGBoost 등의 모델을 선택할 수 있습니다. 여기서는 Random Forest를 예시로 들어보겠습니다:

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 훈련
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 성능 평가
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

3. 딥러닝을 활용한 이동 평균 모델 구축

딥러닝을 활용하여 더 복잡한 패턴을 학습하는 이동 평균 모델을 만들어보겠습니다. TensorFlow와 Keras 라이브러리를 사용하여 간단한 인공신경망(ANN)을 구현해보겠습니다.

3.1 데이터 준비 및 전처리

데이터는 머신러닝과 유사하게 준비하지만, 딥러닝 모델의 경우 많은 데이터가 필요하므로 좀 더 긴 기간의 데이터를 사용할 수 있습니다. 또한, 신경망의 입력은 3D 형상이어야 하므로 reshape 작업이 필요합니다:

import numpy as np

# 데이터 스케일링
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data[['Close', 'SMA_5', 'EMA_5', 'Volume']])

# 데이터 reshape
X = []
y = []
for i in range(60, len(scaled_data)):
    X.append(scaled_data[i-60:i])  # 60일 데이터를 입력으로 사용
    y.append(scaled_data[i, 0])   # 예측할 값은 종가
X, y = np.array(X), np.array(y)

3.2 ANN 모델 구축

Keras를 사용하여 인공신경망 모델을 구축합니다. 여기서는 Dense 레이어를 활용한 간단한 구조를 사용하겠습니다:

from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout

model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(25))
model.add(Dense(1))  # 예측할 종가

# 모델 컴파일
model.compile(optimizer='adam', loss='mean_squared_error')

# 모델 훈련
model.fit(X, y, batch_size=32, epochs=50)

3.3 예측 및 성능 평가

훈련된 모델을 사용하여 예측을 수행하고, 성능 평가를 위해 실제 종가와 예측 종가를 비교합니다:

# 예측
predictions = model.predict(X)

# 역정규화
predictions = scaler.inverse_transform(predictions)

# 성능 평가
import matplotlib.pyplot as plt

plt.plot(data['Close'].values, color='blue', label='실제 종가')
plt.plot(range(60, len(predictions) + 60), predictions, color='red', label='예측 종가')
plt.legend()
plt.show()

4. 결과 해석 및 개선 방안

모델을 통해 얻은 예측 결과를 해석하는 것도 중요한 작업입니다. 예측이 실제 가격과 비슷할수록 모델의 성능이 좋은 것입니다. 예측 결과가 부정확하다면, 다음과 같은 개선 방안을 고려할 수 있습니다:

  • 데이터의 양을 늘리기
  • 다양한 특징(Feature) 추가
  • 모델의 하이퍼파라미터 조정
  • 다양한 머신러닝 및 딥러닝 알고리즘 시도

5. 결론

이번 강좌에서는 머신러닝과 딥러닝을 활용한 이동 평균 기반의 알고리즘 트레이딩 모델을 구축하는 방법을 살펴보았습니다. 이동 평균은 기본적이지만 유용한 지표이며, 이를 머신러닝 및 딥러닝과 결합함으로써 보다 정교한 트레이딩 전략을 수립할 수 있습니다. 더 나아가 다양한 데이터셋과 알고리즘을 통해 지속적인 연구와 개발이 필요합니다.

참고 자료