46
Excel VBA를 이용한 금융공학 - 식파생상품(선물옵션스왑)의 적용 - 금융공학팀 차장 홍창수 Oct. 2008

Excel_VBA

Embed Size (px)

Citation preview

Page 1: Excel_VBA

Excel VBA를 이용한 금융공학- 주식파생상품(선물•옵션•스왑)의 적용 -

금융공학팀 차장 홍창수

Oct. 2008

Page 2: Excel_VBA

목차목차(contents)(contents)

1. 금융공학 모델링의 기초 (1)

2. 금융공학 모델링의 기초 (2)

3. 엑셀 Macro작성 : (1) 매크로 기록기

4. 엑셀 Macro작성 : (2) VBA를 이용하는 방법

5. 주요 엑셀함수의 VBA적용

6. 엑셀 Sheet 디자인(Layout)

7. KOSPI200옵션 시세표

8. Exotic option delta surface

9. Black Scholes OPM

10. Option Greeks : Delta

11. 변동성 매매와 델타중립(delta neutral)

12. 델타중립 헤징(delta neutral hedging)

13. 델타중립 헤징(delta neutral hedging)

14. Option Greeks : Gamma

15. Gamma Trading Vs Vega Trading

16. Option Greeks : Vega

17. Option Greeks : Theta

18. Option Greeks : Rho

19. 수치해석의 필요성

20. 변동성의 이해 : 역사적 vs 내재변동성

21. 내재변동성 추정 : 이분법(Bisection Method)

23. 내재변동성 추정 : 뉴턴-랩슨(Newton-Rapson)

24. 내재변동성 추정 : 뉴턴-랩슨(Newton-Rapson)

25. Binomial Tree를 이용한 옵션가격계산

26. Binomial Tree : 1기간 모형

27. Binomial Tree : 1기간 모형

28. Binomial Tree : 1기간 모형

29. Binomial Tree : 다기간 모형

22. 내재변동성 추정 : 이분법(Bisection Method)

30. Binomial Tree Code

31. MC Simulation을 이용한 옵션가격계산

32. MC Simulation을 이용한 옵션가격계산

33. 복수의 기초자산을 이용

34. Cholesky Factorization 걔산 사례

35. Cholesky Factorization Code

36. Performance 향상 방안

37. Antithetic Variables

38. Control Variate Method

Page 3: Excel_VBA

1. 1. 금융공학금융공학 모델링의모델링의 기초기초(1)(1)

고급 응용

프로그램

VBA

프로그래밍

EXCEL

지식

• 스프레드쉬트 모델링(Spreadsheet Modeling)

–Use only simple arithmetic

–Organize spreadsheet for better presentation

• 엑셀과 내장함수(built-in fuctions) 이용

–Make excel work more efficient

–Powerful excel built-in functions

• VBA I: 사용자 정의 함수

– writing the Black-Scholes function

– pros and cons of different implementation

• VBA II:

–Make excel work hard, and fancy users input

–be a better programmer

• 스프레드쉬트 모델링(Spreadsheet Modeling)

–Use only simple arithmetic

–Organize spreadsheet for better presentation

• 엑셀과 내장함수(built-in fuctions) 이용

–Make excel work more efficient

–Powerful excel built-in functions

• VBA I: 사용자 정의 함수

– writing the Black-Scholes function

– pros and cons of different implementation

• VBA II:

–Make excel work hard, and fancy users input

–be a better programmer

Page 4: Excel_VBA

2. 2. 금융공학금융공학 모델링의모델링의 기초기초(2)(2)

• 행렬과 해찾기(Solver) 기능–포트폴리오 수익률과 분산

–포트폴리오 최적화(Portfolio optimization)

• 수치해석의 분야- 보간법(Interpolation), 최적화, 수치적분

- 수치미분(Tree, FDM), 시뮬레이션

• 난수(Randon Variables) 생성의 적용

–몬테카를로 시뮬레이션(Monte Carlo Simulation)

– Pricing multiple stock options

• 위험관리 분야(Risk Management)–Garch Volatility Modeling

–Value at Risk

• 금리파생상품(Interest Rate Derivatives)– Modeling interest rate derivatives in Excel

• C프로그래밍으로 엑셀함수기능 확장– Why need C?

– Excel and C

• 행렬과 해찾기(Solver) 기능–포트폴리오 수익률과 분산

–포트폴리오 최적화(Portfolio optimization)

• 수치해석의 분야- 보간법(Interpolation), 최적화, 수치적분

- 수치미분(Tree, FDM), 시뮬레이션

• 난수(Randon Variables) 생성의 적용

–몬테카를로 시뮬레이션(Monte Carlo Simulation)

– Pricing multiple stock options

• 위험관리 분야(Risk Management)–Garch Volatility Modeling

–Value at Risk

• 금리파생상품(Interest Rate Derivatives)– Modeling interest rate derivatives in Excel

• C프로그래밍으로 엑셀함수기능 확장– Why need C?

– Excel and C

Page 5: Excel_VBA

3. 3. 엑셀엑셀 Macro Macro 작성작성 : (1) : (1) 매크로매크로 기록기기록기 이용이용

• 매크로? 엑셀에서 반복 사용하는 일련의 작업들을 다른곳에 기록시켜서 필요할때

불러서 사용하루 수 있도록 한 것

• VBA ? Visual Basic for Application의 약자로, vb를 엑셀에서 사용하기 쉽게

만든 프로그래밍 언어

• 매크로? 엑셀에서 반복 사용하는 일련의 작업들을 다른곳에 기록시켜서 필요할때

불러서 사용하루 수 있도록 한 것

• VBA ? Visual Basic for Application의 약자로, vb를 엑셀에서 사용하기 쉽게

만든 프로그래밍 언어

Page 6: Excel_VBA

4. 4. 엑셀엑셀 Macro Macro 작성작성 : (2) VBA: (2) VBA를를 이용하는이용하는 방법방법

■ 프로젝트 탐색기 : 프로젝트를 관리하고 선택하는 기능. 프로젝트 탐색기는 현재

엑셀에서 열려있는 전체 워크북들로 구성된 도표를 보여준다.

■ 속성창 : 프로젝트 탐색기창에서 선택한 파일이나 시트등의 이름의 속성을

변경할 수 있음

■ 모듈창 : 코드창이라 부르기도 하고, 프로그램을 직접 코딩하는 곳으로 프로그램

을 생성한다. 개체에 대한 코드창을 보기 위해서는 프로젝트 탐색기에서 개체를

더블 클릭

■ 프로젝트 탐색기 : 프로젝트를 관리하고 선택하는 기능. 프로젝트 탐색기는 현재

엑셀에서 열려있는 전체 워크북들로 구성된 도표를 보여준다.

■ 속성창 : 프로젝트 탐색기창에서 선택한 파일이나 시트등의 이름의 속성을

