파생상품&금융공학

옵션가격의 내재분포(Implied Distribution)

seungbeomdo 2023. 3. 2. 01:10

 

 

파생상품 이론 #11 변동성 곡면(Volatility Surface)

이 시리즈는 파생상품 이론 분야에서 가장 유명한 교재인 Hull(2021)의 "Options, Futures and Other Derivatives (11th)"을 요약한 것일 뿐이다. 아래는 책 구매 링크 Options, Futures, and Other Derivatives ISBN-13: 978013693

seungbeomdo.tistory.com

 

GitHub - SeungbeomDo/Financial_Engineering: Practical Codes related to Financial Engineering

Practical Codes related to Financial Engineering. Contribute to SeungbeomDo/Financial_Engineering development by creating an account on GitHub.

github.com


1. 옵션의 내재분포

  • 옵션의 내재분포(Implied Distribution)란, 옵션 가격으로부터 유도해낸 기초자산 가격의 확률분포를 뜻한다.

 

  • Breeden and Litzenberger(1978)가 제안한 내재분포의 추정방법은 다음과 같다. 우선, 행사가격이 K이고 만기가 T인 유로피안 콜옵션의 가격은 다음과 같이 정해진다. 행사가치의 위험중립 기대가격을 무위험이자율로 할인한 것으로, BSM 가정과는 무관하게 성립한다.

 

$$C = e^{-rT}\int_{S_{T}=K}^{\infty}(S_{T}-K)g(S_{T})dS_{T}$$

 

  • $g(S_{T})$는 만기 기초자산 가격의 위험중립적 확률밀도함수를 의미한다. 이 함수를 행사가격에 대하여 미분하면

 

$$\frac{\partial C}{\partial K} = -e^{-rT}\int_{S_{T}=K}^{\infty}g(S_{T})dS_{T}$$
 

  •  미분된 함수를 한번 더 행사가격에 대해서 미분하면

 

$$\frac{\partial^{2}C}{\partial K^{2}} = e^{-rT}g(K)$$

 

  • 따라서, 만기에 기초자산 가격이 행사가격과 같을 확률은

$$g(K) = e^{rT}\frac{\partial^{2}C}{\partial K^{2}}$$
 

  • 여기서 행사가격에 대한 콜옵션 가격의 2차 편미분계수를 추정해보자. 만기가 T로 동일하고, 행사가격이 $K-\delta, \,K, \, K+\delta$인 콜옵션 가격이 각각 $C_{1}, \, C_{2}, \, C_{3}$라고 하자. 충분히 작은 $\delta$에 대하여, 다음과 같은 근사식이 성립한다.

 

$$\frac{\partial^{2}C}{\partial K^{2}} \approx \frac{C_{1}+C_{3}-2C_{2}}{\delta^{2}}$$
 

  • 따라서, 만기에 기초자산 가격이 행사가격과 같을 확률을 시장에서 관찰된 변수들로 추정한다면 다음과 같다.

$$g(K) \approx e^{rT}\frac{C_{1}+C_{3}-2C_{2}}{\delta^{2}}$$

 

  • 복수의 행사가격 K들에 대해서 g(K)를 추정하고 이어붙이면 만기 주가의 내재분포 혹은 위험중립분포를 얻을 수 있다.

2. KOSPI200 옵션 코드 실습

 

  • KOSPI200 콜옵션으로부터 내재분포를 유도해보자. 2월 28일 거래된 3월 만기 콜옵션들 중 거래량이 충분히 존재했던 16개의 행사가격(305.0~342.5) 콜옵션들을 가져왔다.

 

  • 콜옵션이기 때문에 옵션 가격은 행사가격의 감소함수로 나타난다.

 

  • Breeden and Litzenberger(1978)의 방법을 그대로 따라가면 다음과 같은 내재분포를 얻을 수 있다. 무위험이자율은 3개월 CD금리, 잔존만기는 3월 둘째주까지 남은 기간인 6거래일이다.
delta = 2.5
r = 0.0341 / 252
T = 6

C1 = np.array(df['Close'][0:-2])
C2 = np.array(df['Close'][1:-1])
C3 = np.array(df['Close'][2:])

Partial = (C1 + C3 - 2*C2)/(delta**2)
Partial = np.clip(Partial, 0, 100)

RNP = np.exp(r*T)*Partial

 

  • 오른쪽으로 skew된 확률분포인 것 같기도 하고. 그런데 사실 모든 행사가격 옵션에 대해 충분한 유동성이 주어지지 않으므로 정확한 해석에는 무리가 있다.

 

  • 변동성 미소(Volatility Smile)도 함께 그려보자. BSM의 이론가와 가장 오차제곱이 작아지도록 하는 변동성을 주어진 행사가격에서의 변동성으로 사용하였다.

 

from scipy.stats import norm

def bs_call(s, r, t, sig, k):
  r = r
  sig = sig/np.sqrt(250)
  d1 = (np.log(s/k) + (r+(sig**2)/2)*t)/(sig*np.sqrt(t))
  d2 = (np.log(s/k) + (r-(sig**2)/2)*t)/(sig*np.sqrt(t))
  call = s*norm.cdf(d1) - k*np.exp(-r*t)*norm.cdf(d2)
  return call

r = 0.0341 / 252
T = 6
S = 314.80

temp = []
for i in range(len(df)):
  error = []
  for sig in np.linspace(0.01, 0.4, 100):
    error.append((bs_call(S, r, T, sig, df['Strike'][i]) - df['Close'][i])**2)
  vol = np.linspace(0.01, 0.4, 100)[np.argmin(error)]
  temp.append(vol)

 

  • 원점에 대해 볼록한 변동성 그래프를 얻을 수 있었다.