SCHD · 배당 ETF · 생활비 꺼내기 · 실측 재현 페이지

SCHD 배당만 쓸까,
S&P500 팔아 쓸까

SCHD 상장일(2011년 10월 20일)부터 2026년 10월 16일까지 야후의 실제 가격·분배 기록으로 1억원짜리 계좌 둘을 만들었습니다. ① 배당 계좌 — SCHD 를 사서 분배가 나올 때마다 전부 꺼내 쓴다(석 달에 한 번) ② 팔아 쓰기 계좌 — S&P500 ETF(SPY)를 사서 자기 분배는 다시 사고, 배당 계좌가 분배를 받는 날 같은 금액을 SPY 를 팔아 꺼낸다. 두 계좌가 손에 쥔 현금은 원 단위까지 같습니다.

5억 2,818만원팔아 쓰기 계좌의 끝 잔고 — 배당 계좌는 4억 1,253만원 (두 계좌 모두 1억 1,111만원 꺼냄 · 세전)
51번시작 달을 한 달씩 바꾼 10년짜리 61번 중 팔아 쓰기 쪽이 더 남은 경우 (영상의 「여섯 번 중 다섯 번」)
8개다른 미국 배당 ETF 8개(각자 상장일부터)에서 팔아 쓰기 계좌가 더 남은 ETF

오늘 드리는 것 — 기준 한 줄

상황기준
배당을 생활비로 꺼내 쓰고 싶다(미국 배당 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 8개 (1억원 · 세전 · 끝 잔고)

ETF시작배당 계좌팔아 쓰기10년짜리 중 팔아 쓰기가 더 남은
VYM2006-11-16~3.18억4.47억120번 중 106번
DVY2003-11-07~3.15억5.30억156번 중 143번
SDY2005-11-15~2.88억4.41억132번 중 92번
HDV2011-03-31~2.96억4.70억68번 중 68번
DGRO2014-06-12~3.20억3.71억29번 중 29번
NOBL2013-10-10~2.80억4.42억37번 중 37번
VIG2006-05-02~4.82억5.56억126번 중 104번
SPYD2015-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 — 전략을 검증하고, 검증한 것만 자동매매로 옮깁니다. 값이 떨어진 날에도 정해 둔 날 정해 둔 만큼만 파는 일은 사람보다 봇이 잘합니다. 알고랩 자동매매 살펴보기 · 전략 검증 전체 보기

과거 데이터를 돌려 본 결과이며 미래 수익을 보장하지 않습니다. 투자 판단과 책임은 본인에게 있습니다.