변경할 수 있음

■ 모듈창 : 코드창이라 부르기도 하고, 프로그램을 직접 코딩하는 곳으로 프로그램

을 생성한다. 개체에 대한 코드창을 보기 위해서는 프로젝트 탐색기에서 개체를

더블 클릭

Page 7: Excel_VBA

5. 5. 주요엑셀함수의주요엑셀함수의 VBAVBA적용적용

엑셀(Excel) VBA

곱셈 xy x*y x*y

자승 2x x^2 x^2

로그 xelog LN(x) Log(x)

지수 exp(x) EXP(x) Exp(x)

제곱근 x SQRT(x) Sqr(x)

팩토리얼 3! FACT(3) Application.Fact(3)

누적정규분포 NORMSDIST(x) Application.NormSDist(x)

난수발생 RAND() Rnd

• EXP(x)는 지수함수 값, exp(x)를 계산한다.

• LN(x)는 x의 자연로그 값을 계산한다.

• SQRT(x)는 x값의 제곱근을 계산해준다.

• FACT(numbers)는 1*2*3*…*numbers의 값을 의미하는 팩토리얼값 계산

• NORMDIST는 일반 정규분포의 이론적 확률값을 계산한다.

• EXP(x)는 지수함수 값, exp(x)를 계산한다.

• LN(x)는 x의 자연로그 값을 계산한다.

• SQRT(x)는 x값의 제곱근을 계산해준다.

• FACT(numbers)는 1*2*3*…*numbers의 값을 의미하는 팩토리얼값 계산

• NORMDIST는 일반 정규분포의 이론적 확률값을 계산한다.

Page 8: Excel_VBA

6. EXCEL Sheet 6. EXCEL Sheet 디자인디자인(layout) : (layout) : 입력데이터입력데이터, , 계산계산, , 출력출력 자료자료

• 사용자 입력변수 : 사용자가 입력할 부분은 눈에 뛰는 색상으로 한 영역 배치

• 관리 요약정보 : 요약정보를 잘 작성해놓으면 이후에 보기 편함

• 계산과정 영역 : 수식의 구성은 간단하게 작성, 복잡한 모델은 유지보수에 어려움

• 출력영역(해답) : 결과값을 한 영역으로 배치

• 그래픽 배열 영역 : 계산된 내용을 비주얼하게 볼 수 있도록 배치

• 사용자 입력변수 : 사용자가 입력할 부분은 눈에 뛰는 색상으로 한 영역 배치

• 관리 요약정보 : 요약정보를 잘 작성해놓으면 이후에 보기 편함

• 계산과정 영역 : 수식의 구성은 간단하게 작성, 복잡한 모델은 유지보수에 어려움

• 출력영역(해답) : 결과값을 한 영역으로 배치

• 그래픽 배열 영역 : 계산된 내용을 비주얼하게 볼 수 있도록 배치

Page 9: Excel_VBA

[[실습실습1]1] 지수선물지수선물 VBA VBA 계산계산

TqreSF )(

00

−=

‘//VBA Code, 선물 가격결정공식

Public Function Futures (S As Double, Tau As Double, R As Double, Q As Double)

‘지수는 배당이 지급되는 자산으로 간주

‘S= 현재 지수의 가격(KOSPI200 지수)

‘Tau = 잔존만기(연율)

Futures = S * Exp((R-Q) * Tau )

End Function

지수선물의 이론가격을 계산하는 간단한 예제

(S : 기초자산 가격, r : 무위험이자율, q : 배당수익률, T: 잔존만기)

Page 10: Excel_VBA

7. KOSPI2007. KOSPI200옵션옵션 시세표시세표

• 옵션 만기일의 옵션시세표. 외가격(OTM)옵션의 프리미엄은 거의 0에 근접,

내가격(ITM)의 프리미엄은 거의 확정, 등가격(ATM중심)의 매매만 성립

• 옵션 만기일의 옵션시세표. 외가격(OTM)옵션의 프리미엄은 거의 0에 근접,

내가격(ITM)의 프리미엄은 거의 확정, 등가격(ATM중심)의 매매만 성립

Page 11: Excel_VBA

[[실습실습2] 2] BlackBlack--ScholesScholes Call option function(Surface)Call option function(Surface)

50 60 70 80 90 100 110 120 130 140 150

00.10.20.30.40.50.60.70.80.9

1 0

10

20

30

40

50

60

ST-t

Black-Scholes call option function

Page 12: Excel_VBA

8. Exotic option Delta Surface8. Exotic option Delta Surface

83.19

86.15

89.12

92.08

95.04

98.00

100.96

103.92

106.88

109.84

112.80

115.76

118.72180

151

123

94

65

37

8

-3.5000

-3.0000

-2.5000

-2.0000

-1.5000

-1.0000

-0.5000

0.0000

0.5000

1.0000

델타

잔존만기

1095

990

885

780

675

570

465

360

255

150

45

62 68 76 84 92 100 108

-1

0

1

2

3

4

5

6

7

8

9

10

델타

잔존만기

자산가격

� 상품설계시 Rebate가 클수록, Short Delta를 줄여줌

→ Risk를 감소시켜줌, Participation Rate와 Rebate는 상호 보완적인 관계

� 만기 직전 Barrier 근처 Delta, Gamma, Vega의 급격한 변화 Risk발생

� Barrier Option에 영향을 주는 요소 → Interest Rate, Repo, Dividend,

Local Volatility, Volatility of Volatility, Jump

Barrier OptionsBarrier Options

Autocall StructureAutocall Structure

� 조기상환형 ELS(6 Chance), Dynamic option Replication

(Delta 위주의 Greek, 복제)

� 해당종목의 주가 하락시 델타만큼 해당주식을 매입(Buy Low, Sell High)

� 만기 근접과 지수하락시 델타 증가, 조기상환 비교시점 ATM 감마 최대

�Coupon이 더 커지기 때문에 만기 근접 할수록 Gamma Risk 증대

Page 13: Excel_VBA

[[실습실습3] Black3] Black ScholesScholes OPM OPM

)()( 2

)(

1 dNXedSNc tTr −−−=

)()( 12

)( dSNdNXep tTr −−−= −−만기시 주가의 현재가치 만기시 행사가격의 현재가치

Page 14: Excel_VBA

9. Black9. Black ScholesScholes OPMOPM

‘//VBA Code, 블랙-숄즈(1973) 공식Public Function BlackSholes(CallPutFlag As String, S As Double, X As Double,

r As Double, T As Double, v As Double) As Double

Dim d1 As Double, d2 As Double

d1 = (Log(S/X)+(r+v^2/2)*T)/(v*Sqr(T))

d2=d1-v*Sqr(T)

If CallPutFlag = “c” Then

