본문 바로가기
금융공학

파생상품의 가격 결정: binomial tree로 델타원상품 가격 구하기

by hustler78 2022. 8. 13.
728x90
반응형

 

 

이 글에서는

 

2022.08.12 - [금융공학] - 파생상품의 가격 결정: binomial tree를 이용해 봅시다.

 

파생상품의 가격 결정: binomial tree를 이용해 봅시다.

이 글에서는 2022.08.11 - [금융공학] - Binomial Tree #3 : 이항 모델 가지치기 Binomial Tree #3 : 이항모델 가지치기 이 글은 2022.08.09 - [금융공학] - Binomial Tree #2: CRR 모델이란? Binomial Tree #2: C..

sine-qua-none.tistory.com

에서 다룬 binomial tree를 가지고 파생상품의 가격 결정을 하는 방법을 예시를 통해 알아보겠습니다. 지겹지만 이항모델 복습을 다시 한번 해 봅시다.

 

 

이항 모델 복습

주식은 상승(상승률 $u$), 하락(하락률 $d$) 두 가지 상태이고, $ud=1$ 을 만족하며 GBM의 기댓값과 분산을 만족하도록 상승확률 $p$와 하락 확률 $1-p$를 설계하며 다음과 같았습니다.

 

너무 지겹게 등장해, 이제 외울떄도 될만한 그림

 

up &down 확률
$$ \begin{align} p &= \frac{e^{(r-q)\Delta t}-d}{u-d}\\ 1-p &= \frac{u-e^{(r-q)\Delta t}}{u-d} \\ \end{align} $$

$u, d$의 값
$$ u = e^{\sigma \sqrt{\Delta t}} ~, ~d= e^{-\sigma \sqrt{\Delta t}}$$

파생상품의 가격은 다음과 같이 구합니다.

시점 step $n$번째의 아래서부터 $i$번째 노드는 기초자산의 가격이
$$ S_0 u^{i}d^{n-i}$$ 이고 이때의 파생상품의 가격을 
$$ f(n,i), 0\leq n\leq N, 0\leq i\leq N$$
라 쓰면
$$ f(n,i) = e^{-r\Delta t} \left[ p f(n+1,i+1) + (1-p) f(n+1,i)\right]$$
이 된다. 
$$f(N,i)$$ 는 만기 때 페이오프임

 

Binomial Tree 세팅

Binomial tree로 파생상품의 가격을 결정하기 위해 다음의 세팅이 필요합니다.

 

1. 파생상품 만기 $T$까지의 기간 $[0,T]$를 $N$ 등분한다.

기간을 $N$등분하여 

$$ 0=t_0 < t_1 <\cdots < t_{N-1} <t_N =T$$

라 합시다. 그러면 time index는

$$ 0, 1, \cdots , N-1 ,N$$ 이 됩니다. 시간을 나타내는 변수는 $n$이라 씁니다.

 

 

2. 시점 간격 $\Delta t$를 구하여 확률 및 상승, 하락률을 산출

1번에서 $\Delta t = t_1 -t_0$ 로 시간 간격을 구하고, 이것을 이용해 $ u, d, p$ 를 산출합니다.

 

 

3. 각각의 time index $n$에 나타날 주가 배열을 만든다.

time index $n$에 나타나는 주가는 

$$ S_0 u^i d^{n-i}, 0\leq i \leq n$$

입니다.  이것을 다음과 같이 $n+1$ 사이즈의 배열로 만듭니다.

$S_0 u^n$
$S_0 u^{n-1} d^1 $
$\vdots$
$S_0 u^1 d^{n-1}$
$S_0 d^n$

 

이것을 종합하여 그림으로 나타내면 다음과 같습니다.

 

 

 

델타원 상품의 가격 구하기

 

델타원 상품은 지난 글들에서 가격을 계산해 보았던 상품입니다. 

 

1. exact formula : 2022.08.05 - [금융공학] - Black Scholes Equation의 풀이: 델타원 상품 참고

2. 시뮬레이션 : 2022.08.08 - [금융공학] - Black Scholes Equation의 풀이: 시뮬레이션 참고

 

