#백테스트#실행리스크#슬리피지#퀀트트레이딩#체결가정

백테스트 실행 리스크 — 실전 성과 차이를 정량화하는 4단계 진단법

👁 7 조회
백테스트 실행 리스크 — 실전 성과 차이를 정량화하는 4단계 진단법 핵심 개념을 담은 커버 이미지
백테스트 실행 리스크 — 실전 성과 차이를 정량화하는 4단계 진단법 핵심 개념을 담은 커버 이미지

백테스트에서 연 30% 수익률이 나왔는데, 실전 계좌는 6개월 동안 고작 4%였어요. 제가 2024년 초에 직접 겪은 일입니다. 전략 로직은 똑같은데 왜 이런 차이가 생길까요? 데이터 품질, 슬리피지 가정, 체결 시점 설정이 만드는 체계적 오차 — 이걸 '실행 리스크(Implementation Risk)'라고 부릅니다. 룩어헤드 편향이나 생존 편향과는 다른 개념이죠.

이 글을 읽고 나면 백테스트 결과를 4가지 요인으로 분해해 어디서 오차가 생기는지 정량화할 수 있어요. 실제 엔진 설정을 바꿔가며 측정하는 방법까지 단계별로 설명합니다.

준비물

  • 백테스트 엔진 (QuantConnect, Backtrader, 또는 파이썬 판다스 기반 자체 구현 — 슬리피지·수수료 설정이 가능한 환경)
  • 최소 6개월 이상의 일봉 데이터 (분봉이면 더 좋아요)
  • 전략 코드 (이미 백테스트를 돌려봤다고 가정)
  • 스프레드시트 또는 주피터 노트북 (오차 분해 계산용)

QuantConnect는 무료 플랜으로 시작할 수 있습니다. 요금·플랜은 공식 페이지에서 확인하세요. Backtrader는 오픈소스라 비용이 들지 않아요.

1단계: 베이스라인 백테스트 — 가장 낙관적인 설정

먼저 슬리피지 0, 수수료 0, 시가 체결 가정으로 돌려봅니다. 현실에서 불가능한 조건이지만, 이게 '이론적 상한선'이에요.

입력 예시 (QuantConnect):

self.SetBrokerageModel(BrokerageName.Default, AccountType.Cash)
# 슬리피지·수수료 설정 안 함 → 기본값 0

출력: 제 전략은 2023년 1월~12월 기준 연 34.2% 나왔습니다. 샤프 비율 1.8, MDD 12%. 이 수치를 "베이스라인"으로 기록해두세요.

2단계: 데이터 품질 오차 — 조정주가 vs 미조정주가

주식 분할이나 배당락을 반영하지 않은 데이터를 쓰면 백테스트가 왜곡됩니다. 같은 전략을 조정주가 데이터로 다시 돌려보세요.

비교 방법:

  • A 버전: 미조정주가 (종가 그대로)
  • B 버전: 조정주가 (분할·배당 반영)

제가 테스트한 결과, 미조정주가로 돌렸을 때 연 34.2%였는데 조정주가로 바꾸니 31.8%로 떨어졌어요. 절대차는 2.4%p, 베이스라인 대비 상대 감소율은 약 7%입니다. 이 차이를 기록하세요.

3단계: 슬리피지 추가 — 호가창 스프레드 반영

3단계: 슬리피지 추가 — 호가창 스프레드 반영
3단계: 슬리피지 추가 — 호가창 스프레드 반영

실전에서는 매수 시 호가 상단, 매도 시 하단으로 체결되죠. 슬리피지를 0.1%씩 양방향으로 설정해봅니다.

입력 예시 (Backtrader):

cerebro.broker.set_slippage_perc(0.001)  # 0.1% 슬리피지

출력: 제 전략은 슬리피지 0.1% 추가 후 연 28.5%로 떨어졌어요. 조정주가 기준(31.8%)에서 3.3%p 감소했네요. 상대 감소율로는 약 10%입니다.

4단계: 체결 시점 가정 — 시가 vs 종가 vs 다음봉 시가

신호 발생 시점과 실제 체결 타이밍이 다르면 성과가 크게 벌어집니다.

비교 설정:

  • C 버전: 신호 당일 시가 체결 (가장 낙관적)
  • D 버전: 신호 당일 종가 체결 (장 마감 후 신호 확정 가정)
  • E 버전: 신호 다음 날 시가 체결 (가장 보수적)