BlackSholes = S*Application.NormSDist(d1)-X*Exp(-r*T)*Application.NormSDist(d2)

ElseIf CallPutFlag = “p” Then

BlackSholes = X*Exp(-r*T)*Application.NormSDist(-d2)-S*Application.NormSDist(-d1)

End If

End Function

‘//VBA Code, 블랙-숄즈(1973) 공식Public Function BlackSholes(CallPutFlag As String, S As Double, X As Double,

r As Double, T As Double, v As Double) As Double

Dim d1 As Double, d2 As Double

d1 = (Log(S/X)+(r+v^2/2)*T)/(v*Sqr(T))

d2=d1-v*Sqr(T)

If CallPutFlag = “c” Then

BlackSholes = S*Application.NormSDist(d1)-X*Exp(-r*T)*Application.NormSDist(d2)

ElseIf CallPutFlag = “p” Then

BlackSholes = X*Exp(-r*T)*Application.NormSDist(-d2)-S*Application.NormSDist(-d1)

End If

End Function

VBA CODE에 대한 간단한 설명

1. 매크로 이름지정 (임의지정 BlackSholes)

2. 함수 BlackSholes 생성 작업 : String, Double등의 변수 선언

3. Dim 명령문을 활용하여 d1과 d2와 같은 중간단계 계산실행

4. 조건문 If를 사용한 구문 구성 : If-Then-ElsIf 구문

5. 프로시져 종료(End Function)

VBA CODE에 대한 간단한 설명

1. 매크로 이름지정 (임의지정 BlackSholes)

2. 함수 BlackSholes 생성 작업 : String, Double등의 변수 선언

3. Dim 명령문을 활용하여 d1과 d2와 같은 중간단계 계산실행

4. 조건문 If를 사용한 구문 구성 : If-Then-ElsIf 구문

5. 프로시져 종료(End Function)

Page 15: Excel_VBA

