백테스트 시스템 구축 – 과거 데이터로 전략 검증하기 (18)

2025. 8. 3. 05:58프로젝트 (Project)/바이낸스 코인 자동거래

반응형

18. 백테스트 시스템 구축 – 과거 데이터로 전략 검증하기

자동매매 전략이 실전에서 잘 작동하기 위해서는 과거 데이터로 충분히 테스트해야 합니다. 이번 편에서는 Binance에서 과거 시세 데이터를 받아 백테스트 시스템을 구축하는 방법을 소개합니다.


18-1. 백테스트란?

백테스트는 과거의 시장 데이터를 기준으로 전략을 적용해 성과를 확인하는 작업입니다. 이를 통해 전략의 신뢰도, 수익률, 리스크 지표 등을 미리 판단할 수 있습니다.


18-2. 데이터 수집 – Binance에서 CSV 저장

우리는 Python의 ccxt 라이브러리를 활용하여 과거 시세를 수집할 수 있습니다.


pip install ccxt

import ccxt
import pandas as pd
import time

exchange = ccxt.binance()
symbol = 'BTC/USDT'
timeframe = '1h'  # 1시간봉
limit = 1000

ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
df.to_csv("BTCUSDT_1h.csv", index=False)

※ 더 많은 데이터를 원하면 since 파라미터와 루프를 이용해 추가 다운로드 가능


18-3. 간단한 백테스트 전략 적용

가장 기초적인 전략으로, 단순 이동 평균(SMA) 교차 전략을 적용해봅니다.


df = pd.read_csv("BTCUSDT_1h.csv")

df['SMA_fast'] = df['close'].rolling(window=5).mean()
df['SMA_slow'] = df['close'].rolling(window=20).mean()

df['position'] = 0
df.loc[df['SMA_fast'] > df['SMA_slow'], 'position'] = 1
df.loc[df['SMA_fast'] < df['SMA_slow'], 'position'] = -1

df['returns'] = df['close'].pct_change()
df['strategy'] = df['position'].shift(1) * df['returns']

total_return = (1 + df['strategy']).prod() - 1
print(f"총 전략 수익률: {total_return*100:.2f}%")

이 결과를 통해 전략이 과거에 어떤 성과를 냈는지 정량적으로 평가할 수 있습니다.


18-4. 고도화 방향

  • 슬리피지/수수료 반영
  • 다중 종목 백테스트 지원
  • Win-rate, MDD 등 리스크 지표 계산

단순 전략부터 정교한 전략까지 적용 가능하며, 실전 대응력을 키울 수 있습니다.


마무리 및 다음 편 예고

이번 편에서는 백테스트 시스템의 개념과 구조를 만들고, 실제 전략의 검증을 수행해보았습니다. 다음 편에서는 Streamlit 기반 대시보드를 구축하여 전략의 수익률과 현재 상태를 실시간 시각화해보겠습니다.

 

 

반응형