세 가지를 같은 목적으로 쓰면 결론이 어긋납니다. 백테스트 결과가 좋았는데 실계좌에서 다른 이유, 그 이유를 찾는 도구가 무엇인지가 이 글의 주제입니다.
각각이 답하는 질문
- 백테스트: “이 규칙이 과거 데이터에서 어떤 결과를 냈는가”
- 시뮬레이터(포워드·데모): “이 규칙이 현재 실행 조건에서 어떻게 동작하는가”
- 거래일지: “나는 실제로 무엇을 했고 계획과 얼마나 달랐는가”
세 질문은 겹치지 않습니다. 백테스트로는 슬리피지를 알 수 없고, 시뮬레이터로는 표본 부족을 해결할 수 없고, 거래일지로는 미래를 예측할 수 없습니다.
백테스트가 감추는 것
스프레드와 슬리피지
고정 스프레드로 계산한 결과는 실제보다 좋게 나옵니다. 스프레드는 시간대와 이벤트에 따라 벌어지고, 자동매매는 대개 그 순간에 주문을 냅니다.
체결 가정
지정가가 항상 체결된다고 가정하면 결과가 크게 달라집니다. 실제로는 가격이 스치고 지나가 체결되지 않는 경우가 많습니다.
야간 보유 비용
포지션을 하루 이상 들고 있으면 스왑이 발생하고, 특정 요일에는 배수가 적용됩니다. 스윙 전략에서 이 항목을 빼면 성과가 과대평가됩니다.
과최적화
파라미터를 조정해 과거 곡선을 아름답게 만드는 것은 언제나 가능합니다. 기간을 나눠 검증하고, 파라미터를 조금 흔들어도 결과가 유지되는지 보는 편이 낫습니다.
시뮬레이터(데모)가 감추는 것
데모 계좌는 실행 조건을 확인하는 데 유용하지만, 실계좌와 완전히 같지는 않습니다.
- 데모 체결이 실계좌보다 관대한 경우가 있습니다. 요청 가격 그대로 체결되는 환경이라면 슬리피지를 측정할 수 없습니다.
- 심리가 빠집니다. 손실이 계정 숫자일 때와 실제 자금일 때 사람의 개입 여부가 달라집니다.
- 기간이 짧습니다. 몇 주간의 데모 결과로 전략을 판단하기에는 표본이 부족합니다.
그래도 데모는 기술적 검증에는 최적입니다. 신호가 정확히 주문으로 바뀌는지, 실패 처리가 동작하는지, 로그가 남는지 확인하는 용도로 쓰면 목적에 맞습니다.
거래일지가 유일하게 답하는 것
거래일지는 미래를 말해주지 않습니다. 대신 ‘계획과 실제의 차이’를 보여줍니다. 자동매매에서도 이 차이가 생깁니다.
- 신호는 발생했는데 주문이 나가지 않은 건수
- 주문 가격과 실제 체결 가격의 차이 분포
- 사람이 수동으로 개입해 닫은 포지션
- 실패로 건너뛴 계좌와 그 이유
이 데이터는 브로커 터미널 내역만으로는 만들 수 없습니다. ‘신호는 있었지만 주문이 없었던’ 사건은 브로커 쪽에 기록이 없기 때문입니다. 내 시스템에서 기록해야 합니다.
# 최소한 이 네 가지를 남기면 나중에 원인을 찾을 수 있다
log_event("signal", strategy=s, symbol=sym, side=side, ts=now())
log_event("request", payload=payload, ts=now())
log_event("response", status=r.status_code, body=r.text[:500], ts=now())
log_event("skipped", reason="min_volume", detail=vol) # 건너뛴 것도 기록
네 번째가 특히 중요합니다. 조용히 건너뛴 사건이 기록되지 않으면, 나중에 “왜 이 신호에 포지션이 없지?”라는 질문에 답할 수 없습니다.
순서를 정하면 이렇게 됩니다
- 백테스트로 규칙이 애초에 의미 있는지 걸러냅니다. 비용을 보수적으로 넣습니다.
- 데모로 구현이 규칙대로 동작하는지 확인합니다. 성과가 아니라 동작을 봅니다.
- 소액 실계좌로 체결 차이를 측정합니다. 이 숫자가 백테스트 가정과 얼마나 다른지 기록합니다.
- 거래일지로 운영 중 계획과 실제의 차이를 계속 추적합니다.
3단계에서 측정한 체결 차이가 전략의 기대 수익보다 크면, 전략이 아니라 실행 환경을 먼저 손봐야 한다는 뜻입니다.
기록을 어디에 쌓을까
계좌가 여러 개면 기록도 계좌별로 분리해 쌓아야 의미가 있습니다. 수집과 저장 구조는 다계좌 성과 추적에 정리했습니다. 체결 내역을 주기적으로 가져와 자체 저장소에 넣어두면 백테스트 가정을 실제 데이터로 갱신할 수 있습니다.
자주 묻는 질문
백테스트 결과가 좋았는데 실계좌 성과가 나쁜 이유는 무엇인가요?
스프레드와 슬리피지, 지정가 체결 가정, 야간 보유 스왑이 반영되지 않은 경우가 대부분입니다. 파라미터 과최적화도 흔한 원인입니다.
데모 계좌 결과를 믿어도 되나요?
기술적 동작 검증에는 적합하지만 성과 판단에는 한계가 있습니다. 데모 체결이 실계좌보다 관대할 수 있고 기간이 짧아 표본이 부족합니다. 소액 실계좌로 체결 차이를 측정하는 단계가 필요합니다.