
Walk-Forward Backtest와 Adaptive Percentile 전략 구현
최근 개인 프로젝트로 AI 기반 자동 트레이딩 시스템을 개발하기 시작했다.
목표는 단순한 백테스트가 아니라 실제로 24시간 돌아가는 AI 트레이딩 봇을 만드는 것이다.
Day 1에서는 다음과 같은 핵심 기능들을 구현했다.
- Feature Engineering 파이프라인 구축
- LightGBM 기반 가격 방향 예측 모델
- Percentile 기반 트레이딩 전략
- Walk-Forward Backtesting
- Regime Adaptive Percentile 전략
이번 글에서는 현재까지 구현한 시스템 구조와 실험 결과를 정리해보려고 한다.
프로젝트 목표
이 프로젝트의 목표는 다음과 같다.
- 머신러닝 기반 시장 방향 예측 모델 구축
- 백테스트 기반 전략 검증 시스템 구축
- Walk-forward 검증을 통한 과적합 방지
- 최종적으로 AWS에서 24시간 동작하는 트레이딩 봇 개발
단순히 모델 정확도를 높이는 것이 아니라 실제 전략 성능(Sharpe, Drawdown 등)을 기준으로 시스템을 개선하는 것이 목표다.
데이터
현재 데이터는 Binance BTCUSDT 15분봉을 사용하고 있다.
예측 문제는 다음과 같이 정의했다.
현재 시점 → 3시간 뒤 가격 상승 여부 예측
※ target_horizon = 12 candles (15분 × 12 = 3시간)
Feature Engineering
현재 사용 중인 주요 피처는 다음과 같다.
가격 기반
- return_1
- return_3
- return_5
- log_return
추세 지표
- SMA 10
- SMA 20
- SMA 50
- SMA 100
- SMA 200
- SMA ratio
모멘텀 지표
- RSI
- MACD
- MACD histogram
변동성
- ATR
- Bollinger Band width
- Volatility
거래량
- Volume change
- Volume z-score
특히 모델 중요도를 보면 다음 피처들이 중요하게 나타났다.
1. sma_50_200_ratio
2. atr_ratio
3. volatility_20
4. bollinger_width
▶︎ 추세 + 변동성 기반 신호가 가장 강하게 작동하고 있다.
Baseline Model
모델은 LightGBM classifier를 사용했다.
선택한 이유는 다음과 같다.
- 트리 기반 모델이라 feature scaling 불필요
- 금융 데이터에서 과적합에 비교적 강함
- 빠른 학습 속도
모델은 다음 값을 예측한다.
P(price_up)
Percentile 기반 트레이딩 전략
예측 확률을 그대로 사용하지 않고
percentile 기준으로 트레이딩 신호를 생성했다.
(예시)
pred_prob >= 90 percentile → LONG
pred_prob <= 10 percentile → SHORT
이 방식의 장점은
- 시장 상황에 따라 signal threshold 자동 조정
- 극단적인 확률에서만 트레이드 발생
- 특정 임계값을 넘으면 매수/매도를 하는 방식은 거래량이 많아져 수수료때문에 다음과 같이 바꾸었다.
Regime Adaptive Percentile 전략
여기서 한 단계 더 개선한 전략이
Regime Adaptive Percentile이다.
시장 상태에 따라 전략을 다르게 적용한다.
- 상승장 ➡︎ LONG만 허용
- 하락장 ➡︎ LONG만 허용
시장 레짐은 다음 기준으로 판단한다.
SMA 50 >= SMA 200 → Bull Market
SMA 50 < SMA 200 → Bear Market
▶︎ 추세 방향에 맞는 트레이드만 허용하는 전략
Walk-Forward Backtesting
금융 모델에서 가장 중요한 문제는 과적합이다.
일반적인 Train/Test split은
시간 의존성을 제대로 반영하지 못한다.
그래서 Walk-Forward Validation을 구현했다.
구조는 다음과 같다.
Train → Test
Train → Test
Train → Test
즉 과거 데이터로 학습하고 미래 데이터로 계속 테스트하는 방식이다.
Walk-Forward 결과
현재 baseline 결과는 다음과 같다.
Average Accuracy: 0.525
Average ROC AUC: 0.5506
► 그냥 랜덤이랑 거의 비슷하다고 볼 수 있다....
전략 성능
Walk-forward 결과
Average Strategy Return: -5.6%
Average Market Return: +8.9%
Average Sharpe: -16.27
Average Max Drawdown: -7.5%
현재 전략은 시장 대비 성능이 좋지 않다.
하지만 중요한 점은
- 모델 자체는 약간의 예측력을 가지고 있음
- feature importance도 합리적인 구조
즉 전략 설계와 feature engineering을 개선할 여지가 많다.
다음 단계
다음 개발 단계에서는 다음을 진행할 예정이다.
1. Feature Engineering 개선
추가 예정 피처
- Trend strength
- Volatility regime
- Momentum z-score
- Mean reversion signal
2. Multi-horizon prediction
15분,1시간, 4시간 예측모델 추가.
3. 실시간 트레이딩 시스템
최종 목표는
model → signal → order
구조의 자동 트레이딩 봇 구축.
근데 이거 좀 하다가 안될거 같으면 유기하고 다른 프로젝트 시작할 가능성이 높다.
'프로젝트' 카테고리의 다른 글
| AI Trading Bot 개발기 — Day 5 (0) | 2026.04.01 |
|---|---|
| AI Trading Bot 개발기 — Day 4 (2) | 2026.03.24 |
| AI Trading Bot 개발기 — Day 3 (0) | 2026.03.19 |
| AI Trading Bot 개발기 — Day 2 (0) | 2026.03.18 |