이번 편은 파이썬을 이용한 데이터 분석의 주제를 약간 벗어납니다. 동시에 연재하고 있는 투자 성과 분석 중급편에 조금 더 어울리는 주제이지만, 이 연재에서 기초자산과 커버드콜(covered call)을 비교 분석하는 방법을 소개하는 것과 관련이 있어 글로 써봅니다.
지난 세 편의 글을 통해 기초자산과 커버드콜의 수익률을 비교해 보았습니다. 커버드콜을 홍보(?)하는 자산 운용사나 책 또는 동영상 등으로 커버드콜을 소개하는 콘텐츠 제작자들의 설명과는 다른 점이 발견되었습니다. 분석에 사용한 커버드콜에 대해 한정되기는 하지만, 투자 기간에 따라서는 하락장이나 횡보장이라고 해서 커버드콜이 기초자산보다 유리하지 않았습니다. 참고: 다른 대부분의 커버드콜도 분석해 보면 비슷한 현상이 발생합니다. 이는 커버드콜의 구조에 의해 발생하기 때문입니다.
커버드콜은 위험이 더 낮으니 단순히 수익률만으로 기초자산과 비교할 수 없는 것이 아니냐고 이야기할 수 있습니다. 그 말은 맞지만, 이 글의 주제와는 직접적인 연관이 없습니다. 이 글은 자산운용사와 콘텐츠 제작자들이 하락장과 횡보장에서 커버드콜의 수익률이 기초자산보다 높지 못한 이유를 제대로 설명하지 못하는 까닭이 무엇인지에 대한 이야기이기 때문입니다. 참고: 다음편과 이어지는 두어 편의 글에서 기초자산과 커버드콜의 위험을 비교 분석하는 방법을 다룰 계획입니다.
지금까지의 연재를 따라오면서 하나씩 직접 실행해 가며 결과를 주의 깊게 살펴본 분이라면 눈치챌 수 있을 것입니다. 분석 방법이나 결과가 잘못되었을 가능성이 극히 낮기에, 하락장과 횡보장에서 커버드콜이 유리하다는 설명이 잘못되었을 가능성이 높은 것입니다.
어디에서 잘못된 것일까요? 그리고 왜 잘못된 설명을 하는 것일까요?
참고: 이 글과 전후 몇 편의 글은 기초자산과 커버드콜을 사례로 파이썬을 활용하여 자산의 성과를 비교 분석하는 방법을 소개합니다. 제 책과 글을 통해 여러 차례 상세하게 설명했지만, 커버드콜은 장기 투자자에게 투자 가치가 없다는 결론이 나오게 됩니다. 커버드콜도 투자자에 따라서는 투자할 가치가 있다고 반론하는 댓글에는 답변하지 않습니다. 대개는 데이터를 어떻게 분석했고, 분석 결과의 의미가 무엇인지 충분히 이해하지 못했기에 나오는 의문이거나, 데이터 분석의 전제를 고려하지 않은 지적이기 때문입니다.
주의: 이 글은 특정 상품 또는 특정 전략에 대한 추천의 의도가 없습니다. 이 글에서 제시하는 수치는 과거에 그랬다는 기록이지, 앞으로도 그럴 거라는 예상이 아닙니다. 분석 대상, 기간, 방법에 따라 전혀 다른 결과가 나올 수 있습니다. 데이터 수집, 가공, 해석 단계에서 의도하지 않은 오류가 있을 수 있습니다. 일부 설명은 편의상 현재형으로 기술하지만, 데이터 분석에 대한 설명은 모두 과거형으로 이해해야 합니다.
커버드콜에 대한 설명
커버드콜은 기초자산을 보유하고 기초자산의 미래 수익률을 담보로 콜옵션을 발행합니다. 콜옵션 매수자는 프리미엄(premium)이라는 현금을 주고 콜옵션을 사갑니다. 콜옵션 만기가 되었을 때, 기초자산의 가격이 행사가 이상이면 콜옵션 매수자는 콜옵션을 행사합니다.
프리미엄의 본질은 대출금이고, 콜옵션은 대출 증서입니다. 흔히 설명하는 미래의 수익률을 가져오니 하는 이야기는 잘못된 설명입니다. 다음 달 월급이 나오면 갚을 요량으로 이번 달에 마이너스 대출을 쓴다면, 미래의 월급을 가져오는 것일까요? 그냥 대출이며, 대출은 항상 이자가 붙습니다. 이에 대한 자세한 설명은 책 <당신이 커버드콜에 장기 투자하면 안되는 이유 - 매년 100만원씩 손해보지 않는 방법>을 참고하기 바랍니다.
콜옵션 만기 때, 기초자산의 가격이 상승했다면, 커버드콜은 기초자산이 상승한 만큼의 돈을 콜옵션 매수자에게 주어야 합니다. 반대로 기초자산의 가격이 상승하지 않았다면, 콜옵션 행사자는 콜옵션을 그냥 버립니다. 참고: 등가격(At The Money; ATM) 방식의 콜옵션에 대한 설명입니다.
커버드콜과 콜옵션 매수자의 수익은 다음과 같은 간단한 수식으로 표현할 수 있습니다.
커버드콜 = 기초자산 + (프리미엄 - 콜옵션)
콜옵션 매수자 = (콜옵션 - 프리미엄)
수식을 읽어보면 위의 설명과 동일함을 알 수 있습니다. 두 수식을 더하면 커버드콜과 콜옵션 매수자의 수익이 합해집니다. 다음과 같이 프리미엄과 콜옵션 항들이 상쇄되어 기초자산만 남습니다.
커버드콜 + 콜옵션 매수자 = 기초자산 + (프리미엄 - 콜옵션) + (콜옵션 - 프리미엄) = 기초자산
수익은 오직 기초자산에서만 발생합니다. 그 수익을 커버드콜과 콜옵션 매수자가 나누어 가지는 것입니다.
커버드콜에 대한 설명에 나오는 커버드콜 수익 그래프는 이 수식으로 만든 것입니다. 그런데 수식을 보여주고 해석해서 기초자산의 수익을 커버드콜과 콜옵션 매수자가 나누어 가진다고 설명하는 분들은 흔치 않습니다.
왜 그럴까요? 잘 모르기 때문입니다. 커버드콜에 대해 제대로 알지 못한다는 사실 자체를 인식하지 못하면서 해설하는 것입니다. 위의 수식이 커버드콜의 구조적 특성을 설명하는 것입니다. 수식에 의해 커버드콜은 기초자산보다 장기 수익률이 낮아지는 압력이 발생하는 것입니다. 콜옵션 매수자도 수익을 기대하고 투자하기 때문입니다. 참고: 기술적으로 세세하게 아는 것과 전반적인 의미를 이해하는 것은 다를 수 있습니다.
커버드콜의 수익 구조 그래프
파이썬으로 그래프를 그리는 방법을 소개하는 연재이니, 수익 구조 그림을 그려 보겠습니다.
xs = np.arange(-4, 4 + 1, 1)
premium = 1
ys = [x + premium if x <= 0 else premium for x in xs]
bs = xs - ys
plt.axes().set_aspect('equal')
plt.axhline(0, ls = '--', lw = 1, color = 'tab:gray')
plt.axvline(0, ls = '--', lw = 1, color = 'tab:gray')
plt.plot(xs, xs, label = 'Basic')
plt.plot(xs, ys, label = 'Covered call')
plt.plot(xs, bs, label = 'Buyer')
plt.xticks(xs)
plt.yticks(xs)
plt.gca().xaxis.set_major_formatter(PercentFormatter(decimals = 0))
plt.gca().yaxis.set_major_formatter(PercentFormatter(decimals = 0))
plt.legend()
plt.show()
코드는 크게 어려운 것이 없습니다. 처음 보는 형식 위주로 설명합니다.
xs = np.arange(-4, 4 + 1, 1)
premium = 1
기초자산의 가격 변동은 xs에 넣었습니다. np.arange()로 -4, -3, ..., 4까지 생성했습니다. 프리미엄은 1로 설정했습니다. 1은 수익 단위라고 보면 됩니다. 1달러나 100원으로 볼 수도 있습니다.
ys = [x + premium if x <= 0 else premium for x in xs]
커버드콜의 가격 변동은 ys에 있습니다. [A if cond else B for x in array] 형태입니다. 조건이 맞으면 A를 그렇지 않으면 B를 실행하되, array에 있는 값 하나하나에 대해 처리해서 결과를 배열로 만드는 코드입니다.
기초자산이 하락한 경우에는 프리미엄만큼 하락이 줄어드니 커버드콜의 수익은 x + premium이 되고, 그렇지 않은 경우에는 상승분을 모두 콜옵션 매수자에게 주어야 하니 미리 받아 둔 프리미엄만 남게 됩니다.
bs = xs - ys
앞의 수식에서 보았듯 커버드콜과 콜옵션 매수자의 수익의 합은 기초자산의 수익과 동일하기에 기초자산 수익에서 커버드콜 수익을 빼면 콜옵션 매수자의 수익이 나옵니다.
이후 과정은 y = 0와 x = 0인 수평선과 수직선을 긋고, 기초자산, 커버드콜, 콜옵션 매수자의 수익을 그래프로 그렸습니다.
아마 한 번 정도는 본 적이 있는 그래프일 것입니다. 왼쪽 그래프는 수익(또는 손실)을 나타내는 그래프입니다. 숫자는 그대로 달러나 원화로 보면 됩니다. 커버드콜을 설명하는 그래프를 자세히 보면 y축이 모두 수익으로 표시되어 있습니다. 수익률이 아닙니다.
하지만 왼쪽 그래프를 그려놓고 오른쪽처럼 수익률로 생각하는 경우가 많습니다. 오른쪽 그래프는 엄밀하게는 잘못 그린 것입니다. 콜옵션 매수자의 수익률을 생각해 보면 됩니다. 기초자산의 가격이 행사가 이하가 되면 프리미엄을 모두 날립니다. -100% 수익률입니다. 마찬가지로 기초자산이 200원 올랐고, 프리미엄으로 100원을 주었다면 수익률은 100%입니다. 그러니 다음과 같이 그래프를 그려야 합니다.
xs = np.arange(-4, 4 + 1, 1)
premium = 1
ys = [x + premium if x <= 0 else premium for x in xs]
bs = (xs - ys) * 100
plt.axhline(0, ls = '--', lw = 1, color = 'tab:gray')
plt.axvline(0, ls = '--', lw = 1, color = 'tab:gray')
plt.plot(xs, xs, label = 'Basic')
plt.plot(xs, ys, label = 'Covered call')
plt.plot(xs, bs, label = 'Buyer')
plt.gca().xaxis.set_major_formatter(PercentFormatter(decimals = 0))
plt.gca().yaxis.set_major_formatter(PercentFormatter(decimals = 0))
plt.legend()
plt.show()
콜옵션 매수자는 기초자산의 1%에 해당하는 프리미엄을 주고 콜옵션을 사갔기에 수익률을 100배로 높였습니다. 종횡비 설정 코드와 x축과 y축 범위를 지정하는 코드를 없앴습니다. 오른쪽과 같은 그래프가 나옵니다.
왼쪽 그래프와는 확연히 다릅니다. 콜옵션 매수자는 매우 높은 위험을 감수하고 고레버리지로 투자하는 투자자입니다. 그게 그거 아니냐고 반문할 수 있습니다. 아닙니다. 커버드콜에 대해 잘못 해설하는 분들 상당수는 커버드콜과 콜옵션 매수자의 수익 구조 그래프를 수익률 구조 그래프로 이해합니다.
왼쪽 그래프를 보여주면서 커버드콜의 수익은 하방은 열려있고, 상방은 막혀 있기에 기초자산보다 장기 수익률이 낮아진다는 해설을 한 번 정도 들어보았을 것입니다. 전형적으로 잘못된 설명입니다.
오른쪽 그림을 보면, 콜옵션 매수자가 높은 위험을 감수하는 것을 알 수 있습니다. 투자에서 위험 감수는 공짜가 아닙니다. 은행과 보험사는 예금자와 보험 가입자의 위험을 떠앉기에 수익을 낼 수 있는 것입니다.
앞서 수식에서 본 바와 같이 커버드콜과 콜옵션 매수자의 수익의 합은 기초자산의 수익과 동일합니다. 그러니 콜옵션 매수자는 기초자산의 위험을 일부 가져가는 대가로 커버드콜로부터 수익을 받아가는 것입니다. 이 때문에 커버드콜은 수익률과 변동성이 모두 기초자산보다 낮아지는 현상이 발생하는 것입니다.
투자 성과의 통계적 해석의 필요성 (갑돌이의 주사위 내기)
이러한 잘못된 해석의 근본적인 원인은 투자 성과는 통계적으로 분석해야 한다는 것을 알지 못하기 때문입니다. 그분들이 투자에 대해 모르는 것이 아닙니다. 통계적 분석 방법에 익숙하지 않은 것입니다.
갑돌이가 시장에 나왔습니다. 지난번에 동전 던지기 내기를 하고 있던 곳에서 이번에는 주사위 내기를 하고 있습니다. 참고: [자산 배분] S&P 500 지수 + KODEX 미국S&P500데일리커버드콜OTM 기초지수(OTM 1% 초단기 커버드콜 지수) + 환율 (평균-분산 그래프 분석 - 누가 골든벨을 울렸을까?)
가만히 지켜보니 규칙은 간단합니다. 먼저 100원을 겁니다. 6면 주사위를 던지기 전에 숫자 하나를 선택합니다. 주사위를 던져 선택한 숫자가 나오면 500원을 받습니다. 다른 숫자가 나오면 100원을 날립니다. 익히 알고 있는 카지노의 룰렛 게임입니다.
여러분이 갑돌이라면 이 게임에 참가할 의항이 생길까요? 참가하지 않는 게 이득이라는 것을 대개는 직관적으로 알 것입니다. 왜 알 수 있는 것일까요? 확률을 고려해서 통계적으로 분석하기 때문입니다.
1 / 6 확률로 500원 - 100원 = 400원을 벌고, 5 / 6 확률로 -100원 손실을 봅니다. 기대값은 1 / 6 × 400원 - 5 / 6 × 100원 ≒ -17원입니다. 한 판을 하면 평균 -17원 손해를 보는 내기입니다.
주사위 내기 주선자가 말합니다. "주사위 내기에 참여하세요. 맞추면 400원이나 벌고, 틀리면 100원만 날립니다. 수익은 상방으로 열려 있고, 손실은 하방으로 막혀있기에, 여러분에게 유리한 내기입니다". 커버드콜을 해설하는 상당수는 이러한 논리로 설명하고 있는 것입니다.
주사위 숫자를 두 개 선택할 수 있다면 어떻게 될까요? 기대값은 2 / 6 × 400원 - 4 / 6 × 100원 ≒ 66원으로 내기에 참여하는 사람이 유리해집니다. 동일하게 상방은 열려 있고 하방은 막혀있는데, 이번에는 이득이 생기는 내기로 바뀌는 것입니다.
커버드콜의 수익 구조로는 기초자산 대비 수익률이 장기적으로 낮아지는 현상을 이해할 수도 없고 설명할 수도 없는 것입니다. 수익률의 확률 분포에 따라 결과가 달라지기 때문입니다. 우연히 그래프로 한 설명과 실제 관찰 결과가 흡사해서 그럴듯하게 들리는 것입니다.
정리하며
제 책과 연재에서 계속해서 소개하고 있지만, 투자 성과 분석은 통계적으로 접근해야 합니다. 통계적 모델링이 어려운 경우 모델을 간략화하거나 단순 수치로 가정해서 해석할 수는 있지만, 투자 성과 분석은 근본적으로 통계적 해석이라는 점을 인지하고 있어야 합니다.
이를 충분히 이해하지 못하면 소위 전문가라는 분들이 해설하듯 기초자산과 커버드콜에 대해 잘못 이해할 수 있습니다. 그분들의 해설이 당장은 그럴듯하게 들릴 수는 있지만, 투자자는 이로 인해 비합리적인 투자 결정을 할 수 있기에 유의해야 합니다.
납득이 가지 않는다면, 그런 의견을 제시하는 분들에게 이 글을 보여주고 의견을 들어 보기 바랍니다. 저에게 질문할 필요가 없습니다. 저에게는 명확한 이야기이기 때문에 저는 이보다 더 쉽게 설명할 수 없습니다.
이어지는 글에서는 기초자산과 커버드콜의 위험을 비교해 봅니다.
참고: 연재와 관련한 질문은 댓글로 남겨주시기 바랍니다. 답변을 드리거나 이후 연재에서 다룰 수 있도록 노력하겠습니다.
참고 서적:
이어지는 글: [파이썬 분석 18] 기초자산과 커버드콜 - 투자 기간에 따른 위험의 변화를 살펴보자 (VaR, CVaR)
연재 목록: 자산 배분 분석 방법 책 소개, 연재글 및 사례 모음 [목록]
함께 읽으면 좋은 글 (최신 글)
- [파이썬 분석 16] 기초자산과 커버드콜 (기초자산 수익률에 따른 커버드콜 수익률 분포, +구글 드라이브 이용)
- [파이썬 분석 15] 기초자산과 커버드콜 (지수 개발사의 기초자산과 커버드콜 지수 + 외부 파일 읽기)
- [파이썬 분석 14] 기초자산과 커버드콜 - 두 자산의 성과를 비교해 보자 (TIGER 미국배당다우존스와 TIGER 미국배당다우존스타겟커버드콜2호)
- [파이썬 분석 13] 시간이 흐름에 따른 주가의 변화는 표현해 보자 (이동평균, 하위 순위 주가, +rolling())
- [파이썬 분석 12] 위험 척도를 하나 더 표현해 보자 (+컬러맵 사용)
함께 읽으면 좋은 글 (인기 글)
'주식투자' 카테고리의 다른 글
[파이썬 분석 21] 적립식 성과를 인플레이션을 고려해서 추정해 보자 (0) | 2025.04.24 |
---|---|
[파이썬 분석 20] 인플레이션을 고려해 보자 (한국은행 소비자물가지수 데이터 사용) (0) | 2025.04.24 |
[파이썬 분석 19] 관계의 안정성을 살펴보자 (상관 계수 변화를 통한 관찰) (0) | 2025.04.23 |
[파이썬 분석 18] 기초자산과 커버드콜 - 투자 기간에 따른 위험의 변화를 살펴보자 (VaR, CVaR) (0) | 2025.04.22 |
[파이썬 분석 16] 기초자산과 커버드콜 (기초자산 수익률에 따른 커버드콜 수익률 분포, +구글 드라이브 이용) (0) | 2025.04.20 |
[파이썬 분석 15] 기초자산과 커버드콜 (지수 개발사의 기초자산과 커버드콜 지수 + 외부 파일 읽기) (0) | 2025.04.20 |
[파이썬 분석 14] 기초자산과 커버드콜 - 두 자산의 성과를 비교해 보자 (TIGER 미국배당다우존스와 TIGER 미국배당다우존스타겟커버드콜2호) (0) | 2025.04.19 |
[파이썬 분석 13] 시간이 흐름에 따른 주가의 변화는 표현해 보자 (이동 평균, 하위 순위 주가, +rolling()) (0) | 2025.04.18 |