백테스트에서 비용을 빼먹으면 어떻게 되나 — 26만 건으로 재봤습니다

제 백테스트는 거래당 +0.45%였습니다. 두 가지를 바로잡으니 −0.09%가 됐습니다. 빠뜨린 건 아이디어가 아니라 비용이었습니다.

“이 매매법, 수익률 검증 끝났습니다.” 유튜브나 오픈채팅에서 흔히 보는 말입니다. 화면에는 우상향하는 곡선이 있고 숫자도 그럴듯하죠.

여기서 말하는 검증은 대부분 백테스트입니다. 과거 데이터로 매매법을 미리 돌려보는 모의시험이에요. 저도 제 매매법을 백테스트했고, 결과는 거래당 +0.45%였습니다. “이거 되는데?” 싶었죠.

그런데 실제로 돌려보니 계속 마이너스가 났습니다. 코드를 다시 뜯어보고서야 알았는데, 문제는 매매법이 아니라 제 계산기였습니다.

제가 빠뜨린 두 가지

🎯 슬리피지를 0으로 뒀다
원하는 가격에 그대로 체결된다고 계산했습니다
🧾 매도 수수료를 안 뺐다
살 때 비용만 넣고 팔 때 비용을 빠뜨렸습니다

첫 번째, 슬리피지는 주문 낸 가격과 실제 체결된 가격의 차이입니다. 백테스트는 보통 “종가에 샀다”고 계산하는데, 실전에서는 그 가격에 안 잡힙니다. 살 때는 조금 비싸게, 팔 때는 조금 싸게 잡히죠.

왜 그런지는 호가창을 생각하면 됩니다. 주식은 정해진 값 하나에 사고파는 게 아니라, 팔겠다는 사람들이 여러 가격에 줄을 서 있고 그중 낮은 것부터 사게 됩니다. 지금 당장 사려면 줄 서 있는 것 중 가장 싼 매도 호가를 잡아야 하는데, 그게 화면에 뜬 현재가보다 한두 칸 위인 경우가 많습니다. 많이 사면 더 위까지 올라가고요.

여기에 하나가 더 겹칩니다. 백테스트에서 “종가에 판다”고 계산할 때, 내가 팔면 그 종가가 아니라는 것이요. 살 때와 반대로 사겠다는 사람들이 줄 서 있는 가격 중 가장 높은 것부터 잡아야 하는데, 그건 현재가보다 아래인 경우가 많습니다. 그러니 슬리피지는 살 때 한 번, 팔 때 한 번 붙습니다.

두 번째는 그냥 실수였습니다. 매수 수수료는 넣었는데 매도 수수료를 빠뜨렸습니다. 매매는 사고파는 왕복인데 편도 비용만 계산한 셈이죠. 한 건으로는 티가 안 나는데, 거래가 쌓이면 성적을 통째로 부풀립니다.

이런 실수가 흔한 이유가 있습니다. 백테스트 코드에서 비용은 눈에 안 띕니다. 매매 로직은 몇십 줄이라 계속 들여다보게 되는데, 비용은 어딘가에 상수 하나로 들어가 있거든요. 한 번 잘못 써두면 그 뒤로 다시 볼 일이 없습니다. 저도 그 줄을 몇 달 동안 안 봤습니다.

구분 거래당 평균 비고
백테스트 (편향 포함) +0.45% 슬리피지 0 · 매도 수수료 누락
편향 제거 후 −0.09% 1년치, 승률 48.5%
모의계좌 실제 (7건) −0.76% 표본은 적지만 방향 일치

차이는 0.5%p 남짓입니다. 작아 보이지만 부호가 바뀌었습니다. 버는 매매법과 잃는 매매법으로 갈린 거죠. 화면 속 +0.45%는 처음부터 없던 숫자였습니다.

그래서 이게 얼마나 흔한 일인지 재봤습니다

비용만 바꿔서 26만 건을 다시 돌렸습니다

제 사례 하나로는 부족하니, 별도로 만들어둔 백테스트에 비용 가정만 바꿔가며 돌려봤습니다. 2016년 5월부터 2026년 9월까지 267,330건의 거래입니다. 매매 규칙은 그대로 두고 왕복 비용만 0%에서 1%까지 바꿨습니다.

매매 규칙 비용 0% 0.2% 0.4% 0.6% 1.0%
손절 −5% / 익절 +10% +0.52% +0.32% +0.12% −0.08% −0.48%
손절 −10% / 익절 +20% +0.96% +0.76% +0.56% +0.36% −0.04%
트레일링 −10% +1.03% +0.83% +0.63% +0.43% +0.03%
트레일링 −40% +1.85% +1.65% +1.45% +1.25% +0.85%

비용을 얼마로 잡느냐에 따라 같은 매매 규칙이 플러스도 되고 마이너스도 됩니다. 첫 줄을 보면 비용 0%일 때 +0.52%였던 게 0.6%를 넣자 마이너스로 넘어갑니다.