10. Option Greeks : Delta10. Option Greeks : Delta

)( 1dNS

C=

∂=∆ 옵션이 내가격이 될 가능성(확률)

0)( 1

)( >=∂

∂=∆ − dNeS

ccall Trb

0]1)([ 1

)( <−=∂

∂=∆ − dNeS

pput Trb

옵션가치변화/기초자산 가치의변화

‘//VBA Code, 델타(Delta) : 블랙숄즈(유럽형옵션)

Public Function Delta(CallPutFlag As String, S As Double, X As Double, T As Double, _r As

Double, v As Double) As Double

Dim d1 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

If CallPutFlag = "c" Then

Delta = Exp((-r) * T) * Application.NormSDist(d1)

ElseIf CallPutFlag = "p" Then

Delta = Exp((-r) * T) * (Application.NormSDist(d1) - 1)

End If

End Function

‘//VBA Code, 델타(Delta) : 블랙숄즈(유럽형옵션)

Public Function Delta(CallPutFlag As String, S As Double, X As Double, T As Double, _r As

Double, v As Double) As Double

Dim d1 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

If CallPutFlag = "c" Then

Delta = Exp((-r) * T) * Application.NormSDist(d1)

ElseIf CallPutFlag = "p" Then

Delta = Exp((-r) * T) * (Application.NormSDist(d1) - 1)

End If

End Function

Page 16: Excel_VBA

11. 11. 변동성변동성 매매와매매와 델타중립델타중립(Delta Neutral Trading)(Delta Neutral Trading)

변동성 매매와 델타 중립(Delta Neutral Trading)

델타란 기초자산에 대한 옵션의 가격변화를 나타낸다. 기초자산 움직임에 대해 옵션이 얼마만큼변화하는가를 뜻한다. 즉, 방향성 위험(Directional risk)에 대한 지표가 델타가 된다. 방향성 위험을 갖고있는 포지션 델타를 0으로 맞춰 트레이딩하는 것을 변동성 매매라 하며, 이는 지수가 상승하거나 하락하는방향성에 의해 손익이 발생하는것과는 무관한 포지션이 되는 동시에 시간가치 효과(theta)와내재변동성(vega)감소에 의해 수익이 발생되는 포지션을 의미한다.실무적으로 가장 대표적인 예,스트랭글매도(short strangle) : 수익원천(time decay+ implied volatility)

변동성 매매를 하는 이유: 다음과 같이 변동성 매매의 매력적인 이유를 요약할수 있음- 변동성은 불확실성이 증가할 때 확대되는 경향이 있음- 변동성의 평균회귀(mean reverting) 특성을 매매에 응용할 수 있음-자산가격이 하락하는 경우 변동성이 증대되거나 유지되는 경향이 있음

변동성 매매의 유형:- 투기적 거래: 여러 자산시장(지수, 통화옵션등)에서의 변동성 수준에 따른 투기적 매매- 실현변동성과 내재변동성 수준의 차이에 대한 스프레드 거래-변동성 노출에 대한 헤지거래 : 헤지펀드 및 위험을 전가할 목적의 거래자

실무상 델타 헤지 트레이딩이 위험한 이유:

델타 헤징은 완만한 지수움직임을 가정하며, 연속적인 헤징, 거래비용이 없다는 가정, 미래변동성을 안다고가정한다. 실제시장에서는 아래와 같이 블랙숄즈 가정과는 다른 현상이 발생하며, 이러한 불완전성으로인해 이론적인 수익보다 더 큰 손실이 발생하기도 한다.- 자산가격의 점프(jump) - 거래비용 발생(transaction cost)- 확률변동성(stochastic volatility) : 헤지비율을 결정하는 미래실현변동성을 모름- 실제로 연속적인 헤지를 할수 없음 : 이산적인 헤지(discrete hedging)

Page 17: Excel_VBA

12. 12. 델타델타 중립중립 헤징헤징 (Delta Neutral Hedging)(Delta Neutral Hedging)

옵션의 헤징 전략( 이론적 방법)

옵션의 헤징 전략( 실무적 방법)

Delta Hedging of Large Portfolio

• Delta of Option = Delta of Hedge Portfolio

• Gamma of Option = Gamma of Hedge Portfolio

• Theta of Option = Theta of Hedge Portfolio

• Rho of Option = Rho of Hedge Portfolio

• Vega of Option = Vega of Hedge Portfolio

• Delta of Option = Delta of Hedge Portfolio

• Gamma of Option = Gamma of Hedge Portfolio

• Theta of Option = Theta of Hedge Portfolio

• Rho of Option = Rho of Hedge Portfolio

• Vega of Option = Vega of Hedge Portfolio

• Delta of Option = Delta of Hedge Portfolio (주식 또는 선물 이용)

c.f : 장내 옵션 이용가능

• Delta of Option = Delta of Hedge Portfolio (주식 또는 선물 이용)

c.f : 장내 옵션 이용가능

• Delta of Large Portfolio = Delta of Hedge Portfolio

• Gamma of Large Portfolio ≈ 0

• Vega of Large Portfolio ≈ 0

• Delta of Large Portfolio = Delta of Hedge Portfolio

• Gamma of Large Portfolio ≈ 0

• Vega of Large Portfolio ≈ 0

Page 18: Excel_VBA

13. 13. 델타델타 중립중립 헤징헤징 (Delta Neutral Hedging)(Delta Neutral Hedging)

Option

price

A

B

Slope = ∆

Stock price

•Black-Scholes 의 결과에 대한 리뷰

• 만일 Black-Scholes 방정식을 유도할 때와 동일한 조건으로 포트폴리오의

조정이 가능하다면 (옵션 판매가 – 옵션 이론가)의 수익을 확보할 수 있음!

• B-S 모형에서 사용한 포트폴리오: 옵션 1단위 + ∆주식

•Delta: (옵션의가격변화)/(주식의가격변화)

•Black-Scholes 의 결과에 대한 리뷰

• 만일 Black-Scholes 방정식을 유도할 때와 동일한 조건으로 포트폴리오의

조정이 가능하다면 (옵션 판매가 – 옵션 이론가)의 수익을 확보할 수 있음!

• B-S 모형에서 사용한 포트폴리오: 옵션 1단위 + ∆주식

•Delta: (옵션의가격변화)/(주식의가격변화)

Page 19: Excel_VBA

14. Option Greeks : Gamma14. Option Greeks : Gamma

‘//VBA Code, 감마(Gamma) : 블랙숄즈(유럽형옵션)

Public Function Gamma(S As Double, X As Double, T As Double, r As Double, v As Double) As Double

Dim d1 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

Gamma = Exp((-r) * T) * ND(d1) / (S * v * Sqr(T))

End Function

‘//VBA Code, 감마(Gamma) : 블랙숄즈(유럽형옵션)

Public Function Gamma(S As Double, X As Double, T As Double, r As Double, v As Double) As Double

Dim d1 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

Gamma = Exp((-r) * T) * ND(d1) / (S * v * Sqr(T))

End Function

0)1( )(

2

2

2

2

, >=∂

∂=

∂=Γ

TS

edn

S

p

S

c Trb

putcallσ

델타변화 / 기초자산 가치의 변화 델타는 속도, 감마는 가속도의 개념

Page 20: Excel_VBA

15. Gamma Trading15. Gamma Trading vsvs Vega TradingVega Trading

감마 트레이딩 VS 베가 트레이딩 (gamma vs vega trading)

감마는 옵션의 실현변동성(realized volatility)을 의미. 감마 매도(short gamma)는 내재변동성이 미래변동성 예측치에 비해 높게 형성되어 고평가된 경우, 옵션 매도포지션을 취하는 것이 유리한 것을뜻하며, 이와 반대일 경우 감마 매수를 하게 된다. 아울러, 옵션의 만기가 많이 남아 있는 상황에서는감마요인보다는 베가 요인이 더 큰 영향을 미치게되며, 만기일에 근접할수록 베가요인보다 감마의영향력이 증대하여 감마리스크의 위험관리가 중요하게 된다.

감마 매수(long gamma) : 미래 변동성예측치 > 현재 내재변동성 (IV 저평가)감마 매도(short gamma): 미래 변동성예측치 < 현재 내재변동성 (IV 고평가)

한편, 베가는 옵션의 내재변동성(implied volatility)을 나타내며, 내재변동성이 크다는 것은 지수의움직임이 크다는 것으로 옵션가격 전체 상승이나 하락이 급격히 이루어지는 것을 뜻한다.

베가 매수(long vega) : 내재변동성의 추세 상승 예상 (IV 방향성 예측)베가 매도(short vega): 내재변동성의 추세 하락 예상 (IV 방향성 예측)

정리하면, 감마 트레이더와 베가 트레이더가 관심을 가지고 보는 사항이 다르다는 것을 알수 있다. 즉, 감마 트레이더는 기초자산의 가격 움직임에 더 관심을 두고 거래하는 매매자를 뜻하며, 베가트레이더는 내재변동성의 방향에 관점을 두는 거래자를 뜻함.

Page 21: Excel_VBA

16. Option Greeks : Vega16. Option Greeks : Vega

0)1()(

. >=∂

∂=

∂= − TdnSe

pcVega Trb

putcallσσ

‘//VBA Code, 베가(Vega) : 블랙숄즈(유럽형옵션)

Public Function Vega(S As Double, X As Double, T As Double, r As Double, v As Double) As Double

Dim d1 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

Vega = S * Exp((-r) * T) * ND(d1) * Sqr(T)

End Function

‘//VBA Code, 베가(Vega) : 블랙숄즈(유럽형옵션)

Public Function Vega(S As Double, X As Double, T As Double, r As Double, v As Double) As Double

Dim d1 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

Vega = S * Exp((-r) * T) * ND(d1) * Sqr(T)

End Function

옵션가치의 변화 / 변동성의 변화

Page 22: Excel_VBA

17. Option Greeks : Theta17. Option Greeks : Theta

0)()()(2

)1(21

)()(

≤≥−−−−=∂

∂−=Θ −−

dNrXedNSerbT

dnSe

T

c rTTrbTrb

call

σ

0)()()(2

)1(21

)()(

≤≥−+−−+−=∂

∂−=Θ −−

dNrXedNSerbT

dnSe

T

p rTTrbTrb

put

σ

‘//VBA Code, 베가(Vega) : 블랙숄즈(유럽형옵션)

Public Function Theta(CallPutFlag As String, S As Double, X As Double, T As Double,

r As Double, v As Double) As Double

Dim d1 As Double, d2 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

d2 = d1 - v * Sqr(T)

If CallPutFlag = "c" Then

Theta = -S * Exp((-r) * T) * Application.NormSDist(d1) * v / (2 * Sqr(T)) - (-r) * S * Exp((-r) * T)

* Application.NormSDist(d1)

- r * X * Exp(-r * T) * Application.NormSDist(d2)

ElseIf CallPutFlag = "p" Then

Theta = -S * Exp((-r) * T) * Application.NormSDist(d1) * v / (2 * Sqr(T)) + (-r) * S * Exp((-r) * T)

* Application.NormSDist(-d1)

+ r * X * Exp(-r * T) * Application.NormSDist(-d2)

End If

End Function

‘//VBA Code, 베가(Vega) : 블랙숄즈(유럽형옵션)

Public Function Theta(CallPutFlag As String, S As Double, X As Double, T As Double,

r As Double, v As Double) As Double

Dim d1 As Double, d2 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

d2 = d1 - v * Sqr(T)

If CallPutFlag = "c" Then

Theta = -S * Exp((-r) * T) * Application.NormSDist(d1) * v / (2 * Sqr(T)) - (-r) * S * Exp((-r) * T)

* Application.NormSDist(d1)

- r * X * Exp(-r * T) * Application.NormSDist(d2)

ElseIf CallPutFlag = "p" Then

Theta = -S * Exp((-r) * T) * Application.NormSDist(d1) * v / (2 * Sqr(T)) + (-r) * S * Exp((-r) * T)

* Application.NormSDist(-d1)

+ r * X * Exp(-r * T) * Application.NormSDist(-d2)

End If

End Function

Page 23: Excel_VBA

18. Option Greeks :18. Option Greeks : RhoRho

‘//VBA Code, 로(Rho) : 블랙숄즈(유럽형옵션)

Public Function Rho(CallPutFlag As String, S As Double, X As Double, T As Double, r As

Double, v As Double) As Double

Dim d1 As Double, d2 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

d2 = d1 - v * Sqr(T)

If CallPutFlag = "c" Then

Rho = X * T * Exp(-r * T) * Application.NormSDist(d2)

ElseIf CallPutFlag = "p" Then

Rho = -X * T * Exp(-r * T) * Application.NormSDist(-d2)

End If

End Function

‘//VBA Code, 로(Rho) : 블랙숄즈(유럽형옵션)

Public Function Rho(CallPutFlag As String, S As Double, X As Double, T As Double, r As

Double, v As Double) As Double

Dim d1 As Double, d2 As Double

d1 = (Log(S / X) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))

d2 = d1 - v * Sqr(T)

If CallPutFlag = "c" Then

Rho = X * T * Exp(-r * T) * Application.NormSDist(d2)

ElseIf CallPutFlag = "p" Then

Rho = -X * T * Exp(-r * T) * Application.NormSDist(-d2)

End If

End Function

Page 24: Excel_VBA

[[실습실습4]4] 매매시스템매매시스템 화면화면 만들기만들기

자신 만의 아이디어를 이용하여 매매시스템 화면을 만들어 보세요.

Check 사항 내용

옵션계산에 필요한 요소는? 현재일, 만기일, 선물가격, kospi200,콜/풋,행사가격, 이자율, 배당

포지션 계산에 필요한 요소는? 옵션수량, 옵션 매수/도, 델타, 감마,쎄타,베가,

선물수량, 선물매수/도

손익계산에 필요한 요소는? 옵션가격, 선물가격, 현재가, 평균가 등

행사가격이 몇 개나 필요한가? 10개정도 적당

자신만이 원하는 요소가 있는가? 수수료, 프리미엄 합, 적당한 현물가격계산식 등

Cell과 외부 Data의 연결되는 Cell작성 로이터, 마켓포인트, Check등과 연계?

통제가 쉬운 Worksheet이 되려면? 자동입력 셀과 수동입력 셀의 조화 등

복잡한 Worksheet이 되지 않게 하려면? 간단한 설계에 중점, 수식의 고급화 등

Page 25: Excel_VBA

19. 19. 수치해석수치해석(Numerical Method)(Numerical Method)의의 필요성필요성

블랙숄즈 모형은 폐쇄형 해(closed form solution)라는 이점상 단순하고, 다루기 쉽다는 이유때문에

시장참가자들이 널리 사용 그러나, 미국형 옵션에는 사용할 수 없고, 유럽형 콜 옵션과 풋 옵션에만

적용이 가능. 만일, 사용자가 더 세밀하게 가격 계산을 원한다면 수치해석 기법이 적용되어야 한다.

예를들어, 조기행사기회를 가지는 미국형옵션과 다른 옵션 미국형 옵션의 가치를 결정하기 위해서는

이항모형 (Binomial ) 혹은 삼항모형 (Trinomial Tree), 유한차분법 (FDM)과 같은 수치해석기법 필요.

블랙숄즈 모형은 폐쇄형 해(closed form solution)라는 이점상 단순하고, 다루기 쉽다는 이유때문에

시장참가자들이 널리 사용 그러나, 미국형 옵션에는 사용할 수 없고, 유럽형 콜 옵션과 풋 옵션에만

적용이 가능. 만일, 사용자가 더 세밀하게 가격 계산을 원한다면 수치해석 기법이 적용되어야 한다.

예를들어, 조기행사기회를 가지는 미국형옵션과 다른 옵션 미국형 옵션의 가치를 결정하기 위해서는

이항모형 (Binomial ) 혹은 삼항모형 (Trinomial Tree), 유한차분법 (FDM)과 같은 수치해석기법 필요.

트리(Tree)방법

옵션가치평가

분석적방법

유한차분법

(FDM)

몬테카를로

시뮬레이션

Page 26: Excel_VBA

20. 20. 변동성의변동성의 이해이해 : : 역사적역사적 변동성변동성 vs vs 내재변동성내재변동성

옵션 가격의 결정변수 중 대부분의 변수는 관측 가능하지만 변동성만은 관측할 수가 없다. 따라서 변동

성을 어떻게 결정할 것인가가 옵션 결정모형에서 중요한 이슈가 되는데 가장 보편적으로 사용되는것이

과거의 데이터로 부터 추정해 내는 방법이다. 이렇게 구해진 변동성을 역사적 변동성이라 한다.

옵션 가격의 결정변수 중 대부분의 변수는 관측 가능하지만 변동성만은 관측할 수가 없다. 따라서 변동

성을 어떻게 결정할 것인가가 옵션 결정모형에서 중요한 이슈가 되는데 가장 보편적으로 사용되는것이

과거의 데이터로 부터 추정해 내는 방법이다. 이렇게 구해진 변동성을 역사적 변동성이라 한다.

옵션가치의 결정변수(argument)를 모두 알면 옵션의 가치를 계산할 수 있고 역으로 옵션가치와 나머지

결정변수를 알면 하나의 결정변수를 알아 낼 수 있다. 이 관계를 이용하여, 옵션의 가격이 시장에서 관측

가능하다면, 변동성을 제외한 나머지 결정변수는 시장에서 관측가능 하므로 변동성을 추정해 낼수 있다.

즉, 콜옵션가격=f(기초자산,행사가격,이자율,만기,변동성)로 부터, 변동성=g(콜옵션가격,기초자산가격,

행사가격, 이자율, 만기)로 함수를 전환할 수 있다. 이렇게 구한 변동성이 내재변동성이다.

옵션가치의 결정변수(argument)를 모두 알면 옵션의 가치를 계산할 수 있고 역으로 옵션가치와 나머지

결정변수를 알면 하나의 결정변수를 알아 낼 수 있다. 이 관계를 이용하여, 옵션의 가격이 시장에서 관측

가능하다면, 변동성을 제외한 나머지 결정변수는 시장에서 관측가능 하므로 변동성을 추정해 낼수 있다.

즉, 콜옵션가격=f(기초자산,행사가격,이자율,만기,변동성)로 부터, 변동성=g(콜옵션가격,기초자산가격,

행사가격, 이자율, 만기)로 함수를 전환할 수 있다. 이렇게 구한 변동성이 내재변동성이다.

역사적 변동성역사적 변동성

내재변동성내재변동성

Page 27: Excel_VBA

21. 21. 내재변동성내재변동성 추정추정 : : 이분법이분법(Bisection Method)(Bisection Method)

1 번째

2 번째

3 번째

4 번째

x1x0

f(x)

f(x)

x

1 단계 : 초기구간 [x0, x1] (단, x1< x0)에 대하여 조건 f(x0)*f(x1) < 0 을 만족하면

2단계를 행하고, 그렇지 않으면 조건을 만족하는 새로운 구간 [x0, x1]을 선정

또한 오차 허용한도� � 을 입력한다

2 단계 : 이분점 계산한다

3 단계 : 만일 | x2 - x0| > � 이면 4단계를 행하고 그렇지 않으면 x2를 근사해로 출력

4 단계 : 만일 f(x0)*f(x2) < 0 이면 x1을 x2로 치환하고, 그렇지 않으면 x0를 x2로 치환

1 단계 : 초기구간 [x0, x1] (단, x1< x0)에 대하여 조건 f(x0)*f(x1) < 0 을 만족하면

2단계를 행하고, 그렇지 않으면 조건을 만족하는 새로운 구간 [x0, x1]을 선정

또한 오차 허용한도� � 을 입력한다

2 단계 : 이분점 계산한다

3 단계 : 만일 | x2 - x0| > � 이면 4단계를 행하고 그렇지 않으면 x2를 근사해로 출력

4 단계 : 만일 f(x0)*f(x2) < 0 이면 x1을 x2로 치환하고, 그렇지 않으면 x0를 x2로 치환

2

10

2

xxx

+=

Page 28: Excel_VBA

22. 22. 내재변동성내재변동성 추정추정 : : 이분법이분법(Bisection Method)(Bisection Method)

Public Function imvol(CallPutFlag As String, S As Double, X As Double, T

As DOUBLE, r As Double, Price As Double)

Dim vLow As Double, vHigh As Double, vi As Double

Dim cLow As Double, cHigh As Double, Epsilon As Double

vLow = 0.01 ‘초기 하한값

vHigh = 2 ‘초기 상한값

Epsilon = 0.000001 ‘오차한계

cLow = BS(CallPutFlag, S, X, T, r, vLow)

cHigh = BS(CallPutFlag, S, X,T, r, vHigh)

Vi = vLow + (price – cLow)*(vHigh-vLow) / (cHigh – cLow)

Do While Abs(price- BS(CallPutFlag, S, X, T, r, vi)) > Epsilon

If BS(CallPutFlag, S, X, T, r, vi) < Price Then

vLow = vi

Else

vHihg = vi

cLow = BS(CallPutFlag, S, X, T, r, vLow)

cHigh = BS(CallPutFlag, S, X, T, r, vHihg)

vi = vLow + (price – cLow) * (vHihg –vLow ) / (cHihg – cLow)

Loop

Imvol = vi

End Function

Public Function imvol(CallPutFlag As String, S As Double, X As Double, T

As DOUBLE, r As Double, Price As Double)

Dim vLow As Double, vHigh As Double, vi As Double

Dim cLow As Double, cHigh As Double, Epsilon As Double

vLow = 0.01 ‘초기 하한값

vHigh = 2 ‘초기 상한값

Epsilon = 0.000001 ‘오차한계

cLow = BS(CallPutFlag, S, X, T, r, vLow)

cHigh = BS(CallPutFlag, S, X,T, r, vHigh)

Vi = vLow + (price – cLow)*(vHigh-vLow) / (cHigh – cLow)

Do While Abs(price- BS(CallPutFlag, S, X, T, r, vi)) > Epsilon

If BS(CallPutFlag, S, X, T, r, vi) < Price Then

vLow = vi

Else

vHihg = vi

cLow = BS(CallPutFlag, S, X, T, r, vLow)

cHigh = BS(CallPutFlag, S, X, T, r, vHihg)

vi = vLow + (price – cLow) * (vHihg –vLow ) / (cHihg – cLow)

Loop

Imvol = vi

End Function

Page 29: Excel_VBA

23. 23. 내재변동성내재변동성 추정추정 : : 뉴턴뉴턴--랩슨랩슨(Newton(Newton RaphsonRaphson Method)Method)

f ( x )

f ( x i )

f ( x i + 1 )

x i + 2 x i + 1 x i X

θ

( )[ ]ii xfx ,

뉴턴-랩슨 방법은 수치해석적으로 근사해를 찾는 방법중 하나임. 이 방법은 이분법에서와 같이

초기 구간을 필요로 하지 않는 다는 점과 도함수를 이용하기 때문에 근사치에 대한 수렴속도가

이분법에 비해 빠르다. 그림에서와 같이 초기 추측값 Xi에 해당하는 f(Xi)의 접선 g(X)를 이용

하여 g(x)=0을 만족하는 Xi+1를 찾는다. 이때의 해는 다음 접선방정식을 구할때 이용하며,이러한

과정은 추측값과 접선의 해가 오차 허용한계에 들어 올 때 까지 반복하여 실행.

뉴턴-랩슨 방법은 수치해석적으로 근사해를 찾는 방법중 하나임. 이 방법은 이분법에서와 같이

초기 구간을 필요로 하지 않는 다는 점과 도함수를 이용하기 때문에 근사치에 대한 수렴속도가

이분법에 비해 빠르다. 그림에서와 같이 초기 추측값 Xi에 해당하는 f(Xi)의 접선 g(X)를 이용

하여 g(x)=0을 만족하는 Xi+1를 찾는다. 이때의 해는 다음 접선방정식을 구할때 이용하며,이러한

과정은 추측값과 접선의 해가 오차 허용한계에 들어 올 때 까지 반복하여 실행.

Page 30: Excel_VBA

24. 24. 내재변동성내재변동성 추정추정 : : 뉴턴뉴턴--랩슨랩슨(Newton(Newton RaphsonRaphson Method)Method)

Function ImpliedVolatility(Spot, Strike, RiskFreeRate, Tau, Erroer, PutCall, MarketPrice, MaxTrial)

Dim InitialValue As Double

Dim TempError As Double

Dim TempPrice As Double

InitialValue = Sqr(Abs(Log(Spot / Strike) + _

Risk FreeRate * Tau ) *2 / Tau)

For I = 1 To MaxTrial

TempPrice = BlackScholes(Spot, Strike, RiskFreeRate, _

0, Tau, InitialValue, PutCALL)

TempError = TempPrice – MarketPrice

If TempError <= Error Then

ImpliedVolatility – InitialValue

Exit Function

Else

InitialValue = InitialValue – TempError / _

BlackSchole(Spot, Strike, RiskFreeRate, 0, Tau, InitialValue, PutCall & “vega”)

End If

Next I

ImpliedVolatility = 0

End Function

Function ImpliedVolatility(Spot, Strike, RiskFreeRate, Tau, Erroer, PutCall, MarketPrice, MaxTrial)

Dim InitialValue As Double

Dim TempError As Double

Dim TempPrice As Double

InitialValue = Sqr(Abs(Log(Spot / Strike) + _

Risk FreeRate * Tau ) *2 / Tau)

For I = 1 To MaxTrial

TempPrice = BlackScholes(Spot, Strike, RiskFreeRate, _

0, Tau, InitialValue, PutCALL)

TempError = TempPrice – MarketPrice

If TempError <= Error Then

ImpliedVolatility – InitialValue

Exit Function

Else

InitialValue = InitialValue – TempError / _

BlackSchole(Spot, Strike, RiskFreeRate, 0, Tau, InitialValue, PutCall & “vega”)

End If

Next I

ImpliedVolatility = 0

End Function

Page 31: Excel_VBA

25. Binomial Tree25. Binomial Tree를를 이용한이용한 옵션가격계산옵션가격계산

• 1979, John Cox, Stephen Ross, Mark Rubinstein에 의해 도입됨

• Risk-Neutral Valuation 이용

• 확률측도변화에 의한 Real World와 Risk Neutral World 대응

• 미국식 옵션 등 Path-Dependent한 옵션 및 Early Exercise가 있는 옵션 가격 계산에 유리

• Local Volatility 및 Yield Curve 적용 용이

• 이후 성능 개선을 위해 다양한 응용 모델 등장

=> Trinomial Model, Equal Probability Model 등

• 1979, John Cox, Stephen Ross, Mark Rubinstein에 의해 도입됨

• Risk-Neutral Valuation 이용

• 확률측도변화에 의한 Real World와 Risk Neutral World 대응

• 미국식 옵션 등 Path-Dependent한 옵션 및 Early Exercise가 있는 옵션 가격 계산에 유리

• Local Volatility 및 Yield Curve 적용 용이

• 이후 성능 개선을 위해 다양한 응용 모델 등장

=> Trinomial Model, Equal Probability Model 등

Page 32: Excel_VBA

26. Binomial Tree : 126. Binomial Tree : 1기간기간 모형모형

• 가정

– 주식 S, 옵션 f, 무위험금리 r

– 상승률 u, 하락률 d, 단, d < r < u

– 상승시 주가 Su, 하락시 주가 Sd

– 상승시 옵션가격 fu, 하락시 옵션가격 fd– 1기간 투자

S

f

S0u

fu

S0d

fd

Page 33: Excel_VBA

27. Binomial Tree : 127. Binomial Tree : 1기간기간 모형모형

• 무위험 포트폴리오 구성

– 주식매수 : Δ 주, 옵션 매도: 1계약

– 국면별 포트폴리오 가치

• 상승시 포트폴리오 가치 : Su Δ- fu• 하락시 포트폴리오 가치 : Sd Δ – fd• 초기포트폴리오 설정비 : S Δ- f

– 위로 부터

• Su Δ- fu = Sd Δ – fd // 주가의 상승하락에 관계없이 가치가 같음

• Δ = (fu– fd)/(Su – Sd) // Δ는 위 식을 만족시키는 값

• S Δ- f = e-rT (Su Δ- fu ) // Δ를 맨 위식에 대입

• f = S Δ (1 – u e-rT) + fu e-rT

= e-rT[ p fu + (1-p)fd]

단, p = (e-rT– d) / ( u – d)

이때, 0 < p < 1 이 성립하므로 확률과 유사한 특성을 갖는다

하지만, p는 실제 주식의 상승확률과는 무관하며 Real World와 Risk

Neutral World를 잇는 확률측도변환값. 또한 옵션 현재값(f)를 구할 때

실제 주식의 상승/하락 확률은 전혀 사용되지 않고 있음 => 위험 중립

Page 34: Excel_VBA

28. Binomial Tree : 128. Binomial Tree : 1기간기간 모형모형

One step in the binomial model

Asset 100 One timestep Expiry

Volatility 0.2 before expiry

102

u 1.02

v 0.98 2

Risk-neutral p 0.5125 100

0.5

Interest rate 0.05 1.024488

98

Timestep 0.01

Discount factor 0.9995 0

Strike 100

Color coding… Stock

Delta

Option

Page 35: Excel_VBA

29. Binomial Tree : 29. Binomial Tree : 다기간다기간 모형모형

The treeThree timesteps Two timesteps One timestep Expiry

Asset 100 before expiry before expiry before expiry

Volatility 0.2 106.1208

u 1.02 6.1208

v 0.98 104.04

Risk-neutral p 0.5125 1

4.089975

Interest rate 0.05 102 101.9592

0.756467

Timestep 0.01 2.584069 1.9592

Discount factor 0.9995 100 99.96

0.517497 0.489996

Strike 100 1.574163 1.003588

98 97.9608

a 1.0005 0.256017

0.514082 0

Color coding… Stock 96.04

Delta 0

Option 0

94.1192

0

Page 36: Excel_VBA

30. Binomial Code30. Binomial Code

Function Price(Asset As Double, Volatility As Double, IntRate As Double, _Strike As Double, Expiry As Double, NoSteps As Integer)

ReDim s(0 To NoSteps)ReDim V(0 To NoSteps)timestep = Expiry / NoStepsDiscountFactor = Exp(-IntRate * timestep)temp1 = Exp((IntRate + Volatility * Volatility) * timestep)temp2 = 0.5 * (DiscountFactor + temp1)u = temp2 + Sqr(temp2 * temp2 - 1)d = 1 / up = (Exp(IntRate * timestep) - d) / (u - d)

s(0) = AssetFor n = 1 To NoStepsFor j = n To 1 Step -1s(j) = u * s(j - 1)

Next js(0) = d * s(0)

Next n

For j = 0 To NoStepsV(j) = Payoff(s(j), Strike)

Next j

For n = NoSteps To 1 Step -1For j = 0 To NoSteps - 1V(j) = (p * V(j + 1) + (1 - p) * V(j)) _* DiscountFactor

Next jNext nPrice = V(0)End Function

Function Payoff(s, e)If s < e Then Payoff = e - sEnd Function

Function USPrice(Asset As Double, Volatility As Double, IntRate As Double, _Strike As Double, Expiry As Double, NoSteps As Integer)

ReDim s(0 To NoSteps, 0 To NoSteps)ReDim V(0 To NoSteps, 0 To NoSteps)timestep = Expiry / NoStepsDiscountFactor = Exp(-IntRate * timestep)temp1 = Exp((IntRate + Volatility * Volatility) * timestep)temp2 = 0.5 * (DiscountFactor + temp1)u = temp2 + Sqr(temp2 * temp2 - 1)d = 1 / up = (Exp(IntRate * timestep) - d) / (u - d)

s(0, 0) = AssetFor n = 1 To NoStepsFor j = n To 1 Step -1s(j, n) = u * s(j - 1, n - 1)

Next js(0, n) = d * s(0, n - 1)

Next n

For j = 0 To NoStepsV(j, NoSteps) = Payoff(s(j, NoSteps), Strike)

Next j

For n = NoSteps To 1 Step -1For j = 0 To NoSteps - 1V(j, n - 1) = Application.Max((p * V(j + 1, n) + (1 - p) * V(j, n)) _* DiscountFactor, Payoff(s(j, n - 1), Strike))

Next jNext nUSPrice = V(0, 0)End Function

Page 37: Excel_VBA

31. MC Simulation31. MC Simulation을을 이용한이용한 옵션가격계산옵션가격계산

• 순서

– 주가경로 만들기

– 만기 옵션 PayOff 계산

– 만기 옵션 PayOff 평균값 계산

– 평균값의 현가 계산

• 주가경로 만들기

– Log-normal 분포하는 주가 가정

S(t+1) = S(t) * Exp((r-d-.5*Vol^2)*dt + ε *Vol*sqr(dt))

– 정규분포변수(ε) 구하기

• 엑셀내장함수 : NormsInv(Rand())

• Box-Muller 공식 등 Algorithm 사용 가능

– 이자율 등에서는 다른 분포를 사용함

Page 38: Excel_VBA

32. MC Simulation32. MC Simulation을을 이용한이용한 옵션가격계산옵션가격계산

Function BoxMuller()

Randomize

Do

X = 2 * Rnd() - 1

Y = 2 * Rnd() - 1

dist = X * X + Y * Y

Loop Until dist < 1

BoxMuller = X * Sqr(-2 * Log(dist) / dist)

End Function

Page 39: Excel_VBA

[[실습실습5] 5] 엑셀시트를엑셀시트를 이용한이용한 Vanilla OptionVanilla Option계산계산

Page 40: Excel_VBA

33. 33. 복수의복수의 기초자산기초자산 이용이용

• Cholesky Factorization

– Correlated Random Variable 생성

– 상관계수행렬(Σ)를 삼각행렬(MMT )로 나눈 후

– Φ = Mε로 Correlated Random Variable Vector Φ 를 구함

– 이론적 배경

E(Φ i Φ j) = ρij

Φ = Mε

MMT = Σ

Φ ΦT = Mε εT MT

E(Φ ΦT) = ME[ε εT ] MT = MMT = Σ

단, Σ : correlation matrix

– 연립방정식을 해를 구하기 위해 인수 Matrix를 LU 분해하는 방법 중 하나

– 양정부호 행렬에만 적용 가능 => Correlation Matrix에 적합함

– 단, 상관관계가 큰 종목이나 바스켓이 포함될 경우에는 불안정할 수 있음

Page 41: Excel_VBA

34.34. CholeskyCholesky Factorization Factorization 계산계산 사례사례

Input symmetric (positive definite) correlation matrix

0.45 0.03 0.13 0.06 0.09

0.03 0.34 0 -0.09 0.12

0.13 0 0.28 0.001 -0.13

0.06 -0.09 0.001 0.41 0.03

0.09 0.12 -0.13 0.03 0.32

Matrix M 0.67082 0 0 0 0

0.044721 0.581378 0 0 0

0.193793 -0.014907 0.492161 0 0

0.089443 -0.161685 -0.038084 0.611889 0

0.134164 0.196086 -0.31103 0.061872 0.403711

Product of M 0.45 0.03 0.13 0.06 0.09

and M^T 0.03 0.34 0 -0.09 0.12

0.13 0 0.28 0.001 -0.13

0.06 -0.09 0.001 0.41 0.03

0.09 0.12 -0.13 0.03 0.32

Page 42: Excel_VBA

35.35. CholeskyCholesky Factorization CodeFactorization Code

Function cholesky(Sigma As Object)Dim n As IntegerDim k As IntegerDim i As IntegerDim j As IntegerDim X As DoubleDim a() As DoubleDim M() As Doublen = Sigma.Columns.CountReDim a(1 To n, 1 To n)ReDim M(1 To n, 1 To n)For i = 1 To n

For j = 1 To na(i, j) = Sigma.Cells(i, j).ValueM(i, j) = 0

Next jNext iFor i = 1 To n

For j = i To nX = a(i, j)For k = 1 To (i - 1)

X = X - M(i, k) * M(j, k)Next kIf j = i Then

M(i, i) = Sqr(X)Else

M(j, i) = X / M(i, i)End IfNext j

Next icholesky = MEnd Function

Page 43: Excel_VBA

36. Performance 36. Performance 향상향상 방안방안

• Issue

– MC Simulations의 정확성은 시행횟수가 많을수록 높다 (Sqrt(횟수)에 비례)

– 시행횟수가 많을수록 계산시간이 오래 걸림

– 시행회수를 줄이면서 정확성을 높일 수 있는 방안 필요

• 방법

– Antithetic Variables

– Control Variate Method

Page 44: Excel_VBA

37. Antithetic Variables37. Antithetic Variables

• 원리

– 정규분포는 대칭성을 가짐

– 주가수익률은 정규분포를 함 ( 기본 가정)

– 난수추출시 서로 다른 부호의 값을 동시에 추출

• 방법

– 난수 ε를 추출하였을 경우 – ε값도 동시에 사용함

– 이 경우 주가경로는 Drift를 축으로 하여 대칭의 형태를 보임

– 두 주가경로에 따라 평가한 값의 평균값을 사용

• 사례

– 실습

Page 45: Excel_VBA

38. Control38. Control VariateVariate MethodMethod

• 원리

– 시뮬레이션을 이용하여, 상관관계가 높은 두 파생상품의 가치(및 지표)를 계산할 경우 각각에서 발생하는 오차도 높은 상관관계를 가짐

– 두 상품 중 한 상품의 정확한 값 ( 예, closed form solution)을 알 수 있다면 시뮬레이션에서 발생한 오차를 구할 수 있으며, 다른 상품에서도 유사한 오차가발생한 것으로 보고, 시뮬레이션에서 구한 값으로부터 유사(?)한 오차를 제거한값으로 추정함

• 방법

– V1 추정값 = V1’ – V2’ + V2

– 단, V1’: V1의 시뮬레이션해, V2’: V2의 시뮬레이션해, V2: V2의 정확해

Page 46: Excel_VBA

EndEnd

감사합니다