CovBlock-Sim

시뮬레이션 계산 방법

CoveredCall Block-Sim이 사용하는 계산 규칙과 데이터 처리 방식

1. 데이터 수집 및 저장

모든 데이터는 Yahoo Finance에서 수집됩니다.

수집 항목 (일별)

항목출처설명
price종가 (Close)해당일 종가
daily_return계산값(당일 종가 - 전일 종가) / 전일 종가
dividendTicker.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_returnprice_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
② 배당금 추정 (월 1회, VIX 연동)
월 배당 = 현재가 × (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: 하락 방어 취약

연도별 무위험 수익률 (미국 기준금리)

2016
0.50%
2017
1.25%
2018
2.50%
2019
1.75%
2020
0.25%
2021
0.25%
2022
4.50%
2023
5.50%
2024
5.25%
2025
4.50%

7. 태그 자동 생성 규칙

블록 태그는 수집된 데이터를 기반으로 자동 생성됩니다. 시장 상황을 직관적으로 파악할 수 있도록 돕습니다.

태그조건
#대세하락가격 수익률 < -15%
#강세장가격 수익률 > +20%
#횡보장-5% ≤ 가격 수익률 ≤ +5%
#고변동성평균 VIX > 25
#저변동성평균 VIX < 15
#추정치합성 데이터 기반 (ETF 실데이터 없음)

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

커버드콜 계산 방법론 · 백테스트 로직 | CovBlock-Sim