리서치 › 백테스트를 읽는 법
백테스트 결과를 소개하는 글에서 거래비용은 대개 맨 아래 각주 한 줄입니다. 아예 없는 경우도 많습니다. 그런데 비용을 얼마로 잡느냐는 소수점 조정이 아니라 결론의 부호를 바꾸는 변수입니다. 저희 프리셋 세 개를 비용만 갈아끼우며 다시 돌렸습니다.
← 앞선 글: 파라미터를 바꿔가며 수익률을 1.5배로 만들었다핀트릭스의 모든 백테스트는 왕복 0.25%를 차감합니다. 매수·매도 위탁수수료, 매도 시 부과되는 증권거래세, 그리고 호가 스프레드 때문에 생기는 체결 오차를 합쳐 잡은 값입니다.
이 숫자는 누구에게나 맞는 값이 아닙니다. 수수료는 증권사와 계좌 조건에 따라 크게 다르고, 세율은 제도가 바뀝니다. 체결 오차는 종목 유동성과 주문 크기에 따라 달라져서, 거래대금이 적은 종목을 큰 금액으로 사면 0.25%로는 어림도 없습니다. 그래서 하나로 정하는 대신 범위로 봤습니다.
세 프리셋의 대표 보유기간 성적을, 비용만 0%에서 1.5%까지 바꿔 다시 냈습니다. 신호와 진입·청산 규칙은 전략 페이지와 동일합니다.
| 왕복 비용 | 평균 | 중앙값 | 승률 |
|---|---|---|---|
| 0% (비용 무시) | +5.62% | +1.04% | 52.7% |
| 0.10% | +5.52% | +0.94% | 52.6% |
| 0.25% (기준) | +5.37% | +0.79% | 52.1% |
| 0.50% | +5.12% | +0.54% | 51.5% |
| 1.00% | +4.62% | +0.04% | 50.1% |
| 1.50% | +4.12% | −0.46% | 48.9% |
| 왕복 비용 | 평균 | 중앙값 | 승률 |
|---|---|---|---|
| 0% | +1.02% | +0.65% | 52.9% |
| 0.25% (기준) | +0.77% | +0.40% | 52.2% |
| 0.50% | +0.52% | +0.15% | 50.7% |
| 1.00% | +0.02% | −0.35% | 48.1% |
| 1.50% | −0.48% | −0.85% | 45.8% |
| 왕복 비용 | 평균 | 중앙값 | 승률 |
|---|---|---|---|
| 0% (비용 무시) | −0.01% | −2.89% | 41.4% |
| 0.25% (기준) | −0.26% | −3.14% | 40.8% |
| 1.00% | −1.01% | −3.89% | 38.9% |
가장 먼저 확인할 것은 비용 0% 줄입니다. 거래량 돌파는 비용을 아예 무시해도 평균 −0.01%, 중앙값 −2.89%, 승률 41.4%입니다. 수수료를 한 푼도 안 내도 돈을 벌지 못하는 조건입니다.
이건 중요한 구분입니다. "비용만 낮추면 될 텐데"라는 반론이 통하지 않는다는 뜻이기 때문입니다. 반대로 과매도 반등은 비용 0%에서 +1.02%라 비용이 결론을 좌우하는 쪽입니다. 같은 마이너스라도 원인이 다르면 대응이 다릅니다.
정배열 눌림목의 평균만 보면 비용에 강해 보입니다. 0%에서 1%로 올려도 +5.62% → +4.62%로 여전히 큽니다. 평균이 0이 되는 지점, 즉 손익분기 왕복비용은 5.62%입니다. 현실에서 나올 수 없는 수치라 "비용은 신경 안 써도 된다"는 결론이 나옵니다.
중앙값으로 보면 완전히 다릅니다.
| 프리셋 | 평균 기준 손익분기 | 중앙값 기준 손익분기 |
|---|---|---|
| 정배열 눌림목 | 5.62% | 1.04% |
| 과매도 반등 | 1.02% | 0.65% |
| 거래량 돌파 | −0.01% | −2.89% |
손익분기 왕복비용 = 그 값을 넘는 비용에서 해당 지표가 0 아래로 내려가는 지점.
정배열 눌림목의 중앙값 손익분기는 1.04%입니다. 왕복 1%면 거래 절반이 본전 아래가 되고 승률도 50.1%로 동전 던지기가 됩니다. 유동성이 낮은 종목을 큰 금액으로 담으면 충분히 닿을 수 있는 수치입니다.
평균 손익분기 5.62%와 중앙값 손익분기 1.04% 사이의 다섯 배 간격이 이 전략의 실제 위험 구간입니다. 평균만 보면 안전해 보이고, 중앙값으로 보면 생각보다 가깝습니다.
비용은 거래할 때마다 냅니다. 그래서 회전율이 곱해집니다. 보유기간이 짧을수록 같은 요율이 더 무겁습니다.
| 프리셋 | 보유 | 연 최대 회전 | 왕복 0.25%의 연 부담 |
|---|---|---|---|
| 정배열 눌림목 | 20일 | 12.5회 | 3.1% |
| 과매도 반등 | 10일 | 25.0회 | 6.2% |
| 거래량 돌파 | 20일 | 12.5회 | 3.1% |
연 250거래일 기준, 자리를 비우지 않고 계속 굴렸을 때의 상한입니다. 실제 회전은 신호가 나오는 만큼만 가능해 이보다 낮습니다.
과매도 반등은 거래당 비용이 남들과 같은데 연 부담은 두 배입니다. 거래당 평균이 +0.77%인 전략에서 연 6.2%를 비용으로 낸다는 건 수익의 상당 부분을 수수료로 돌려주는 구조입니다. 보유기간이 짧은 전략을 볼 때는 거래당 수익률만이 아니라 이 곱셈을 같이 봐야 합니다.
평균은 비용만큼 정확히 내려갑니다. 비용 0.25%를 물리면 평균은 딱 0.25%p 낮아집니다. 그런데 승률은 그렇게 움직이지 않습니다. 승률은 "수익이 비용보다 큰 거래의 비율"이라, 비용선을 옮겼을 때 그 선에 걸리는 거래가 몇 건이냐에 달려 있습니다.
비용을 0%에서 1%로 올렸을 때 승률이 얼마나 빠지는지 보면 전략마다 다릅니다.
| 프리셋 | 보유 | 승률 0% | 승률 1% | 낙폭 |
|---|---|---|---|---|
| 정배열 눌림목 | 20일 | 52.7% | 50.1% | −2.6%p |
| 과매도 반등 | 10일 | 52.9% | 48.1% | −4.8%p |
| 거래량 돌파 | 20일 | 41.4% | 38.9% | −2.5%p |
같은 1%인데 과매도 반등만 낙폭이 두 배에 가깝습니다. 이유는 수익 분포의 폭입니다. 10일만 들고 있으면 주가가 크게 움직일 시간이 없어 수익률이 0 근처에 촘촘하게 몰립니다. 그 빽빽한 구간에 비용선을 1% 밀어 넣으면 한꺼번에 많은 거래가 손실 쪽으로 넘어갑니다. 반대로 20일 보유는 분포가 넓게 퍼져 있어 같은 1%가 상대적으로 적은 거래만 가릅니다.
그래서 회전율과 분포 폭이 같은 방향으로 작용합니다. 보유기간이 짧은 전략은 비용을 더 자주 내는 동시에, 낼 때마다 더 많은 거래가 손실로 뒤집힙니다. 단타에 가까울수록 비용 가정을 보수적으로 잡아야 하는 이유입니다.
cost_study.py. build_presets.py의 신호 정의와 선도수익률을 그대로 재사용하므로 전략 페이지와 같은 계산에서 나온 값입니다