퀀트 실전 ⑨ — 세금과 거래 현실, 같은 전략도 계좌에 따라 결과가 다르다
지금까지 이 블로그의 백테스트는 거의 전부 세전 수익률이었습니다. 거래 비용은 넣었지만 세금은 뺐습니다. 세금은 사람마다, 계좌마다, 해마다 달라서 한 숫자로 넣기 어렵기 때문입니다.
하지만 실제 계좌에 남는 것은 세후 금액입니다. 그리고 세금은 단순히 수익률을 조금 깎는 데서 끝나지 않습니다. 전략 사이의 순위를 바꿀 수 있습니다. 세전에는 이기던 전략이 세후에는 지는 경우가 생깁니다. 이번 글에서는 그것을 실제 데이터로 확인합니다.
아래 세율은 2026년 기준으로 공개된 규정을 정리한 것입니다. 세법은 자주 바뀌고, 개인 상황에 따라 적용이 달라집니다. 실제로 판단할 때는 반드시 현행 규정을 확인하시기 바랍니다.
무엇을 어디서 사느냐에 따라 달라지는 세금
한국 거주자 개인 기준으로 크게 정리하면 이렇습니다.
| 상품 | 매매차익 | 배당·분배금 |
|---|---|---|
| 국내 주식, 국내 주식형 ETF | 비과세 (대주주 제외) | 15.4% |
| 국내 상장 해외지수·채권·원자재 ETF | 배당소득으로 15.4% | 15.4% |
| 해외 상장 주식·ETF | 양도소득세 22%, 연 250만 원 공제 | 15.4% 수준 (미국은 현지 15% 원천징수) |
여기에 몇 가지가 겹칩니다.
- 증권거래세: 국내 주식을 팔 때 매도 금액에 붙습니다. 2026년 기준 0.20%입니다(코스피는 거래세 0.05%와 농어촌특별세 0.15%). 이 세율은 몇 년 사이 0.15~0.25%를 오갔습니다. ETF를 팔 때는 붙지 않습니다.
- 금융소득종합과세: 이자와 배당(국내 상장 해외 ETF의 매매차익 포함)이 한 해 2,000만 원을 넘으면, 넘는 부분은 다른 소득과 합쳐 누진세율(지방세 포함 최고 49.5%)로 과세됩니다.
- 손익 통산: 해외 주식 양도소득은 같은 해의 이익과 손실을 합친 뒤 과세합니다. 국내 상장 해외 ETF는 매도할 때마다 이익에 과세하고 손실은 다른 이익과 상계되지 않습니다.
- 절세 계좌: 연금저축·IRP는 인출할 때까지 과세가 미뤄지고, 연금으로 받으면 3.3~5.5%입니다. ISA는 일정 한도까지 비과세이고 초과분은 9.9%로 분리과세됩니다. 대신 납입 한도와 인출 조건이 있습니다.
퀀트 전략 입장에서 중요한 것은 세율 자체보다 언제 세금을 내느냐입니다.
과세 이연이라는 복리
같은 세율이라도 해마다 내는 것과 마지막에 한 번 내는 것은 결과가 크게 다릅니다. 해마다 10%를 버는 전략을 20년 굴리는 단순한 예로 확인할 수 있습니다.
def after_tax(r=0.10, years=20, tax=0.22, every_year=True):
"""해마다 r 만큼 버는 전략의 세후 배수. every_year=True 면 매년 이익을 실현해 세금을 낸다."""
if every_year:
return (1 + r * (1 - tax)) ** years
v = (1 + r) ** years
return v - (v - 1) * tax # 끝에 한 번만 실현
print(f"세전 {(1.10) ** 20:.2f}배")
print(f"매년 실현 {after_tax(every_year=True):.2f}배")
print(f"끝에 한 번 {after_tax(every_year=False):.2f}배")
세전 6.73배
매년 실현 4.49배
끝에 한 번 5.47배
세율은 똑같이 22%인데, 매년 실현하면 4.49배, 끝에 한 번 실현하면 5.47배입니다. 연수익률로 바꾸면 7.8%와 8.9%입니다. 내지 않고 미뤄 둔 세금이 계좌 안에서 계속 불어나기 때문입니다. 세금을 늦게 낼수록 정부에게 무이자로 돈을 빌려 굴리는 셈입니다.
사고파는 전략은 이 이점을 스스로 버립니다. 추세추종 글의 이동평균 규칙처럼 1년에 몇 번씩 들락날락하면, 나올 때마다 이익이 실현되고 세금이 확정됩니다.
실험: 미국 주식, 20년, 네 가지 계좌
미국 주식에 투자하는 한국 거주자를 가정했습니다. 데이터는 올웨더 글과 같은 Shiller의 S&P 500 월별 가격·배당과 Fama-French 무위험수익률입니다. 무위험수익률의 원 출처는 Kenneth French Data Library이고, 코드는 같은 파일의 공개 사본을 읽습니다. 그 사본이 2020년 7월에 끝나서 기간은 1972년 1월부터 2020년 7월까지로 잡았습니다. 한 사람이 20년을 투자한다고 보고, 1972년부터 2000년까지 매년 1월에 시작하는 20년 구간 29개를 만들었습니다. 초기 금액은 1억 원입니다.
전략은 두 가지입니다.
- 매수 후 보유: 20년 동안 들고 있다가 마지막에 전부 판다.
- 10개월 이동평균: 월말 지수가 10개월 평균 위면 보유, 아래면 현금(무위험수익률). 추세추종 글의 200일선을 월 단위로 옮긴 규칙입니다.
계좌와 상품은 네 가지입니다.
| 방식 | 세금 처리 |
|---|---|
| 세전 | 세금 없음 |
| 해외 직접 | 미국 상장 ETF를 일반 계좌에서. 양도차익은 해마다 손익을 합쳐 250만 원 공제 후 22% |
| 국내 상장 | 국내 상장 S&P 500 ETF를 일반 계좌에서. 매도 이익은 배당소득 15.4%, 손실 상계 없음 |
| 연금 계좌 | 국내 상장 ETF를 연금저축에서. 중간 과세 없이 끝에 운용수익의 5.5% |
배당과 현금 이자는 금융소득으로 보고, 연 2,000만 원을 넘으면 종합과세를 적용했습니다. 다른 소득이 없다고 가정한 근사입니다. 세금 효과만 보려고 환율 변동과 매매 비용은 넣지 않았습니다. 스크립트는 tax_drag.py이고, 같은 폴더에 value_factor.py를 함께 두어야 돌아갑니다. 스크립트 목록은 코드 페이지에 있습니다.
결과
20년 구간 29개의 세후 연수익률 중앙값입니다.
| 매수 후 보유 | 10개월 이동평균 | |
|---|---|---|
| 세전 | 11.58% | 12.10% |
| 해외 직접 | 10.27% | 10.00% |
| 국내 상장 | 9.40% | 9.92% |
| 연금 계좌 | 11.30% | 11.82% |

