SCHD · 배당 ETF · 생활비 꺼내기 · 실측 재현 페이지
SCHD 상장일(2011년 10월 20일)부터 2026년 10월 16일까지 야후의 실제 가격·분배 기록으로 1억원짜리 계좌 둘을 만들었습니다. ① 배당 계좌 — SCHD 를 사서 분배가 나올 때마다 전부 꺼내 쓴다(석 달에 한 번) ② 팔아 쓰기 계좌 — S&P500 ETF(SPY)를 사서 자기 분배는 다시 사고, 배당 계좌가 분배를 받는 날 같은 금액을 SPY 를 팔아 꺼낸다. 두 계좌가 손에 쥔 현금은 원 단위까지 같습니다.
| 상황 | 기준 |
|---|---|
| 배당을 생활비로 꺼내 쓰고 싶다(미국 배당 ETF) | SCHD 대신 S&P500 ETF 를 사서, SCHD 에서 받았을 배당만큼만 정해 둔 날에 팔아 쓴다 — 잰 것은 SCHD 분배만큼(연 3% 남짓)을 석 달에 한 번 꺼낸 경우입니다 |
| 왜 | 배당은 가격에서 빠져나온 돈입니다(배당락). 배당을 받든 직접 팔든 계좌에서 같은 현금이 빠집니다 — 차이는 어느 쪽이 더 올랐느냐입니다. 이 15년 분배까지 다시 넣은 연 수익: SCHD 13.46% · SPY 15.03% |
| 지키는 법 | 꺼낼 날짜와 금액을 먼저 적어 두고, 그날 그 금액만 판다 — 값이 떨어진 날에도 |
| 도중에는 | 15년 중 팔아 쓰기 계좌가 앞선 날 93% · 가장 뒤처진 날 2023-01-06(배당 계좌의 92%) · 배당 쪽이 더 남은 10년은 10번(2012-05~2013-03 시작) |
| ETF | 시작 | 배당 계좌 | 팔아 쓰기 | 10년짜리 중 팔아 쓰기가 더 남은 |
|---|---|---|---|---|
| VYM | 2006-11-16~ | 3.18억 | 4.47억 | 120번 중 106번 |
| DVY | 2003-11-07~ | 3.15억 | 5.30억 | 156번 중 143번 |
| SDY | 2005-11-15~ | 2.88억 | 4.41억 | 132번 중 92번 |
| HDV | 2011-03-31~ | 2.96억 | 4.70억 | 68번 중 68번 |
| DGRO | 2014-06-12~ | 3.20억 | 3.71억 | 29번 중 29번 |
| NOBL | 2013-10-10~ | 2.80억 | 4.42억 | 37번 중 37번 |
| VIG | 2006-05-02~ | 4.82억 | 5.56억 | 126번 중 104번 |
| SPYD | 2015-10-22~ | 1.55억 | 2.98억 | 13번 중 13번 |
돌리는 법: zip 을 풀고 python run_schdsell.py
기준일 2026-10-16 · 1억원 시작 · 금액은 달러 총수익을 1억원 단위로 환산(환율 변화 미반영) [본편 · SCHD 배당만 꺼내 쓰기 vs SPY 팔아 쓰기 · 2011-10-20 ~ 2026-10-16 · 15.0년] 15년 동안 SCHD 분배 60번(석 달에 한 번) · 나올 때마다 전부 꺼냄 세전: 두 계좌가 꺼낸 돈 1억 1,111만원 → 끝 계좌 배당 4억 1,253만원 · 팔아 쓰기 5억 2,818만원 (차이 1억 1,565만원) 세후: 꺼낸 세후 현금 9,400만원 → 끝 계좌 배당 4억 1,253만원 · 팔아 쓰기 5억 2,440만원 · 끝에 다 팔고 세금까지: 3억 6,440만원 · 4억 6,052만원 15년 중 팔아 쓰기 계좌가 앞선 날 93% · 가장 뒤처진 날 2023-01-06(배당 계좌의 92%) 10년짜리(시작 달을 한 달씩 바꿔) 61번: 팔아 쓰기가 더 남은 51번 · 배당이 더 남은 10번 (배당 쪽 시작 달 2012-05 ~ 2013-03) 세후 판 10년짜리 61번: 팔아 쓰기가 더 남은 51번 분배까지 다시 넣은 연 수익: SCHD 13.46% · SPY 15.03% 그해 가장 크게 떨어진 폭: 2022년 SCHD -16.8% · SPY -24.5% / 2020년 SCHD -33.4% · SPY -33.7% [반론 · 다른 미국 배당 ETF 8개 · 각자 상장일부터 · 세전 · 1억원] VYM 2006-11-16~ 끝 계좌 배당 3.18억 · 팔아 쓰기 4.47억 · 10년짜리 120번 중 팔아 쓰기 106번 DVY 2003-11-07~ 끝 계좌 배당 3.15억 · 팔아 쓰기 5.30억 · 10년짜리 156번 중 팔아 쓰기 143번 SDY 2005-11-15~ 끝 계좌 배당 2.88억 · 팔아 쓰기 4.41억 · 10년짜리 132번 중 팔아 쓰기 92번 HDV 2011-03-31~ 끝 계좌 배당 2.96억 · 팔아 쓰기 4.70억 · 10년짜리 68번 중 팔아 쓰기 68번 DGRO 2014-06-12~ 끝 계좌 배당 3.20억 · 팔아 쓰기 3.71억 · 10년짜리 29번 중 팔아 쓰기 29번 NOBL 2013-10-10~ 끝 계좌 배당 2.80억 · 팔아 쓰기 4.42억 · 10년짜리 37번 중 팔아 쓰기 37번 VIG 2006-05-02~ 끝 계좌 배당 4.82억 · 팔아 쓰기 5.56억 · 10년짜리 126번 중 팔아 쓰기 104번 SPYD 2015-10-22~ 끝 계좌 배당 1.55억 · 팔아 쓰기 2.98억 · 10년짜리 13번 중 팔아 쓰기 13번 8개 중 팔아 쓰기 계좌가 더 남은 ETF 8개 [한계 · 상장 뒤 첫 5년, 분배까지 넣은 연 수익 차(배당 ETF − SPY)] SCHD 2011-10~2016-10 -0.64%포인트 VYM 2006-11~2011-11 +0.42%포인트 DVY 2003-11~2008-11 +1.48%포인트 SDY 2005-11~2010-11 +1.54%포인트 HDV 2011-03~2016-03 +1.25%포인트 DGRO 2014-06~2019-06 +0.73%포인트 NOBL 2013-10~2018-10 -0.96%포인트 VIG 2006-05~2011-05 +1.91%포인트 SPYD 2015-10~2020-10 -9.24%포인트 [한계 · 국내 고배당 ETF · ARIRANG 고배당주(161510) vs KODEX200(069500) · 국내주식형이라 매도 차익 비과세] 2012-08-29~ 끝 계좌 고배당 2.20억 · 코스피200 팔아 쓰기 2.26억 10년짜리 51번 중 코스피200 팔아 쓰기가 더 남은 18번 (분배세 15.4% 넣으면 22번) 끝.
# -*- coding: utf-8 -*-
"""SCHD 배당만 꺼내 쓰기 vs S&P500(SPY) 팔아 쓰기 — 알고랩 재현 코드 (2026-10-18 영상).
배당 계좌 : 1억원으로 배당 ETF 를 사서, 분배가 나올 때마다 전부 꺼내 쓴다.
팔아 쓰기 계좌 : 1억원으로 SPY 를 사서, SPY 자기 분배는 다시 산다.
배당 계좌가 분배를 받는 날, 같은 금액을 SPY 를 팔아 꺼낸다(꺼낸 현금이 원 단위로 같다).
세전(기본) / 세후(국내상장 해외 ETF 모형: 분배 15.4% 떼고 꺼냄 · 팔아 쓰기는 같은 세후 현금을 만들도록 팔고
판 금액 중 차익 몫(평균단가 기준)에만 15.4%) 두 판. 끝에 다 팔 때의 세금은 '청산후' 로 따로.
자료: data_schdsell/*.json — 야후 chart API 원 종가(분할 반영)·adjclose·분배 기록(2026-10-16 까지 얼림).
돌리는 법: python run_schdsell.py (표준 라이브러리만 씁니다)
"""
import datetime
import json
import os
HERE = os.path.dirname(os.path.abspath(__file__))
D = os.path.join(HERE, "data_schdsell")
ASOF = "2026-10-16" # 기준일 고정 — 영상과 같은 숫자가 나온다
TAU = 0.154
def won(x):
x = round(x / 1e4) # 만원
eok, man = divmod(x, 10000)
return (f"{eok}억 {man:,}만원" if man else f"{eok}억원") if eok else f"{man:,}만원"
def days(a, b):
f = datetime.date.fromisoformat
return (f(b) - f(a)).days
def series(t):
j = json.load(open(os.path.join(D, t.replace(".", "_") + ".json"), encoding="utf-8"))
rows = [r for r in j["rows"] if r[0] <= ASOF]
divs = {}
for d, a in j["divs"]:
divs[d] = divs.get(d, 0) + a
dates = [r[0] for r in rows]
return dates, [r[1] for r in rows], [divs.get(d, 0.0) for d in dates], [r[2] for r in rows]
def align(a, b):
"""두 종목의 공통 거래일. 한쪽만 거래한 날의 분배는 다음 공통일로 민다."""
dA, cA, vA, _ = series(a); dB, cB, vB, _ = series(b)
common = sorted(set(dA) & set(dB)); s = set(common)
def al(dates, c, v):
C, V, carry = [], [], 0.0
for d, x, y in zip(dates, c, v):
carry += y
if d in s:
C.append(x); V.append(carry); carry = 0.0
return C, V
CA, VA = al(dA, cA, vA); CB, VB = al(dB, cB, vB)
return common, CA, VA, CB, VB
def run(CA, VA, CB, VB, i0, i1, td, tg, path=None):
shA = 1e8 / CA[i0]
shB = 1e8 / CB[i0]; basisB = 1e8
took = 0.0
for i in range(i0 + 1, i1 + 1):
if VB[i]: # SPY 자기 분배는 (세후) 다시 산다
g = shB * VB[i] * (1 - td)
shB += g / CB[i]; basisB += g
if VA[i]:
cash = shA * VA[i] * (1 - td) # 배당 계좌가 손에 쥐는 현금
took += cash
avg = basisB / shB
r = max(0.0, 1 - avg / CB[i]) # 판 금액 중 차익 몫
x = cash / (1 - r * tg) # 세금 내고 같은 현금이 남도록 판다
q = x / CB[i]
basisB -= avg * q; shB -= q
if path is not None:
path.append(shB * CB[i] / (shA * CA[i]))
vA = shA * CA[i1]; vB = shB * CB[i1]
return vA, vB, took, vA - max(0.0, vA - 1e8) * tg, vB - max(0.0, vB - basisB) * tg
def month_starts(dates):
out, last = [], None
for i, d in enumerate(dates):
if d[:7] != last:
out.append(i); last = d[:7]
return out
def rolling10(common, CA, VA, CB, VB, td, tg):
n = len(common); w = t = 0; lose = []
for s in month_starts(common):
e_date = str(int(common[s][:4]) + 10) + common[s][4:]
e = next((j for j in range(s, n) if common[j] >= e_date), None)
if e is None:
break
r = run(CA, VA, CB, VB, s, e, td, tg); t += 1
if r[1] > r[0]:
w += 1
else:
lose.append(common[s][:7])
return w, t, lose
def unit_tr(c, dv):
u = [1.0]
for i in range(1, len(c)):
u.append(u[-1] * (c[i] + dv[i]) / c[i - 1])
return u
def cagr(u0, u1, nd):
return (u1 / u0) ** (365.25 / nd) - 1
def year_mdd(t, y):
d, c, dv, _ = series(t)
u = unit_tr(c, dv)
idx = [i for i, x in enumerate(d) if x[:4] == y]
pk = u[idx[0]]; m = 0.0
for i in idx:
pk = max(pk, u[i]); m = min(m, u[i] / pk - 1)
return m * 100
def tr_cagr(t, start):
d, c, dv, _ = series(t)
i0 = next(i for i, x in enumerate(d) if x >= start)
u = unit_tr(c, dv)
return cagr(u[i0], u[-1], days(d[i0], d[-1])) * 100
def first5_gap(a, b):
"""상장 뒤 첫 5년 — 분배까지 다시 넣은 연 수익 차(배당 ETF − SPY, %포인트)."""
common, CA, VA, CB, VB = align(a, b)
uA = unit_tr(CA, VA); uB = unit_tr(CB, VB)
e_date = str(int(common[0][:4]) + 5) + common[0][4:]
e = next(j for j in range(len(common)) if common[j] >= e_date)
nd = days(common[0], common[e])
return common[0][:7], common[e][:7], (cagr(1, uA[e], nd) - cagr(1, uB[e], nd)) * 100
print(f"기준일 {ASOF} · 1억원 시작 · 금액은 달러 총수익을 1억원 단위로 환산(환율 변화 미반영)\n")
# ── 본편 ──
common, CA, VA, CB, VB = align("SCHD", "SPY")
n = len(common)
print(f"[본편 · SCHD 배당만 꺼내 쓰기 vs SPY 팔아 쓰기 · {common[0]} ~ {common[-1]} · {days(common[0], common[-1]) / 365.25:.1f}년]")
path = []
vA, vB, took, _, _ = run(CA, VA, CB, VB, 0, n - 1, 0.0, 0.0, path)
print(f" 15년 동안 SCHD 분배 {sum(1 for v in VA[1:] if v)}번(석 달에 한 번) · 나올 때마다 전부 꺼냄")
print(f" 세전: 두 계좌가 꺼낸 돈 {won(took)} → 끝 계좌 배당 {won(vA)} · 팔아 쓰기 {won(vB)} (차이 {won(vB - vA)})")
vA2, vB2, took2, lA, lB = run(CA, VA, CB, VB, 0, n - 1, TAU, TAU)
print(f" 세후: 꺼낸 세후 현금 {won(took2)} → 끝 계좌 배당 {won(vA2)} · 팔아 쓰기 {won(vB2)} · 끝에 다 팔고 세금까지: {won(lA)} · {won(lB)}")
ahead = sum(1 for r in path if r > 1) / len(path)
k = min(range(len(path)), key=lambda i: path[i])
print(f" 15년 중 팔아 쓰기 계좌가 앞선 날 {ahead * 100:.0f}% · 가장 뒤처진 날 {common[k + 1]}(배당 계좌의 {path[k] * 100:.0f}%)")
w, t, lose = rolling10(common, CA, VA, CB, VB, 0.0, 0.0)
print(f" 10년짜리(시작 달을 한 달씩 바꿔) {t}번: 팔아 쓰기가 더 남은 {w}번 · 배당이 더 남은 {t - w}번 (배당 쪽 시작 달 {lose[0]} ~ {lose[-1]})")
w2, t2, _ = rolling10(common, CA, VA, CB, VB, TAU, TAU)
print(f" 세후 판 10년짜리 {t2}번: 팔아 쓰기가 더 남은 {w2}번")
print(f" 분배까지 다시 넣은 연 수익: SCHD {tr_cagr('SCHD', common[0]):.2f}% · SPY {tr_cagr('SPY', common[0]):.2f}%")
print(f" 그해 가장 크게 떨어진 폭: 2022년 SCHD {year_mdd('SCHD', '2022'):.1f}% · SPY {year_mdd('SPY', '2022'):.1f}% / "
f"2020년 SCHD {year_mdd('SCHD', '2020'):.1f}% · SPY {year_mdd('SPY', '2020'):.1f}%")
# ── 반론: 다른 미국 배당 ETF 8개 ──
print("\n[반론 · 다른 미국 배당 ETF 8개 · 각자 상장일부터 · 세전 · 1억원]")
wins = 0
for a in ["VYM", "DVY", "SDY", "HDV", "DGRO", "NOBL", "VIG", "SPYD"]:
cm, A1, V1, B1, W1 = align(a, "SPY")
x = run(A1, V1, B1, W1, 0, len(cm) - 1, 0.0, 0.0)
rw, rt, _ = rolling10(cm, A1, V1, B1, W1, 0.0, 0.0)
wins += x[1] > x[0]
print(f" {a:5s} {cm[0]}~ 끝 계좌 배당 {x[0] / 1e8:.2f}억 · 팔아 쓰기 {x[1] / 1e8:.2f}억 · 10년짜리 {rt}번 중 팔아 쓰기 {rw}번")
print(f" 8개 중 팔아 쓰기 계좌가 더 남은 ETF {wins}개")
print("\n[한계 · 상장 뒤 첫 5년, 분배까지 넣은 연 수익 차(배당 ETF − SPY)]")
for a in ["SCHD", "VYM", "DVY", "SDY", "HDV", "DGRO", "NOBL", "VIG", "SPYD"]:
s0, s1, g = first5_gap(a, "SPY")
print(f" {a:5s} {s0}~{s1} {g:+.2f}%포인트")
# ── 한계: 국내 고배당 ──
print("\n[한계 · 국내 고배당 ETF · ARIRANG 고배당주(161510) vs KODEX200(069500) · 국내주식형이라 매도 차익 비과세]")
cm, A1, V1, B1, W1 = align("161510.KS", "069500.KS")
x = run(A1, V1, B1, W1, 0, len(cm) - 1, 0.0, 0.0)
rw, rt, _ = rolling10(cm, A1, V1, B1, W1, 0.0, 0.0)
rw2, rt2, _ = rolling10(cm, A1, V1, B1, W1, TAU, 0.0)
print(f" {cm[0]}~ 끝 계좌 고배당 {x[0] / 1e8:.2f}억 · 코스피200 팔아 쓰기 {x[1] / 1e8:.2f}억")
print(f" 10년짜리 {rt}번 중 코스피200 팔아 쓰기가 더 남은 {rw}번 (분배세 15.4% 넣으면 {rw2}번)")
print("\n끝.")
알고랩 Strategy Lab — 전략을 검증하고, 검증한 것만 자동매매로 옮깁니다. 값이 떨어진 날에도 정해 둔 날 정해 둔 만큼만 파는 일은 사람보다 봇이 잘합니다. 알고랩 자동매매 살펴보기 · 전략 검증 전체 보기
과거 데이터를 돌려 본 결과이며 미래 수익을 보장하지 않습니다. 투자 판단과 책임은 본인에게 있습니다.