여기서 “비용 0.6%는 너무 비싼 거 아닌가” 싶으실 수 있습니다. 요즘 수수료가 워낙 싸니까요. 그런데 왕복 비용에는 수수료만 들어가는 게 아닙니다.

💳 수수료
왕복 두 번. 우대 적용 시 작지만 0은 아닙니다
🏛️ 증권거래세
매도 금액에 부과. 손실이 나도 냅니다
↔️ 슬리피지
사고팔 때 각각. 유동성이 낮을수록 커집니다

거래세만 해도 매도 금액의 0.15~0.18% 수준입니다. 여기에 슬리피지가 얹히는데, 이건 종목마다 크게 다릅니다. 거래가 활발한 대형주는 작지만 하루 거래대금이 몇억밖에 안 되는 종목은 몇 백만 원만 사도 가격이 밀립니다. 그러니 왕복 0.5%를 넘는 건 드문 일이 아닙니다.

중요한 건 이 비용이 수익률과 무관하게 나간다는 점입니다. 벌든 잃든 똑같이 빠집니다. 그래서 거래당 기대수익이 작은 전략일수록 비용이 차지하는 비중이 커지고, 어느 지점을 넘으면 기대수익 전체를 먹어버립니다.

진짜 문제는 회전율입니다

위 표에는 안 보이는 게 하나 있습니다. 규칙마다 매매 횟수가 다릅니다.

18.8일
손절 −5% 규칙 평균 보유
106.3일
트레일링 −40% 평균 보유
약 5.7배
매매 횟수 차이

손절 −5% 규칙은 평균 18.8거래일 만에 정리돼서 1년에 약 13번 매매하게 됩니다. 트레일링 −40%는 106거래일을 들고 있어서 1년에 2.3번이고요.

비용은 매매할 때마다 나갑니다. 그러니 거래당 비용에 횟수를 곱해야 1년 성적이 나옵니다. 그렇게 환산해보면 그림이 달라집니다.

매매 규칙 (연 회전) 비용 0% 0.2% 0.4% 0.6% 1.0%
손절 −5% / 익절 +10% (13.1회) +6.8% +4.2% +1.6% −1.0% −6.2%
손절 −10% / 익절 +20% (5.9회) +5.7% +4.5% +3.3% +2.1% −0.2%
트레일링 −10% (7.2회) +7.4% +6.0% +4.5% +3.1% +0.2%
트레일링 −40% (2.3회) +4.3% +3.8% +3.4% +2.9% +2.0%

맨 위와 맨 아래를 비교해보세요.

단타 규칙 · 비용 0% 가정
6.8% (연 환산, 절댓값)
장기 규칙 · 비용 0% 가정
4.3% (연 환산, 절댓값)
단타 규칙 · 비용 0.6%
1% (연 환산, 절댓값)
장기 규칙 · 비용 0.6%
2.9% (연 환산, 절댓값)

비용을 0으로 놓으면 자주 매매하는 규칙(+6.8%)이 오래 들고 있는 규칙(+4.3%)보다 좋아 보입니다. 그런데 비용 0.6%를 넣으면 −1.0% 대 +2.9%로 순위가 뒤집힙니다.

🔑 핵심 비용을 빼먹은 백테스트는 단순히 성적을 부풀리는 게 아닙니다. 어느 전략이 나은지에 대한 답 자체를 바꿔놓습니다. 그리고 그 왜곡은 자주 매매하는 전략일수록 큽니다.

이게 왜 중요하냐면, 사람들이 백테스트를 돌리는 목적이 대개 ‘여러 전략 중 뭐가 나은지 고르는 것’이기 때문입니다. 비용을 안 넣으면 그 비교 자체가 틀립니다. 그리고 하필 가장 화려해 보이는 단타 전략이 가장 크게 부풀려집니다.

제 경우가 정확히 그랬습니다. 제 매매법은 며칠 안에 사고파는 단기 전략이었어요. 비용에 가장 민감한 종류였는데 그걸 0으로 두고 봤으니, +0.45%라는 숫자가 나온 겁니다.

돌이켜보면 순서가 거꾸로였습니다. 저는 단타를 하기로 먼저 정하고 나서 백테스트를 돌렸습니다. 그런데 위 표를 먼저 봤다면 질문이 달라졌을 거예요. “이 매매법이 되는가”가 아니라 “내가 감당할 비용에서 이 회전율이 말이 되는가”를 먼저 물었어야 했습니다. 비용을 넣고 나면 애초에 자주 매매하는 전략은 시작 지점이 마이너스거든요. 연 13회 회전에 왕복 0.4%면 매년 5.2%를 비용으로 먼저 깔고 들어가는 겁니다.

그리고 이건 개인만의 문제도 아닙니다. 기관이 단타를 잘 안 하는 이유 중 하나가 이거예요. 자금이 클수록 슬리피지가 커지니까 회전율을 올릴수록 불리해집니다. 회전율은 전략의 선택이 아니라 비용 구조가 정해주는 것에 가깝습니다.

