이번 글은
2022.09.01 - [금융공학] - 디지털 옵션 #4. 디지털 옵션 가격, FDM
디지털 옵션 #4. 디지털 옵션 가격, FDM
이번 글은 2022.09.01 - [금융공학] - 디지털 옵션 #3. 디지털 옵션 가격, MonteCarlo Simulation 디지털 옵션 #3. 디지털 옵션 가격, MonteCarlo Simulation 지난 글에서는 디지털 옵션의 가격을 Closed Form으로..
sine-qua-none.tistory.com
에서 이어집니다. 지금까지 디지털 옵션의 가격을 Closed Form, MonteCarlo Simulation, FDM으로 구해봤었습니다. 이번 글에서는 디지털 옵션의 가격을 Binomial Tree를 이용하여 구해보겠습니다.
Binomial Tree 복습
주식은 상승(상승률 uu), 하락(하락률 dd) 두 가지 상태이고, ud=1ud=1 을 만족하며 GBM의 기댓값과 분산을 만족하도록 상승확률 pp와 하락 확률 1−p1−p을 적용하여 다음의 이항 모델을 만듭니다.

이러한 이항 모델(binomial model)을 붙여 아래와 같이 이항트리를 만들었지요.

가로축은 시점 축, 세로축은 기초자산의 축입니다. 시점 nn에서 상승횟수가 ii인 주가의 값은
S0uidn−iS0uidn−i
입니다(S0S0는 현재주가)
파생상품의 가격은 다음과 같이 구합니다.
시점 step nn번째의 아래서부터 ii번째 노드는 기초자산의 가격이 S0uidn−iS0uidn−i 이고 이때의 파생상품의 가격을 f(n,i),0≤n≤N,0≤i≤Nf(n,i),0≤n≤N,0≤i≤N이라 쓰면
○ f(N,i)f(N,i) 는 만기 시점 페이오프(위 그림에서 가장 오른쪽 노드들)
○ f(n,i)=e−rΔt[pf(n+1,i+1)+(1−p)f(n+1,i)]f(n,i)=e−rΔt[pf(n+1,i+1)+(1−p)f(n+1,i)] 의 점화식을 만족
○ f(0,0)f(0,0) 이 바로 현재 시점, 현재 주가 에서의 파생상품의 가치
디지털 옵션의 가격 구하기
위의 그림에서 만기 TT, 행사가 KK이고 행사가 아래의 쿠폰이 c1c1, 위 쿠폰이 c2c2인 디지털옵션의 만기 페이오프는, 모든 i≤Ni≤N에 대해
f(N,i)={c1, S0uidN−i<Kc2, S0uidN−i≥K
디지털옵션의 python code
python code입니다.
2022.08.22 - [금융공학] - 옵션 #7. 옵션 프리미엄 구하기 실습: Binomial Tree에서 다루었던 코딩 내용 중 만기 페이오프만 바꾸면 해결될 것 같습니다.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import time
N = norm.cdf
def DigitalOption_ClosedForm(s0, strike, upCoupon, downCoupon, maturity, rfr, vol, div):
# 생략
def DigitalOption_BinomialTree(s0, strike, upCoupon, downCoupon, maturity, rfr, vol, div):
nNode = 1000
dt = maturity / nNode
u = np.exp(vol * np.sqrt(dt))
d = 1 / u
a = np.exp((rfr - div) * dt)
p = (a - d) / (u - d)
valueNode = np.zeros((nNode + 1, nNode + 1))
for n in reversed(range(nNode + 1)):
for i in range(n + 1):
spotS = s0 * u ** i * d ** (n - i)
if n == nNode:
valueNode[n, i] = upCoupon if spotS >= strike else downCoupon
else:
up_val = valueNode[n + 1, i + 1]
down_val = valueNode[n + 1, i]
df = np.exp(-rfr * dt)
valueNode[n, i] = (p * up_val + (1 - p) * down_val) * df
return valueNode[0, 0]
def Calculate_DigitalOption():
s0 = 100
strike = 100
upCoupon = 3
downCoupon = 1
maturity = 1
rfr = 0.02
vol = 0.2
div = 0.01
do_value_closedform = DigitalOption_ClosedForm(s0, strike, upCoupon, downCoupon, maturity, rfr, vol, div)
do_value_binomialtree = DigitalOption_BinomialTree(s0, strike, upCoupon, downCoupon, maturity, rfr, vol, div)
print('Digital Option Value by ClosedForm : {:.3f}'.format(do_value_closedform))
print('Digital Option Value by Bin.Tree : {:.3f}'.format(do_value_binomialtree))
if __name__ == '__main__':
Calculate_DigitalOption()
관심 있게 볼 부분은 만기페이오프 설정하는 부분인데요.
if n == nNode:
valueNode[n, i] = upCoupon if spotS >= strike else downCoupon
○ 이 부분이 만기페이오프 설정 부분입니다.
그럼 결과를 보도록 하겠습니다.
Digital Option Value by ClosedForm : 1.921
Digital Option Value by Bin.Tree : 1.897
상당히 유사하지만, MC나 FDM 방법론과 비교했을 때, 아무래도 좀 차이가 납니다. MC, FDM, Closed Form은 주가 모델을 GBM으로 간주하여 구하는 방법인 반면, Binomial Tree는 주가가 위 또는 아래로만 움직이는 이항 모델을 가정했기 때문에 근본적으로 차이가 나게 되는 것이죠.
그래도 이항 모형이 각광을 받는 이유는, 중간중간 각각의 Node에서 벌어지는 일을 신속하게 처리할 수 있다는 점입니다. UOC옵션을 보면, 배리어 이상으로 올라가는 경우에는 바로 Rebate로 가격을 바꿔버렸지요. 더욱더 활용가치가 높은 영역이 바로 American Style의 옵션 가격을 구할 때입니다. 일반적인 옵션이 만기 시점에'만' 주식을 사거나 팔 수 있는 권리를 행사할 수 있는 권리를 가진 반면, American option은 만기시점 전 아무 때나 그 권리를 행사할 수 있습니다.
기회가 될 때 한번 다뤄보도록 하겠습니다.
'금융공학' 카테고리의 다른 글
상관관계가 있는 두 자산이 움직이는 모습은? (0) | 2022.09.30 |
---|---|
상관관계를 보이는 두 자산의 움직임 모델 (0) | 2022.09.30 |
디지털 옵션 #4. 디지털 옵션 가격, FDM (0) | 2022.09.01 |
디지털 옵션 #3. 디지털 옵션 가격, MonteCarlo Simulation (0) | 2022.09.01 |
디지털 옵션 #2. 디지털 옵션 Closed form 및 그래프 (0) | 2022.08.31 |
댓글