위의 링크된 글들을 참고해 보시면 델타원의 상품이 어떻게 구해지는 볼 수 있습니다. 델타원 상품의 exact formula 가격은

$$ S_0 e^{-dT}$$

입니다 ($S_0$는 현재 기초자산의 가격, $d$는 연속 배당)

 

이것을 이번에는 binomial tree로 구해보겠습니다.

 

python code입니다.

 

import numpy as np
import matplotlib.pyplot as plt

def binomial_tree_pricing():
    s0 = 100
    r = 0.02
    q = 0.01
    sigma = 0.2
    maturity = 1
    nNode = 5
    dt = maturity / nNode

    u = np.exp(sigma * np.sqrt(dt))
    d = 1 / u
    a = np.exp((r - q) * dt)
    p = (a - d) / (u - d)

    def treeNode(n, i):
        if n == nNode:
            return s0 * u ** i * d ** (n - i)
        elif n < nNode:
            up_val = treeNode(n + 1, i + 1)
            down_val = treeNode(n + 1, i)
            df = np.exp(-r * dt)
            return (p * up_val + (1 - p) * down_val) * df

    res = treeNode(0, 0)
    print('Binomial Tree price : {:.3f}'.format(res))
    print('excat         price : {:.3f}'.format(s0 * np.exp(-q * maturity)))

if __name__ == '__main__':
    binomial_tree_pricing()

 

코드 분석을 해보겠습니다.

 

    s0 = 100	# 현재가
    r = 0.02	# 무위험 이자율
    q = 0.01	# 연속배당률
    sigma = 0.2	# 기초자산의 변동성
    maturity = 1	# 만기
    nNode = 5		# time step의 개수
    dt = maturity / nNode	#시점 사이의 간격

    u = np.exp(sigma * np.sqrt(dt))	# 기초자산의 상승률  u= e^{σ√(Δt)}
    d = 1 / u						# 기초자산의 하락률
    a = np.exp((r - q) * dt)	
    p = (a - d) / (u - d)			# 기초자산이 상승할 확률

 


    # binomial tree의 각 노드 값을 재귀적으로(recursively)구한다.
    def treeNode(n, i):
        if n == nNode:		# 만기일 때,
            return s0 * u ** i * d ** (n - i)	#payoff가 델타원이므로 기초자산 자기 자신
        elif n < nNode:		# 만기 시점 step 보다 전일 때,
            up_val = treeNode(n + 1, i + 1)	# 기초자산 상승시의 파생상품 가격
            down_val = treeNode(n + 1, i)	# 기초자산 하락시의 파생상품 가격
            df = np.exp(-r * dt)			# 단위시간간격 동안의 할인 팩터(discount factor)
            return (p * up_val + (1 - p) * down_val) * df	#점화식으로 구해지는 파생상품의 가격

    res = treeNode(0, 0)		#timestep 0일 때, 기초자산 배열의 0번째 가격이 바로 현재시점의 파생상품 가격

○ python으로 사용자 정의 함수를 만들 때 좋은 특징 중 하나가, 바로 위처럼 함수를 재귀적으로 사용할 수 있는 점입니다. 함수 treeNode 을 작성하는데, 내용에 다시 treeNode가 포함되어 있죠. 이렇게 재귀적으로 함수를 코딩하는 방법은

2022.06.12 - [수학의 재미/아름다운 이론] - 해를 향하여 #1 : Bisection Method

2022.06.12 - [수학의 재미/아름다운 이론] - 해를 향하여 #2: Newton-Raphson Method에서도 다룬 바 있으니 한번 참고해 보시기 바랍니다.

 

 

결과를 보겠습니다.

Binomial Tree price : 99.005
excat         price : 99.005

Process finished with exit code 0

수식으로 구한 exact formula와 가격이 똑같습니다.

이처럼 파생상품의 가격을 이산적으로 쪼개 binomial tree로 계산해도 똑같은 결과를 얻습니다.

 

하지만, tree가 어떻게 생성되는지 직접 보고 싶을 땐, python 코드보다는 Excel에서의 분석이 좋습니다. 셀 기반으로 visualizing 하기 편하거든요. 

다음 글에서는 엑셀 VBA를 사용하여 binomial tree를 구해보겠습니다.

 

 

728x90
반응형

댓글