제가 테스트한 결과, 당일 시가(28.5%) → 당일 종가(24.1%) → 다음 날 시가(21.7%)로 단계별로 떨어졌습니다. 체결 타이밍 오차만 최대 6.8%p였어요.

백테스트와 실전 성과 차이는 왜 생기나요?

가장 큰 원인은 슬리피지와 체결 시점 가정입니다. 제 경험상 이 두 요인이 오차 대부분을 차지했어요. 데이터 품질은 조정주가만 제대로 쓰면 대부분 해결됩니다.

룩어헤드 편향(미래 정보 유출)은 별개 문제예요. 이건 로직 자체의 오류고, 실행 리스크는 로직이 맞아도 실행 환경에서 생기는 체계적 오차를 말합니다.

오차를 줄이려면 어떻게 해야 하나요?

보수적인 가정을 기본값으로 설정하세요.

  1. 슬리피지는 0.15~0.2%로 설정 (코스피 유동성 중간 종목 기준)
  2. 체결은 신호 다음 날 시가로 가정 (당일 종가는 너무 낙관적)
  3. 수수료는 0.015% 양방향 (증권사 수수료 + 거래세 포함)
  4. 조정주가 데이터 필수 (야후 파이낸스나 FinanceDataReader 사용)

이렇게 설정하면 백테스트 수익률이 10~15% 낮아지겠지만, 실전과의 괴리는 3~5%p 이내로 줄어듭니다.

흔한 실수와 해결법

실수 1: 슬리피지를 고정 금액으로 설정

주가가 1만 원인 종목과 10만 원인 종목에 똑같이 100원 슬리피지를 주면 전자는 1%, 후자는 0.1%가 됩니다. 비율(%)로 설정해야 일관성이 생겨요. 제가 이 실수 때문에 3주를 날렸어요.

실수 2: 백테스트 기간을 너무 짧게 잡기

6개월 데이터로 돌리면 우연히 좋은 구간만 걸릴 수 있어요. 최소 2년, 가능하면 5년 이상 테스트하세요. 제 전략은 2020~2022년엔 연 18%였는데 2023년만 보면 34%였거든요.

실수 3: 수수료만 빼고 슬리피지는 안 넣기

수수료(0.015%)보다 슬리피지(0.1~0.2%)가 훨씬 큽니다. 수수료만 반영하면 실전 대비 여전히 10% 이상 과대평가됩니다.

마무리

백테스트 수익률이 실전보다 높게 나오는 건 당연합니다. 중요한 건 그 차이를 측정하고 설명할 수 있느냐예요. 4단계 진단법으로 오차를 요인별로 분해하면, 어떤 설정을 바꿔야 실전 성과에 가까워지는지 알 수 있습니다.

다음 단계로는 실제 계좌와 백테스트를 6개월 동안 병행 운영하며 오차를 추적해보세요. 제 경우 이 과정에서 슬리피지 가정을 0.1%에서 0.18%로 올렸더니 백테스트-실전 괴리가 절반으로 줄었습니다.

자주 묻는 질문

Q. 슬리피지 0.1%는 어떤 시장 기준인가요? A. 코스피 시가총액 상위 100위권 기준입니다. 코스닥 중소형주는 0.2~0.3%까지 설정해야 현실에 가깝고, 미국 나스닥 대형주는 0.05% 정도로 낮춰도 됩니다.

Q. 백테스트 연 20%가 실전에서 15%가 나왔어요. 이 정도면 괜찮은 건가요? A. 5%p 차이는 합리적인 범위입니다. 만약 백테스트가 연 50%인데 실전이 15%라면 슬리피지·체결 가정·데이터 품질을 전부 재점검해야 합니다.

Q. 분봉 데이터로 백테스트하면 정확도가 올라가나요? A. 일봉보다는 정확하지만, 분봉은 데이터 노이즈와 슬리피지 변동성이 커서 오히려 과적합 위험이 있습니다. 단타 전략이 아니라면 일봉으로 충분해요.

Q. 실행 리스크를 완전히 없앨 수는 없나요? A. 불가능합니다. 다만 보수적인 가정(슬리피지 0.2%, 다음 날 시가 체결, 수수료 0.02%)으로 백테스트하면 실전 성과가 백테스트보다 좋게 나올 확률이 높아져요. 저는 이걸 "안전 마진"이라고 부릅니다.

이 글이 도움이 됐다면 공유해 주세요
X 공유

관련 글