검증 결과를 볼 때 물어볼 것

남의 백테스트든 내 백테스트든, 숫자에 감탄하기 전에 이것부터 확인하면 됩니다.

  • ✓왕복 비용이 들어갔나 — 매수 수수료만 넣고 매도 수수료를 빠뜨리는 실수가 흔합니다
  • ✓증권거래세를 넣었나 — 국내 주식은 팔 때 부과되고, 손실이 나도 냅니다
  • ✓슬리피지를 얼마로 잡았나 — 0이라고 적혀 있으면 그 결과는 실전보다 좋습니다
  • ✓1년에 몇 번 매매하는 전략인가 — 회전이 빠를수록 비용 가정 하나에 결과가 크게 흔들립니다
  • ✓표본이 몇 건인가 — 몇십 건짜리 성적은 운과 구분되지 않습니다

네 번째가 특히 실용적입니다. 수익률만 자랑하고 매매 빈도를 안 밝히는 검증표를 만나면 일단 의심할 만합니다. 하루에 몇 번씩 사고파는 전략의 백테스트에서 비용 항목이 안 보인다면, 그 숫자는 거의 확실히 실전에서 안 나옵니다.

거꾸로 직접 계산해볼 수도 있습니다. 연간 매매 횟수에 왕복 0.4%를 곱해보세요. 하루 한 번씩 매매하는 전략이라면 연 246회니까 비용만 연 98%입니다. 그 전략이 수익을 내려면 비용을 넘고도 남아야 한다는 뜻이에요. 이 곱셈 하나로 걸러지는 ‘검증 끝’ 주장이 꽤 많습니다.

그리고 마지막 하나. 소액으로 먼저 돌려보는 게 제일 확실합니다. 제 경우 모의계좌 7건에서 평균 −0.76%가 나왔는데, 표본이 적어 단정할 수는 없어도 백테스트가 말하던 방향과 반대였다는 건 분명했습니다. 종이 위의 성적과 실제 체결이 다르다는 걸 확인하는 데는 몇 건이면 충분합니다.

“백테스트가 거짓말을 하는 게 아니라, 내가 물어본 질문이 틀렸던 것이다.”

제가 코드에 물어본 질문은 “이 매매법이 수익이 나는가”였는데, 실제로 계산한 건 “비용이 없다면 수익이 나는가”였습니다. 답은 정확했어요. 질문이 틀렸을 뿐입니다.

이게 백테스트라는 도구의 성질입니다. 컴퓨터는 내가 적어준 세상을 계산합니다. 그 세상에 비용이 없으면 비용 없는 답을 정확하게 내놓아요. 틀렸다고 알려주지 않습니다. 그래서 백테스트를 볼 때 진짜 확인해야 하는 건 결과 숫자가 아니라 그 계산이 어떤 세상을 가정했는지입니다.

이 계산의 한계

몇 가지 밝혀둡니다. 위 26만 건 실험의 진입 조건은 매월 첫 거래일에 전 종목 매수라는 인위적인 설정입니다. 실제 전략이 아니라 비용의 효과만 보려고 만든 조건이에요.

연 환산 수치는 거래당 평균 × 연간 매매 횟수로 계산한 대략치입니다. 실제로는 복리로 쌓이고 매매 간격도 일정하지 않아서 정확한 값은 아닙니다. 비용이 회전율에 곱해진다는 관계를 보여주는 용도로만 봐주세요.

그리고 제 개인 기록(+0.45% → −0.09%)은 1년치 한 전략의 결과이고, 모의 라이브는 7건뿐입니다. 일반화할 수 있는 표본이 아닙니다.

⏱ 3줄 요약
  • 제 백테스트 +0.45%는 슬리피지 0 가정과 매도 수수료 누락 때문이었습니다. 고치니 −0.09%
  • 26만 건에 비용만 0~1%로 바꿔 돌리니 같은 규칙의 부호가 바뀌었습니다
  • 비용은 매매 횟수에 곱해집니다 — 연 13회 회전 전략은 비용 1%에서 −6.2%가 됐습니다
  • 비용 0.2%와 0.4% 사이에서 단타 전략과 장기 전략의 순위가 뒤집혔습니다

‘수익 보장’을 내세우는 매매·자동화 상품이 의심된다면 금융감독원에서 제도권 업체인지 먼저 확인하세요.

관련 글: 모의투자는 잘 됐는데 실전은 왜 깨질까 · 종가베팅 후회를 2,521거래일로 검증했더니 · 손절을 늦추면 수익이 늘어날까 · 100건을 채우고 시스템을 폐기한 이야기

이 글의 수치는 개인이 직접 돌린 백테스트와 모의계좌 기록이며, 특정 전략이나 상품의 투자를 권유하지 않습니다. 표본과 기간이 제한적이라 다른 조건에서는 결과가 달라질 수 있고, 과거 데이터는 미래 수익을 보장하지 않습니다. 최종 판단과 책임은 본인에게 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