세 가지가 눈에 띕니다.
첫째, 세금이 전략의 순위를 바꿨습니다. 세전으로는 이동평균이 보유보다 0.5%p 앞섰습니다. 29개 구간 중 19개에서 이겼습니다. 그런데 해외 직접 계좌에서는 순서가 뒤집혀 보유가 앞섰고, 이동평균이 이긴 구간은 14개로 줄었습니다. 세금으로 깎인 폭이 보유는 연 1.33%p, 이동평균은 연 2.09%p였습니다. 이동평균은 나올 때마다 이익을 실현해 과세 이연을 잃었기 때문입니다. 국내 상장 ETF에서는 이 폭이 보유 연 2.20%p, 이동평균 연 2.31%p였고, 연금 계좌에서는 둘 다 연 0.28%p였습니다. 이 폭은 모두 29개 구간마다 세전과 세후 연수익률의 차이를 구해 낸 중앙값이라, 위 표의 중앙값끼리 뺀 값과는 조금 다릅니다.
둘째, 국내 상장 ETF로 오래 들고 있으면 마지막 해가 문제입니다. 매수 후 보유를 국내 상장 ETF로 하면 세후 9.40%로 네 방식 가운데 가장 낮았습니다. 세율은 15.4%로 해외 직접의 22%보다 낮은데도 그렇습니다. 20년 동안 쌓인 이익을 한 해에 전부 실현하면 그 이익이 통째로 금융소득이 되고, 2,000만 원을 훌쩍 넘어 종합과세로 넘어가기 때문입니다.
| 20년 보유 후 한 번에 매도 | 매도 이익 | 15.4%라면 | 종합과세 반영 | 실효세율 |
|---|---|---|---|---|
| 1980~1999 | 21.5억 원 | 3.3억 원 | 9.9억 원 | 45.8% |
| 1990~2009 | 2.6억 원 | 0.4억 원 | 0.8억 원 | 31.2% |
| 2000~2019 | 1.7억 원 | 0.3억 원 | 0.4억 원 | 26.0% |
실제로는 여러 해에 나눠 팔아 해마다 2,000만 원 안쪽으로 맞추는 방법이 있으므로, 이 표는 아무 대비 없이 한 번에 팔았을 때의 경우입니다. 그래도 “세율이 낮은 상품이 유리하다”는 단순한 판단이 틀릴 수 있다는 것은 분명합니다.
셋째, 연금 계좌는 거의 세전에 가깝습니다. 두 전략 모두 세전보다 연 0.28%p 낮은 데 그쳤습니다. 중간에 사고팔아도 과세가 없으니 이동평균도 과세 이연을 잃지 않습니다. 사고파는 전략일수록 절세 계좌의 가치가 커집니다.
다만 연금 계좌 결과는 이론적인 상한으로 봐야 합니다. 연금저축과 IRP는 합쳐서 연 1,800만 원까지만 넣을 수 있어서 1억 원을 한 번에 넣을 수 없습니다. 연금 외 방식으로 꺼내면 16.5%가 붙고, 연금으로 받더라도 한 해 수령액이 1,500만 원을 넘으면 세금이 달라집니다. 그 대신 납입할 때 세액공제를 받는 이점은 이 실험에 넣지 않았습니다.
국내 주식 전략이라면
실전 ②~④에서 다룬 국내 종목 전략은 사정이 다릅니다. 소액주주의 국내 주식 매매차익은 비과세이므로 양도세 걱정이 없습니다. 대신 팔 때마다 증권거래세 0.20%가 붙습니다. 이것은 세금이지만 성격은 거래 비용과 같습니다.
연간 거래세 부담 ≈ 연간 매도 회전율 × 0.20%
매달 포트폴리오의 절반을 갈아치우는 전략이면 연간 매도 회전율이 600%이고, 거래세만 연 1.2%입니다. 수수료와 슬리피지는 별도입니다. 거래 비용 글에서 본 “회전율이 전략을 죽인다”는 이야기가 세금에서도 그대로 반복됩니다.
추세추종 글의 코스피 200일선 규칙을 국내 주식형 지수 ETF로 한다면, 매매차익 비과세에 거래세도 면제라 세금은 사실상 분배금에만 붙습니다. 같은 규칙을 미국 지수로 하면 위 실험처럼 세금이 연 2%p 넘게 가져갑니다. 같은 전략이라도 어느 시장의 어떤 상품으로 하느냐가 성과의 일부입니다.
백테스트에 세금을 넣을 때 확인할 것
이번 실험을 하면서 정리한 점검 목록입니다.
- 전략이 몇 번 이익을 실현하는지 센다. 실현 횟수가 많을수록 과세 이연을 잃는다.
- 상품별로 매매차익이 과세되는지, 어떤 소득으로 분류되는지 확인한다. 같은 S&P 500이라도 미국 상장 ETF와 국내 상장 ETF는 세금 체계가 다르다.
- 한 해에 몰리는 소득을 본다. 금융소득 2,000만 원 기준은 연 단위라서 언제 파느냐가 세율을 바꾼다.
- 손실을 상계할 수 있는지 본다. 해외 직접 투자는 같은 해 손익을 합치지만, 국내 상장 해외 ETF는 이익 난 매도마다 과세된다.
- 절세 계좌의 한도와 인출 조건을 같이 본다. 세후 수익률이 가장 좋아도 넣을 수 있는 돈과 꺼낼 수 있는 시점이 정해져 있다.
세금은 백테스트에서 가장 먼저 빼고 가장 늦게 떠올리는 항목입니다. 하지만 이번 실험에서 일반 계좌의 세금은 연수익률을 1.3~2.3%p 깎았습니다. 앞의 글들에서 전략과 보유 사이에 벌어졌던 차이와 비슷하거나 더 큽니다. 전략을 고르는 것만큼 그 전략을 담을 그릇을 고르는 것이 중요할 수 있습니다.
다음 글에서는 지금까지 만든 것을 실제로 돌리는 증권사 API 자동매매 파이프라인을 다룹니다.
2026-10-22 수정: “결과” 절에 국내 상장 ETF(보유 연 2.20%p, 이동평균 연 2.31%p)와 연금 계좌(둘 다 연 0.28%p)에서 세금으로 깎인 폭을 더하고, 이 폭이 29개 구간별 차이의 중앙값이라 표의 중앙값끼리 뺀 값과 조금 다르다는 점을 밝혔으며, 마지막 절의 “연 1~2%p”를 일반 계좌 기준 “1.3~2.3%p”로 바로잡았습니다.
이 글은 학습과 정보 공유 목적으로 작성되었으며, 특정 종목이나 상품에 대한 투자 권유가 아닙니다. 세법 내용은 작성 시점에 공개된 규정을 단순화해 정리한 것으로, 개인의 상황과 법 개정에 따라 달라질 수 있습니다. 세무 판단은 현행 규정과 전문가 상담을 통해 확인하시기 바랍니다. 투자의 판단과 책임은 투자자 본인에게 있습니다.