파생상품&금융공학

파생상품 가치평가 방법론 #7 Monte Carlo Simulation (2) LSMC

seungbeomdo 2024. 2. 7. 23:24

 

LSMC가 처음 소개된 Longstaff & Schwartz (2001) 논문

LongstaffSchwartzAmericanOptionsLeastSquareMonteCarlo.pdf (ethz.ch)

 

이전 글: 몬테카를로 시뮬레이션 도입

 

 

파생상품 가치평가 방법론 #6 Monte Carlo Simulation (1) Path-dependent option의 가치평가

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

seungbeomdo.tistory.com


 

1. Least Squared Monte Carlo 방법 (LSMC)

 

몬테카를로 시뮬레이션 방법은 장점이 많다. 첫째로 분석가가 가정한 어떤 확률과정이든 그냥 시뮬레이션을 돌리기만 하면 되기 때문에, 편리하다. 둘째, 직관적이다. 시뮬레이션이기 때문이다. 셋째, 저번 글에서 다루었듯이 경로의존형 수익구조를 가진 파생상품들의 가치를 평가할 수 있다.  

 

그런데 한 가지 문제가 있다. 시뮬레이션 방법은 아메리칸 스타일의 옵션을 평가하기에 어려움이 있다. 아메리칸 스타일 옵션의 가격을 평가하려면, 주어진 시점에서 조기행사 가치와 보유 가치를 비교해야 한다. 그런데 주어진 시점에서, 기초자산의 가격 경로는 하나뿐이다. 이항 모형의 경우 주어진 노드에서 여러 갈래로 기초자산 가격 상태가 뻗어나가기 때문에, 다양한 가격 상태들을 고려하여 보유 가치를 평가할 수 있다. 하지만 시뮬레이션 방법은 각각 하나의 경로만을 생성하기 때문에 다양한 가격 상태를 고려하기 어렵다.

 

이 문제를 해결하기 위한 테크닉이 있는데, LSMC라고 불리는 방법이다. 주어진 시점에서 보유 가치를 회귀분석으로 추정한다. 통상 회귀식을 잡을 때 오차제곱을 최소화하는 접근을 쓰기 때문에 Least squared를 붙여서 LSMC라고 한다.

 

 

순서는 다음과 같다.

 

1) 먼저 시뮬레이션 가격 경로를 충분히 많이 생성한다. 

2) 각 경로에서 만기 시점 T에서의 가치를 구한다. 만기 시점의 가치는 자명하기 때문에 이미 주어진 값이다. 

3) T-1 시점에서 가치는 T-1 시점에서 조기행사 가치와, 보유 가치 중 더 큰 것이다. 조기행사 가치는 자명하다. 보유 가치는 다음과 같이 구한다.

 

(1) T-1 시점에서 기초자산 상태들을 X 변수로 둔다. 

(2) T 시점의 옵션 가치를 Y 변수로 둔다.

(3) X에 대하여 Y를 회귀해 추정식을 구한다. 원문인 Longstaff & Schwartz (2001)에서는 기초자산 가격과 옵션 가격 간의 비선형적 관계를 고려하여, 절편항을 포함한 이차식 회귀모형을 사용한다.

(4) 추정한 회귀식으로, 가격 상태에 대응하는 미래 옵션 가치를 추정한다. 

(5) 옵션 가치의 현재가치, 즉 보유 가치를 구하고 조기행사 가치와 비교한다.

(6) 조기행사 여부를 토대로 주어진 시점의 가치를 정한다.

(7) Backwardation하며 반복한다.

 

 

2. Code

 

초기 주가가 36, 행사가격 40, 무위험이자율 6%, 만기 1년, 변동성 20%일 때 아메리칸 풋옵션의 가치를 LSMC 방법으로 추정하였다. 시뮬레이션을 100번 생성했고,  1년의 기간을 50개의 스텝으로 분할한 결과, 그 값은 4.822가 나왔는데, 유로피안 옵션의 BSM 가격인 3.844보다 약간 높다. 

 

S0 = 36 #초기 주가
K = 40
r = 0.06 #무위험 이자율
T = 1 #만기 (연 기준)
dt = 1/50 #time step의 길이
mu = r #drift rate
s = 0.20 #volatility rate
J = 100 #시뮬레이션 path의 개수
I = int(T/dt) #각 시뮬레이션의 time step 개수

paths = np.zeros([I, J])
paths[0, :] = S0
for i in np.arange(I-1):
  dS = mu * paths[i, :] * dt + s * paths[i, :] * np.random.randn(J) * np.sqrt(dt)
  paths[i+1, :] = paths[i, :] + dS

payoff = paths.copy()
continuations = paths.copy()
strikes = paths.copy()
strikes = np.maximum(K - paths, 0)

price = paths[I-1,:]
payoff[I-1,:] = np.where(K - price > 0, K - price, 0)
for t in np.arange(1, I-1)[::-1]:

  Y = payoff[t+1,:]*np.exp(-r*dt) #t+1시점 가치
  price = paths[t,:] #t시점 기초자산 가격
  X = price #t시점 기초자산 가격
  X = np.column_stack((X, X**2)) 
  X = sm.add_constant(X)
  model = sm.OLS(Y, X).fit() #회귀식 추정
  continuation =  model.predict(X) #t+1시점 보유가치 추정
  continuations[t,:] = continuation
  strike = strikes[t,:]

  payoff[t,:] = np.where(strike > continuation, strike, continuation)

print('시뮬레이션 결과 : ', np.mean(payoff[1,:])*np.exp(-r*dt))

 

 

이항 모형의 결과와 비교해보면, 유사하다. 1000번의 시뮬레이션 path를 상정하여, 1000번 LSMC 방법으로 가치평가한 결과 평균은 4.827이었다. 같은 조건의 이항모형은 4.485가 나와서, 설득력 있는 결과임을 알 수 있다.