[알고리즘 트레이딩] 비지도 학습을 활용한 트레이딩 봇 개발

 

비지도 학습을 활용한 트레이딩 봇 개발

1. 개요

최근 트레이딩 전략을 개선하기 위해 비지도 학습(Unsupervised Learning) 을 활용하여 매수/매도 신호를 탐색하는 방법을 적용했다. 기존에는 볼린저 밴드, EMA, MFI 등의 지표를 활용한 규칙 기반(Rule-based) 방식이었으나, 사람이 직접 정의한 규칙을 따르는 한계가 있었다.

비지도 학습을 활용하면 사람이 쉽게 인식하지 못하는 패턴 을 발견하고, 시장의 다양한 상태를 분류하여 보다 유연한 매매 전략을 구축할 수 있다.


2. 기존 코드 문제점

기존 트레이딩 봇은 다음과 같은 방식으로 동작했다:

  1. 볼린저 밴드, EMA 기울기, MFI 등의 지표를 기반으로 매매 신호 판단
  2. 정해진 기준을 충족하면 매수/매도 신호 출력
  3. 고정된 규칙으로 인해 시장 변화에 적응하기 어려움

이 방식은 시장의 복잡한 움직임을 반영하기 어렵고, 최적의 규칙을 찾는 것이 쉽지 않다는 문제가 있었다.


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 클러스터링을 활용하여 시장 상태를 자동으로 분류하고, 매수/매도 신호를 생성하는 방법 을 적용했다.

비지도 학습을 활용하면 기존의 고정된 규칙 기반 전략보다 더 유연하고 적응력이 높은 트레이딩 시스템 을 구축할 수 있다.

향후 더 많은 데이터를 활용하여 군집 분석의 신뢰성을 높이고, 다른 머신러닝 모델과 비교하는 실험을 진행 할 계획이다. 🚀

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

공압 속도 제어: 미터인 vs 미터아웃

제너 다이오드에 저항을 연결하는 이유

회로 차단기 용량 선정하는 방법

PLC 출력 형태

[PLC] 채터링 현상과 입력 필터

NPN, PNP 트랜지스터 차이점

[전기 기초] 저항의 정격전력(Watt) 표기의 의미

[python] 파이썬 pyplot 2차원 그래프 샘플 코드