작성자: 조광형
작성일: 2024년 11월 26일
서론
비트코인과 같은 암호화폐 시장의 변동성이 커짐에 따라, 머신러닝과 딥러닝을 활용한 자동매매 시스템이 주목받고 있습니다. 이러한 시스템은 실시간 가격 데이터를 분석하여 매수 또는 매도 결정을 자동으로 내릴 수 있도록 설계됩니다. 본 글에서는 거래소 API를 활용한 실시간 가격 데이터 수집과 함께, 수집된 데이터를 정리하고 정규화하는 전처리 기법에 대해서 자세히 설명하겠습니다.
1. 거래소 API를 이용한 실시간 가격 데이터 수집
암호화폐 거래소들은 사용자가 실시간으로 가격 데이터를 수집할 수 있도록 API를 제공합니다. 여기서는 대표적인 거래소 중 하나인 바이낸스(Binance)를 예로 들어, 실시간 가격 데이터를 수집하는 방법을 설명하겠습니다.
1.1 바이낸스 API 키 발급
바이낸스 API를 사용하기 위해서는 먼저 API 키를 발급받아야 합니다. 다음 단계에 따라 API 키를 생성하세요:
- 바이낸스 계정에 로그인합니다.
- 상단 메뉴에서 ‘API Management’를 클릭합니다.
- 새 API 키를 생성하고, 이 키를 안전한 장소에 저장합니다.
- API 키와 시크릿 키를 사용하여 API에 접근합니다.
1.2 Python에서 Binance API 사용하기
Python을 사용하여 바이낸스 API에 접근하기 위해 ccxt
라이브러리를 설치합니다. 이 라이브러리는 여러 거래소의 API를 통합하여 관리해주는 유용한 도구입니다.
pip install ccxt
다음 코드는 바이낸스에서 비트코인(BTC) 가격 데이터를 실시간으로 수집하는 예제입니다.
import ccxt
import time
# 바이낸스 API 객체 생성
binance = ccxt.binance({'enableRateLimit': True})
def fetch_btc_price():
# 비트코인 가격 데이터 수집
ticker = binance.fetch_ticker('BTC/USDT')
return ticker['last']
while True:
price = fetch_btc_price()
print(f'현재 비트코인 가격: {price} USDT')
time.sleep(5) # 5초마다 가격을 업데이트합니다.
2. 데이터 수집 및 저장
수집한 데이터를 저장하기 위해 pandas 라이브러리를 사용합니다. 이를 통해 데이터 프레임 생성 및 CSV 파일로 저장할 수 있습니다.
2.1 Pandas 라이브러리 설치
pip install pandas
2.2 데이터 프레임 생성 및 CSV 파일로 저장하는 예제 코드
아래 코드는 수집한 비트코인 가격 데이터를 데이터 프레임으로 변환하고 CSV 파일로 저장하는 방법을 보여줍니다.
import pandas as pd
# 빈 데이터프레임 생성
df = pd.DataFrame(columns=["timestamp", "price"])
while True:
price = fetch_btc_price()
timestamp = pd.Timestamp.now()
# 데이터 추가
df = df.append({"timestamp": timestamp, "price": price}, ignore_index=True)
# 5분마다 파일로 저장
if len(df) % 60 == 0: # 5분에 하나의 데이터 수집
df.to_csv('btc_price_data.csv', index=False)
print("데이터가 CSV 파일에 저장되었습니다.")
time.sleep(5) # 5초마다 가격을 업데이트합니다.
3. 수집된 데이터의 전처리
데이터 수집 후, 머신러닝 모델을 학습시키기 전에 데이터를 전처리해야 합니다. 전처리 과정은 본질적으로 데이터의 품질을 높이고 학습 효과를 극대화하는 데 목적이 있습니다.
3.1 데이터 정리
수집한 데이터를 정리하는 과정은 결측치 처리, 중복값 제거와 같은 작업을 포함합니다.
3.2 결측치 처리
# 결측치 처리
df = df.fillna(method='ffill') # 이전 값으로 결측치 채우기
3.3 중복값 제거
# 중복값 제거
df = df.drop_duplicates(subset=["timestamp"], keep='last')
3.4 데이터 정규화
머신러닝 모델의 효율성을 높이기 위해 데이터를 정규화합니다. 여기서는 Min-Max 정규화를 사용합니다.
# Min-Max 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df['normalized_price'] = scaler.fit_transform(df[['price']])
4. 머신러닝 모델 적용
전처리 과정을 완료한 데이터를 바탕으로 머신러닝 모델을 학습시킬 수 있습니다. 여기서는 간단한 LSTM(Long Short-Term Memory) 모델을 사용하여 가격 예측 모델을 구현하겠습니다.
4.1 LSTM 모델을 위한 데이터 변환
LSTM 모델은 시계열 데이터에 적합한 모델입니다. 데이터를 일정한 시간 순서로 나누어 모델에 입력해야 합니다. 아래 코드에서는 데이터셋을 생성하는 방법을 보여줍니다.
import numpy as np
def create_dataset(data, time_step=1):
X, Y = [], []
for i in range(len(data)-time_step-1):
X.append(data[i:(i+time_step), 0])
Y.append(data[i + time_step, 0])
return np.array(X), np.array(Y)
# 정규화된 데이터로 변환
data = df['normalized_price'].values
data = data.reshape(-1, 1)
# 데이터셋 생성
X, Y = create_dataset(data, time_step=10)
X = X.reshape(X.shape[0], X.shape[1], 1) # LSTM input shape
4.2 LSTM 모델 구성 및 학습
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
# LSTM 모델 생성
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1)) # 다음 가격 예측
model.compile(optimizer='adam', loss='mean_squared_error')
# 모델 학습
model.fit(X, Y, epochs=50, batch_size=32)
결론
본 글에서는 딥러닝과 머신러닝을 활용한 비트코인 자동매매 시스템의 구성 요소 중 데이터 수집 및 전처리에 대해 자세히 설명하였습니다. 바이낸스 API를 사용하여 실시간 가격 데이터를 수집하고, pandas를 통해 데이터를 구조화한 후, 정규화 및 시계열 데이터셋 생성을 통해 LSTM 모델을 학습하는 과정을 살펴보았습니다. 이러한 프로세스는 자동매매 시스템의 기본적인 틀을 구축하는 데 있어 중요한 요소입니다.
향후 이 모델을 기반으로 더 복잡한 전략, 특성 및 하이퍼파라미터 조정 등을 통해 더 나은 예측 성능을 도모할 수 있을 것입니다. 비트코인 자동매매 시스템의 구현은 시간과 노력이 필요한 과정이며, 지속적인 데이터 수집 및 모델 개선이 필수적입니다.