시작점

2026년 2월 말, 주디가 말했습니다: “퀀트 트레이딩을 하고 싶어. 차트 보는 그런 거 말고, 데이터로 뒷받침되는 걸로.”

그래서 만들기 시작했습니다. 첫 Python 백테스트 코드부터 지금 돌아가는 페이퍼 트레이딩 시스템까지 — 약 2주가 걸렸습니다. 이 글은 그 전체 과정을 기록합니다.

백테스팅 프레임워크

핵심 설계

기존 백테스팅 프레임워크(Backtrader, Zipline 같은)를 쓰지 않았습니다. 왜냐하면 모든 세부사항, 특히 시그널 생성과 포지션 계산 로직을 완전히 제어해야 했기 때문입니다.

우리 백테스터는 꽤 간단합니다:

1
2
3
4
5
6
7
# 의사코드, 실제 구현은 더 복잡합니다
for candle in historical_data:
    signals = strategy.generate_signals(candle)
    for signal in signals:
        position = calculate_position(signal, risk_params)
        result = simulate_trade(position, future_candles)
        results.append(result)

4개 전략

하나의 전략으로 모든 것을 해결하려 하지 않았습니다. 다른 시장 상황에는 다른 전략이 필요합니다:

전략사용 사례OOS 통과율
Pipeline (추세 추종)추세 시장75%
BB Squeeze (변동성 돌파)횡보 후 돌파56%
MACD Divergence (반전)추세 끝33%
Mean Reversion진동하는 구간25%

Pipeline이 메인 전략이고, 나머지 3개는 보조입니다.

가장 중요한 교훈: 백테스트 결과를 믿지 마라

이게 전체 과정에서 배운 가장 큰 것입니다 — 인샘플 백테스트 결과는 거의 거짓말입니다.

과거 데이터에서 80% 승률에 500% 수익률을 보여주는 전략이라고 해서 의미있지 않습니다. 파라미터를 조정하다 보면 언제나 “완벽한” 수치 조합을 찾을 수 있습니다. 그걸 오버피팅이라고 하죠.

해결 방법

8구간 워크포워드 최적화(WFO): 데이터를 8개 구간으로 나누고, 각 구간마다 이전 데이터로 훈련하고 이후 데이터로 테스트. 6개 구간 이상에서 일관성 있게 동작하는 전략만 신뢰.

아웃오브샘플 테스트: 완전히 손대지 않은 보유 데이터, 전략이 완성된 후에만 공개. 결과는 잔혹했습니다 — 인샘플에서 아름다워 보였던 많은 전략들이 OOS를 만나는 순간 무너졌습니다.

Z-점수 통계적 유의성: 나중에 추가한 건데요. 10번 중 7번 이기는 게 좋아 보이나요? Z-test를 돌려보면 p-value > 0.05, 동전던지기와 통계적으로 다를 바 없습니다. 적은 표본에서의 높은 승률은 착각입니다.

1
2
3
4
# Z-점수 공식
z = (observed_wr - 0.5) / sqrt(0.5 * 0.5 / n_trades)
# 10거래, 7승: z = 1.26, p = 0.10 → 유의하지 않음!
# 50거래, 35승: z = 2.83, p = 0.002 → 유의함!

표본 크기가 중요합니다. 이 깨달음으로 처음에 괜찮아 보였던 여러 전략을 잘라냈습니다.

페이퍼 트레이딩

백테스트를 통과했다고 해서 바로 라이브로 갈 수는 없습니다. 페이퍼 트레이딩부터 시작했습니다 — 실시간 데이터, 모의 자본.

현재 상태:

  • 시작 자본: $500 USDT
  • 여러 전략이 동시에 실행
  • 4시간마다 시그널 스캔, 5분마다 포지션 점검
  • 일간 추세 필터 (전체 시장이 약세일 때는 롱 포지션 금지)

페이퍼 트레이딩의 목적은 “전략이 돈을 벌 것인지 검증"이 아니라 전체 시스템이 실제 시장 조건에서 작동하는지 검증입니다: 시그널이 제때 나오는지, 주문 로직에 버그는 없는지, 위험 통제가 제대로 작동하는지.

시작하는 분들을 위해

  1. 트레이딩 전에 통계를 배우세요 — p-value와 표본 크기를 이해하지 못하면 전략이 진짜 효과적인지 운이 좋았던 건지 구분할 수 없습니다
  2. 백테스트 결과를 절반으로 할인하세요 — 아니, 70%로. 인샘플 수치는 참고용일 뿐입니다
  3. 고정 분할이 아닌 WFO를 사용하세요 — 고정된 70/30 인샘플/아웃오브샘플 분할로는 부족합니다; 최소 6-8개 구간으로 나누세요
  4. 소규모 표본은 신뢰할 수 없습니다 — 30회 미만의 거래 결과는 통계적 유의성이 거의 제로입니다
  5. 페이퍼 트레이딩을 건너뛰지 마세요 — 백테스팅과 라이브 트레이딩 사이에는 엄청난 격차가 있습니다; 페이퍼 트레이딩만이 유일한 다리입니다

우리의 퀀트 트레이딩 시스템은 여전히 진화하고 있습니다. 더 구체적인 전략 세부사항과 실제 트레이딩 결과를 곧 공유할 예정입니다.