시뮬레이션 계산 방법
CoveredCall Block-Sim이 사용하는 계산 규칙과 데이터 처리 방식
1. 데이터 수집 및 저장
모든 데이터는 Yahoo Finance에서 수집됩니다.
수집 항목 (일별)
| 항목 | 출처 | 설명 |
|---|---|---|
| price | 종가 (Close) | 해당일 종가 |
| daily_return | 계산값 | (당일 종가 - 전일 종가) / 전일 종가 |
| dividend | Ticker.dividends | 배당 지급일의 주당 배당금 (없으면 0) |
| vix | ^VIX 종가 | CBOE 변동성 지수 |
| estimated_premium | 계산값 | VIX 기반 옵션 프리미엄 근사치 |
프리미엄 근사치 계산
과거 옵션 데이터는 VIX 기반 근사치를 사용합니다:
premium = VIX / 100 × cover_ratio × premium_factor × 0.7 // premium_factor: ELN 사용 시 0.3, 미사용 시 1.0
수집 기간: 2000년 1월 1일부터 현재까지. ETF가 아직 상장되지 않은 기간의 데이터는 합성 데이터로 대체됩니다 (3장 참조).
2. 블록 구성
블록은 특정 기간의 시장 상황을 캡슐화한 단위입니다. 사용자가 블록을 원하는 순서로 조립하여 가상의 투자 시나리오를 만들 수 있습니다.
Annual Block (연간 블록)
- • 2016년 ~ 현재까지 연도별 1개씩
- • 각 ETF마다 10개 블록 생성
- • 실데이터 없는 연도는 합성 데이터 사용
- • 기간: 1월 1일 ~ 12월 31일
Special Block (스페셜 블록)
- • 특정 시장 이벤트 기간을 정의
- • 닷컴버블 (2000.03 ~ 2002.10)
- • 글로벌 금융위기 (2008.09 ~ 2009.03)
- • 코로나 폭락/반등, 고금리 쇼크
블록별 계산 지표
| 지표 | 계산 방식 |
|---|---|
| price_return | (마지막 종가 - 첫 종가) / 첫 종가 × 100 |
| dividend_return | 기간 내 총 배당금 / 첫 종가 × 100 |
| total_return | price_return + dividend_return |
| total_return_drip | 배당 재투자 시뮬레이션 결과 (5장 참조) |
| mdd | 최대낙폭 (6장 참조) |
| index_price_return | 기초자산 지수의 가격 수익률 |
3. 합성 데이터 생성 (추정치)
JEPI (2020년 출시), JEPQ (2022년 출시) 등 최근에 상장된 ETF는 10년치 실데이터가 없습니다. 부족한 기간에 대해 기초자산 지수(SPY/QQQ/IWM)의 일별 수익률과 VIX를 기반으로 커버드콜 ETF의 예상 성과를 추정합니다.
추정 로직
지수 일별 수익률 > 0 (상승): ETF 수익률 = 지수 수익률 × upside_participation 지수 일별 수익률 < 0 (하락): ETF 수익률 = 지수 수익률 × (1 - downside_cushion) // upside_participation (상방 참여율): // ATM 100% 커버 (QYLD/XYLD): 0.55 (55%) // ELN 사용 (JEPI/JEPQ): 0.90 (90%) // OTM 부분 커버 (QQQI): 0.75 (75%) // downside_cushion: cover_ratio × 0.02
월 배당 = 현재가 × (base_annual_yield / 12) × (VIX / 20) // base_annual_yield: // ATM 100% 커버: 12%/년 // ELN 사용: 8%/년 // 기타: 10%/년 // VIX < 20: 배당 감소 // VIX > 20: 배당 증가 (변동성↑ → 옵션 프리미엄↑)
#추정치 태그로 표시되며, 실제 ETF의 과거 성과와 다를 수 있습니다. 시뮬레이션의 참고 자료로만 활용하세요.4. 블록 시뮬레이션 엔진
사용자가 선택한 블록들을 지정한 순서대로 연결하여 가상의 투자 시나리오를 시뮬레이션합니다.
시뮬레이션 흐름
초기 포트폴리오 = $100 (정규화)
각 블록에 대해 (사용자가 지정한 순서대로):
1. 블록의 첫 번째 거래일 가격을 기준점으로 설정
2. 각 거래일마다:
a. 전일 대비 가격 변동률 계산
b. 모든 보유 주식에 가격 변동 적용:
shares *= (오늘 가격 / 어제 가격)
c. 배당금이 있는 경우:
- DRIP OFF: 현금으로 적립 (시장 변동 영향 없음)
- DRIP ON: 즉시 주식으로 재투자
d. 포트폴리오 가치 = shares + cash
3. 다음 블록으로 이동 (shares/cash 상태 유지)블록 순서가 영향을 주는 것 / 주지 않는 것
✅ 순서에 따라 달라짐
- • 수익률 곡선의 모양
- • MDD (최대낙폭)
- • Sharpe / Sortino 지수
- • 배당금 총액 (DRIP OFF 시)
- • Total Return (DRIP OFF 시)
❌ 순서와 무관 (제한적 조건)
- • Total Return (DRIP ON 시, 동일 블록 집합 기준)
- • 순수 가격 수익률 (Price Return)
- → 배당이 즉시 재투자되어 현금 버킷이 없을 때
일별 수익률의 단순 곱이므로
(1+r₁)×(1+r₂) = (1+r₂)×(1+r₁)
5. 배당금 재투자 (DRIP)
DRIP OFF
배당금을 현금으로 적립합니다.
배당 지급 시: cash += shares × (dividend / price) 포트폴리오 가치: value = shares + cash // 현금은 시장 변동 영향 없음 // 따라서 "언제" 배당을 받았냐에 // 따라 총 배당액이 달라짐
DRIP ON
배당금을 즉시 주식으로 재투자합니다.
배당 지급 시: bonus = shares × (dividend / price) shares += bonus // 재투자 포트폴리오 가치: value = shares // 현금 없음 // 모든 자산이 주식이므로 // 곱셈의 교환법칙에 의해 // 순서와 무관하게 결과 동일
6. 리스크 지표 계산
MDD (Maximum Drawdown, 최대낙폭)
고점 대비 최대 하락 비율. 투자 기간 중 최악의 손실을 나타냅니다.
for each day: cumulative_max = max(cumulative_max, today_value) drawdown = (today_value - cumulative_max) / cumulative_max MDD = min(MDD, drawdown) // 예: 고점 $150에서 $120으로 하락 → MDD = -20%
Sharpe Ratio (샤프 비율)
위험 1단위당 초과수익. 높을수록 효율적인 투자.
연환산 수익률 = 일별 평균 수익률 × 252 연환산 변동성 = 일별 표준편차 × √252 무위험 수익률 = 해당 연도 미국 기준금리 Sharpe = (연환산 수익률 - 무위험 수익률) / 연환산 변동성 // > 1.0: 양호 | > 2.0: 우수 | < 0: 무위험 수익률 미달
Sortino Ratio (소르티노 비율)
하방 위험만 고려한 샤프 비율. 상승 변동은 페널티로 보지 않습니다.
하방 편차 = (음의 일별 수익률들의 표준편차) × √252 Sortino = (연환산 수익률 - 무위험 수익률) / 하방 편차 // Sharpe보다 커버드콜 ETF 평가에 더 적합 // (프리미엄 수입으로 상방 변동이 제한되므로)
Calmar Ratio (칼마 비율)
연환산 수익률 대비 최대낙폭 비율. 최악의 하락 대비 수익성을 측정합니다.
Calmar = 연환산 수익률(%) / |MDD(%)| // 예: 연환산 수익률 15%, MDD -10% → Calmar = 1.5 // > 1.0: 하락 대비 충분한 수익 | < 0.5: 하락 방어 취약
연도별 무위험 수익률 (미국 기준금리)
8. 한계 및 주의사항
합성 데이터는 추정치입니다
실제 ETF의 과거 성과와 다를 수 있습니다. 특히 ELN 구조(JEPI/JEPQ)나 0DTE 옵션(QQQI)의 특수한 행동 양식은 단순 지수 기반 모델로 완전히 재현되지 않습니다.
옵션 프리미엄은 근사치입니다
실제 옵션 시장의 미세 구조(implied volatility skew, term structure 등)는 VIX 기반 단순 모델로 충분히 반영되지 않습니다.
거래 비용 미반영
실제 투자에서는 매매 수수료, 슬리피지, 세금(배당소득세 15.4%) 등이 발생하지만, 본 시뮬레이터에서는 반영하지 않습니다.
NAV vs 시장가
ETF의 실제 거래가는 NAV(순자산가치)와 차이가 있을 수 있습니다. Yahoo Finance의 종가 데이터를 사용합니다.
과거 성과 ≠ 미래 수익
과거 데이터에 기반한 시뮬레이션 결과가 미래의 투자 수익을 보장하지 않습니다. 참고 자료로만 활용하세요.
CoveredCall Block-Sim v1.0 · 2026.02
데이터 출처: Yahoo Finance