[알고리즘 트레이딩] 비지도 학습을 활용한 트레이딩 봇 개발
비지도 학습을 활용한 트레이딩 봇 개발
1. 개요
최근 트레이딩 전략을 개선하기 위해 비지도 학습(Unsupervised Learning) 을 활용하여 매수/매도 신호를 탐색하는 방법을 적용했다. 기존에는 볼린저 밴드, EMA, MFI 등의 지표를 활용한 규칙 기반(Rule-based) 방식이었으나, 사람이 직접 정의한 규칙을 따르는 한계가 있었다.
비지도 학습을 활용하면 사람이 쉽게 인식하지 못하는 패턴 을 발견하고, 시장의 다양한 상태를 분류하여 보다 유연한 매매 전략을 구축할 수 있다.
2. 기존 코드 문제점
기존 트레이딩 봇은 다음과 같은 방식으로 동작했다:
- 볼린저 밴드, EMA 기울기, MFI 등의 지표를 기반으로 매매 신호 판단
- 정해진 기준을 충족하면 매수/매도 신호 출력
- 고정된 규칙으로 인해 시장 변화에 적응하기 어려움
이 방식은 시장의 복잡한 움직임을 반영하기 어렵고, 최적의 규칙을 찾는 것이 쉽지 않다는 문제가 있었다.
3. 개선 방향
이를 해결하기 위해 K-Means 클러스터링을 도입하여 시장 상태를 자동으로 분류 하는 방식으로 변경했다.
✅ 적용한 변경 사항
- K-Means 클러스터링을 활용하여 시장 상태를 3가지 군집으로 분류
- 특성 엔지니어링을 통해 의미 있는 입력 변수 선정
- 사람이 직접 설정하는 매매 규칙 제거
- 클러스터 결과를 바탕으로 매매 신호 판단
4. 데이터 처리 및 특성 엔지니어링
트레이딩에 활용할 데이터는 Upbit의 OHLCV 데이터 를 기반으로 한다. 이 데이터를 가공하여 시장 상태를 설명할 수 있는 특징(feature) 을 추출했다.
📌 주요 특성 (Feature) 목록
특성명 | 설명 |
---|---|
bollinger_%b |
현재 가격이 볼린저 밴드 내에서 어디 위치하는지 |
ema_slope |
20일 지수이동평균(EMA)의 기울기 |
mfi |
자금 흐름 지표(MFI) |
atr |
평균 진폭(ATR, 변동성 측정) |
cci |
상품 채널 지수(CCI) |
macd |
MACD (12, 26) 차이 |
rsi |
상대강도지수(RSI, 14) |
이러한 특징을 정규화(Scaling)한 후 K-Means 모델에 입력했다.
5. K-Means 클러스터링 적용
K-Means는 데이터를 군집(Cluster)으로 나누는 대표적인 비지도 학습 알고리즘이다. 이를 활용하여 시장 상태를 3가지로 분류했다:
- Cluster 0: 안정적이거나 상승 가능성이 있는 시장 → 매수 신호 가능
- Cluster 1: 중립적인 시장 상태 → 매매 신호 없음
- Cluster 2: 변동성이 크거나 하락 가능성이 있는 시장 → 매도 신호 가능
이제 사람이 직접 매매 규칙을 정의할 필요 없이 시장 상태를 자동으로 분류 하여 매매 타이밍을 찾을 수 있다.
6. 트레이딩 봇 코드 변경 사항
K-Means 기반 트레이딩 봇의 핵심 변경 내용은 다음과 같다:
📌 주요 코드 변경 내용
# 기존 매수/매도 규칙 제거 후 K-Means 적용
def cluster_market_conditions(df, n_clusters=3):
df = feature_engineering(df)
features = df[['bollinger_%b', 'ema_slope', 'mfi', 'atr', 'cci', 'macd', 'rsi']]
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)
kmeans = KMeans(n_clusters=n_clusters, random_state=42, n_init=10)
df['cluster'] = kmeans.fit_predict(features_scaled)
return df
# 클러스터 기반 매매 신호 판단
def check_trading_signal(df):
last_cluster = df['cluster'].iloc[-1]
if last_cluster == 0:
return 'BUY'
elif last_cluster == 2:
return 'SELL'
return None
이제 군집 분석을 통해 시장 상태를 자동 분류하고, 매매 신호를 도출 한다.
7. 결과 및 개선 방향
🔹 기대되는 효과
✅ 사람이 직접 매매 규칙을 설정하지 않아도 자동으로 패턴을 학습할 수 있음
✅ 새로운 시장 상황에서도 적응할 가능성이 높음
✅ 기존보다 유연한 매매 신호 판단 가능
🔹 개선할 점
- 클러스터 개수를 최적화 하는 과정 필요
- 군집별 성향 분석을 위한 백테스트 적용 필요
- 더 많은 특성(feature) 추가하여 정확도 개선 가능
앞으로 다양한 머신러닝 모델(RNN, LSTM 등)과 비교 하면서 전략을 고도화할 예정이다.
8. 결론
이번 개선을 통해 K-Means 클러스터링을 활용하여 시장 상태를 자동으로 분류하고, 매수/매도 신호를 생성하는 방법 을 적용했다.
비지도 학습을 활용하면 기존의 고정된 규칙 기반 전략보다 더 유연하고 적응력이 높은 트레이딩 시스템 을 구축할 수 있다.
향후 더 많은 데이터를 활용하여 군집 분석의 신뢰성을 높이고, 다른 머신러닝 모델과 비교하는 실험을 진행 할 계획이다. 🚀
댓글
댓글 쓰기