Language
검색

백테스트 도구 비교: Vectorbt·Backtrader·Freqtrade, 무엇으로 갈리나

어둠 속을 흐르는 부드러운 빛의 결을 담은 장노출 사진

·

조회수 7
백테스트 도구는 무엇을 기준으로 고르는가?
전략의 성격과 다음 단계가 결정한다. 파라미터 수천 개를 빠르게 훑어야 하면 벡터 연산 기반의 Vectorbt, 주문·포지션 로직이 복잡해 이벤트 단위로 다뤄야 하면 Backtrader, 검증 후 곧바로 실거래로 넘어갈 계획이면 봇까지 포함된 Freqtrade가 맞다.

백테스트 도구를 고르는 질문은 사실 “어떤 전략을 검증하려 하는가”와 “검증 다음에 무엇을 할 것인가”다. 이 둘이 정해지면 선택은 거의 자동으로 나온다.

그리고 도구보다 중요한 게 하나 더 있다. 백테스트 결과를 무의미하게 만드는 오류들이다. 이걸 모르면 어떤 도구를 써도 화려한 수익 곡선과 실전 손실을 동시에 얻는다. 도구 비교 다음에 그 얘기를 한다.

세 도구의 성격

Vectorbt — 속도와 파라미터 탐색

전체 가격 데이터를 배열로 놓고 벡터 연산으로 한 번에 계산한다. 반복문으로 캔들을 하나씩 도는 방식과 근본적으로 다르다. 그래서 파라미터 조합 수천 개를 한꺼번에 돌리는 작업에서 압도적이다.

import vectorbt as vbt

price = vbt.YFData.download("BTC-USD").get("Close")

# RSI 임계값 조합을 한 번에 탐색
rsi = vbt.RSI.run(price, window=[7, 14, 21])
entries = rsi.rsi_crossed_below(30)
exits = rsi.rsi_crossed_above(70)

pf = vbt.Portfolio.from_signals(price, entries, exits, fees=0.001)
print(pf.total_return())

약점은 로직이 복잡해질 때다. “직전 포지션의 손익에 따라 다음 주문 크기를 바꾼다” 같은 순차 의존이 들어가면 벡터화가 어려워진다. 신호 기반의 단순한 진입·청산 전략에 가장 잘 맞는다.

Backtrader — 이벤트 기반의 표준

캔들을 하나씩 순회하며 그때마다 전략 코드를 호출한다. 실제 거래와 시간 흐름이 같아서 복잡한 주문 로직을 그대로 표현할 수 있다. 지정가·손절·추적손절 주문, 분할 진입, 포지션별 관리가 자연스럽다.

import backtrader as bt

class RsiStrategy(bt.Strategy):
    params = dict(period=14, low=30, high=70)

    def __init__(self):
        self.rsi = bt.indicators.RSI(period=self.p.period)

    def next(self):
        if not self.position and self.rsi < self.p.low:
            self.buy()
        elif self.position and self.rsi > self.p.high:
            self.close()

약점은 속도다. 파이썬 반복문이라 파라미터를 대량으로 훑는 작업에는 부적합하다. 자료가 많고 예제가 풍부해 배우기 좋다는 점은 큰 장점이다.

Freqtrade — 백테스트에서 실거래까지

백테스트 프레임워크가 아니라 거래 봇이다. 백테스트, 파라미터 최적화, 페이퍼 트레이딩, 실거래가 하나의 도구 안에 있고, 거래소 연동과 텔레그램 알림 같은 운영 요소가 기본 제공된다.

freqtrade download-data --exchange binance -t 1h --days 365
freqtrade backtesting --strategy MyStrategy --timerange 20250101-20260101
freqtrade hyperopt --strategy MyStrategy --hyperopt-loss SharpeHyperOptLoss

강점은 백테스트와 실거래 코드가 같다는 점이다. 검증한 전략을 옮겨 적는 과정에서 생기는 불일치가 없다. 약점은 프레임워크의 구조를 따라야 한다는 것과, 암호화폐에 특화돼 있다는 것이다.

어느 것을 쓸까

상황 선택
파라미터 수천 개 탐색, 아이디어 빠른 검증 Vectorbt
복잡한 주문·포지션 로직, 학습 목적 Backtrader
검증 후 바로 실거래, 운영까지 한 번에 Freqtrade
여러 자산·시장을 함께 Backtrader 또는 Vectorbt

실무적으로는 조합이 흔하다. Vectorbt로 후보 파라미터 영역을 좁히고, 그 결과를 Freqtrade나 Backtrader에서 현실적인 수수료·슬리피지 조건으로 재검증하는 식이다.

백테스트를 무의미하게 만드는 것들

도구보다 중요하다.

1. 미래 참조 편향(Lookahead Bias)

그 시점에 알 수 없었던 정보를 쓰는 것. 가장 흔하고 가장 치명적이다.

  • 아직 안 끝난 캔들의 종가로 매매 판단을 한다
  • 지표를 계산할 때 전체 기간 데이터로 정규화한다
  • 현재 상장된 종목만으로 과거를 테스트한다(생존 편향)

증상은 명확하다. 비현실적으로 매끄러운 수익 곡선이다. 백테스트 수익률이 너무 좋으면 전략이 훌륭한 게 아니라 버그일 가능성이 훨씬 높다.

2. 비용 누락

  • 거래 수수료: 매수·매도 양쪽에 붙는다. 단타일수록 치명적이다
  • 슬리피지: 원하는 가격에 체결되지 않는다. 유동성이 낮은 종목에서 크다
  • 선물 펀딩비: 무기한 선물에서는 포지션 유지 비용이 계속 나간다. 이걸 빼면 장기 보유 전략의 결과가 통째로 바뀐다

수수료 0으로 돌린 백테스트는 검증이 아니라 상상이다.

3. 데이터 품질

  • 거래소 API의 과거 데이터에 결측 캔들이 있다
  • 거래소마다 가격이 다르다. 백테스트한 거래소와 실거래 거래소를 맞춰야 한다
  • 상장 폐지된 코인을 빼고 테스트하면 결과가 좋게 나온다(생존 편향)

4. 과최적화

파라미터를 수천 개 훑어 가장 좋은 조합을 고르는 것 자체가 위험하다. 과거에 가장 잘 맞은 조합은 대체로 미래에 안 맞는다. 최소한의 방어는 기간을 나누는 것이다. 앞 기간으로 최적화하고 뒤 기간(한 번도 안 본 데이터)으로 검증한다. 뒤 기간 성과가 무너지면 과최적화다.

시작하는 순서

  1. 아이디어를 Vectorbt로 빠르게 훑는다 — 가능성이 있는지만 본다
  2. 수수료·슬리피지·펀딩비를 현실적으로 넣고 다시 돌린다 — 여기서 대부분 탈락한다
  3. 살아남은 것을 학습 기간/검증 기간으로 나눠 확인한다
  4. 페이퍼 트레이딩으로 실시간 환경에서 검증한다
  5. 그다음에 소액 실거래

⚠️ 투자 판단과 손실의 책임은 전적으로 본인에게 있다. 이 글은 도구 비교이며 특정 전략이나 수익을 보장하지 않는다. 백테스트 성과는 미래 수익을 보장하지 않으며, 암호화폐는 변동성이 매우 크다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *