전략을 만들었으면 바로 실전에 투입하면 안 됩니다. 백테스트(Backtest)로 과거 데이터에서 이 전략이 통했는지 먼저 확인해야 합니다. 오늘은 파이썬으로 간단한 백테스트를 하는 방법을 공유합니다.

백테스트란?
과거 차트 데이터를 가져와서, "만약 이 전략대로 매매했다면 얼마를 벌었을까?"를 시뮬레이션하는 것입니다. 과거에 잘 된 전략이 미래에도 잘 된다는 보장은 없지만, 과거에도 안 되는 전략은 미래에도 안 될 확률이 높습니다.
주의할 점
1. 오버피팅 조심 — 과거 데이터에 너무 맞추면 미래에서는 작동하지 않습니다.
2. 수수료 반영 — 바이비트 선물 수수료(메이커 0.02%, 테이커 0.055%)를 반드시 포함해야 합니다.
3. 슬리피지 고려 — 실제 체결가는 주문가와 다를 수 있습니다. 보통 0.05~0.1%를 슬리피지로 잡습니다.
간단한 백테스트 코드
import pandas as pd
def simple_backtest(df, initial_balance=1000):
balance = initial_balance
position = None
trades = []
for i in range(1, len(df)):
prev = df.iloc[i-1]
curr = df.iloc[i]
# 골든크로스 + 가격 > EMA200 → 롱
if (prev['ema_21'] <= prev['ema_55'] and
curr['ema_21'] > curr['ema_55'] and
curr['close'] > curr['ema_200'] and
position is None):
entry_price = curr['close']
atr = curr['atr']
sl = entry_price - atr * 1.5
tp = entry_price + atr * 2.0
position = {'entry': entry_price, 'sl': sl, 'tp': tp, 'type': 'LONG'}
# 포지션 있을 때 손절/익절 체크
if position and position['type'] == 'LONG':
if curr['low'] <= position['sl']:
pnl = position['sl'] - position['entry']
balance += pnl * (balance * 0.02 / abs(position['entry'] - position['sl']))
trades.append({'pnl': pnl, 'result': 'SL'})
position = None
elif curr['high'] >= position['tp']:
pnl = position['tp'] - position['entry']
balance += pnl * (balance * 0.02 / abs(position['entry'] - position['sl']))
trades.append({'pnl': pnl, 'result': 'TP'})
position = None
wins = len([t for t in trades if t['result'] == 'TP'])
total = len(trades)
win_rate = wins / total * 100 if total > 0 else 0
print(f"총 거래: {total}회")
print(f"승률: {win_rate:.1f}%")
print(f"최종 잔고: ${balance:.2f}")
print(f"수익률: {(balance/initial_balance - 1)*100:.1f}%")
return trades
마무리
백테스트 결과가 좋다고 바로 실전에 투입하면 안 됩니다. 반드시 테스트넷에서 2주 이상 돌려본 후에 소액으로 실전을 시작하세요. 다음 글에서는 테스트넷에서 봇을 실전처럼 돌리는 방법을 다루겠습니다.
※ 이 글은 투자 권유가 아닙니다. 암호화폐 투자는 원금 손실 위험이 있으며, 모든 투자 판단과 책임은 투자자 본인에게 있습니다.
'투자 재테크' 카테고리의 다른 글
| 텔레그램으로 자동매매 알림 받기 — 봇이 거래할 때 실시간 통보 (0) | 2026.04.14 |
|---|---|
| 바이비트 테스트넷으로 자동매매 봇 안전하게 테스트하기 (0) | 2026.04.14 |
| ATR로 손절/익절 자동 계산하기 — 리스크 관리의 핵심 (0) | 2026.04.14 |
| EMA 크로스 전략으로 매매 신호 만들기 — 바이비트 자동매매 실전 코드 (0) | 2026.04.13 |
| 파이썬 pybit 설치부터 첫 API 호출까지 — 바이비트 자동매매 기초 (0) | 2026.04.13 |