Excel VBA를 이용한 금융공학

- 주식파생상품(선물•옵션•스왑)의 적용 -

Oct. 2008

금융공학팀 차장 홍창수

목차(contents)

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

19. 수치해석의 필요성

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

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

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

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

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

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

5. 주요 엑셀함수의 VBA적용
6. 엑셀 Sheet 디자인(Layout)

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

7. KOSPI200옵션 시세표
8. Exotic option delta surface

25. Binomial Tree를 이용한 옵션가격계산
26. Binomial Tree : 1기간 모형

9. Black Scholes OPM

27. Binomial Tree : 1기간 모형

10. Option Greeks : Delta

28. Binomial Tree : 1기간 모형

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

29. Binomial Tree : 다기간 모형

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

30.
31.
32.
33.
34.
35.
36.
37.
38.

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

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

Binomial Tree Code
MC Simulation을 이용한 옵션가격계산
MC Simulation을 이용한 옵션가격계산
복수의 기초자산을 이용
Cholesky Factorization 걔산 사례
Cholesky Factorization Code
Performance 향상 방안
Antithetic Variables
Control Variate Method

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

EXCEL

VBA

고급 응용

지식

프로그래밍

프로그램

• •스프레드쉬트
스프레드쉬트모델링(Spreadsheet
모델링(SpreadsheetModeling)
Modeling)
–Use
only
simple
arithmetic
–Use only simple arithmetic
–Organize
–Organizespreadsheet
spreadsheetfor
forbetter
betterpresentation
presentation
• •엑셀과
엑셀과내장함수(built-in
내장함수(built-infuctions)
fuctions)이용
이용
–Make
excel
work
more
efficient
–Make excel work more efficient
–Powerful
–Powerfulexcel
excelbuilt-in
built-infunctions
functions
• •VBA
VBAI:I:사용자
사용자정의
정의함수
함수
––writing
writingthe
theBlack-Scholes
Black-Scholesfunction
function
––pros
prosand
andcons
consof
ofdifferent
differentimplementation
implementation
• •VBA
VBAII:
II:
–Make
–Makeexcel
excelwork
workhard,
hard,and
andfancy
fancyusers
usersinput
input
–be
–beaabetter
betterprogrammer
programmer

2. 금융공학 모델링의 기초(2)
• •행렬과
행렬과해찾기(Solver)
해찾기(Solver)기능
기능

–포트폴리오
–포트폴리오수익률과
수익률과분산
분산
–포트폴리오 최적화(Portfolio optimization)
–포트폴리오 최적화(Portfolio optimization)

• •수치해석의
수치해석의분야
분야

- 보간법(Interpolation), 최적화, 수치적분
- 보간법(Interpolation), 최적화, 수치적분
--수치미분(Tree,
수치미분(Tree,FDM),
FDM),시뮬레이션
시뮬레이션

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

–몬테카를로
–몬테카를로시뮬레이션(Monte
시뮬레이션(MonteCarlo
CarloSimulation)
Simulation)
– Pricing multiple stock options
– Pricing multiple stock options

• •위험관리
위험관리분야(Risk
분야(RiskManagement)
Management)
–Garch
–GarchVolatility
VolatilityModeling
Modeling
–Value
at
Risk
–Value at Risk

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

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

vb를 vb를엑셀에서 엑셀에서사용하기 사용하기쉽게 쉽게 만든 만든프로그래밍 프로그래밍언어 언어 . 엑셀 Macro 작성 : (1) 매크로 기록기 이용 • •매크로? 매크로?엑셀에서 엑셀에서반복 반복사용하는 사용하는일련의 일련의작업들을 작업들을다른곳에 다른곳에기록시켜서 기록시켜서필요할때 필요할때 불러서 불러서사용하루 사용하루수 수있도록 있도록한 한것 것 • •VBA VBA??Visual VisualBasic Basicfor forApplication의 Application의약자로.3. 약자로.

프로젝트 프로젝트탐색기는 탐색기는현재 현재 엑셀에서 엑셀에서열려있는 열려있는전체 전체워크북들로 워크북들로구성된 구성된도표를 도표를보여준다. 엑셀 Macro 작성 : (2) VBA를 이용하는 방법 ■■프로젝트 프로젝트탐색기 탐색기: :프로젝트를 프로젝트를관리하고 관리하고선택하는 선택하는기능.개체에 개체에대한 대한코드창을 코드창을보기 보기위해서는 위해서는프로젝트 프로젝트탐색기에서 탐색기에서개체를 개체를 더블 더블클릭 클릭 . ■■속성창 속성창: :프로젝트 프로젝트탐색기창에서 탐색기창에서선택한 선택한파일이나 파일이나시트등의 시트등의이름의 이름의속성을 속성을 변경할 변경할수 수있음 있음 ■■모듈창 모듈창: :코드창이라 코드창이라부르기도 부르기도하고. 기능.4. 하고.프로그램을 프로그램을직접 직접코딩하는 코딩하는곳으로 곳으로프로그램 프로그램 을 을생성한다. 생성한다. 보여준다.

• •SQRT(x)는 SQRT(x)는x값의 x값의제곱근을 제곱근을계산해준다.exp(x)를 exp(x)를계산한다. 값.Fact(3) 누적정규분포 NORMSDIST(x) Application. • •FACT(numbers)는 1*2*3*…*numbers의 FACT(numbers)는 1*2*3*…*numbers의값을 값을의미하는 의미하는팩토리얼값 팩토리얼값계산 계산 • •NORMDIST는 일반 정규분포의 이론적 확률값을 계산한다. LN(x)는 x의 자연로그 값을 계산한다.5. • •LN(x)는 x의 자연로그 값을 계산한다. . 계산한다. 계산해준다. 주요엑셀함수의 VBA적용 VBA 엑셀(Excel) 곱셈 xy x*y x*y x^2 x^2 LN(x) Log(x) EXP(x) Exp(x) x SQRT(x) Sqr(x) 팩토리얼 3! FACT(3) Application.NormSDist(x) 난수발생 RAND() Rnd 자승 로그 x2 loge x 지수 exp(x) 제곱근 • •EXP(x)는 EXP(x)는지수함수 지수함수값. NORMDIST는 일반 정규분포의 이론적 확률값을 계산한다.

복잡한 복잡한모델은 모델은유지보수에 유지보수에어려움 어려움 • •출력영역(해답) : 결과값을 한 영역으로 배치 출력영역(해답) : 결과값을 한 영역으로 배치 • •그래픽 그래픽배열 배열영역 영역: :계산된 계산된내용을 내용을비주얼하게 비주얼하게볼 볼수 수있도록 있도록배치 배치 . 계산. EXCEL Sheet 디자인(layout) : 입력데이터. 작성.6. 출력 자료 • •사용자 사용자입력변수 입력변수: :사용자가 사용자가입력할 입력할부분은 부분은눈에 눈에뛰는 뛰는색상으로 색상으로한 한영역 영역배치 배치 • •관리 요약정보 : 요약정보를 잘 작성해놓으면 이후에 보기 편함 관리 요약정보 : 요약정보를 잘 작성해놓으면 이후에 보기 편함 • •계산과정 계산과정영역 영역: :수식의 수식의구성은 구성은간단하게 간단하게작성.

T: 잔존만기) ‘//VBA Code. Tau As Double. q : 배당수익률.[실습1] 지수선물 VBA 계산 지수선물의 이론가격을 계산하는 간단한 예제 F0 = S 0 e ( r − q )T (S : 기초자산 가격. Q As Double) ‘지수는 배당이 지급되는 자산으로 간주 ‘S= 현재 지수의 가격(KOSPI200 지수) ‘Tau = 잔존만기(연율) Futures = S * Exp((R-Q) * Tau ) End Function . r : 무위험이자율. R As Double. 선물 가격결정공식 Public Function Futures (S As Double.

외가격(OTM)옵션의 외가격(OTM)옵션의 프리미엄은 프리미엄은 거의 거의 0에 0에 근접. 옵션시세표.7. 내가격(ITM)의 내가격(ITM)의 프리미엄은 프리미엄은 거의 거의 확정. KOSPI200옵션 시세표 • •옵션 옵션 만기일의 만기일의 옵션시세표. 근접. 확정. 등가격(ATM중심)의 등가격(ATM중심)의 매매만 매매만 성립 성립 .

[실습2] Black-Scholes Call option function(Surface) Black-Scholes call option function 60 50 40 30 20 10 S 150 140 130 120 110 100 90 80 70 60 0 50 0.9 1 0 .1 0.8 0.4 0.2 0.6 T-t 0.5 0.7 0.3 0.

84 106. Local Volatility.5000 -2. Sell High) 3  만기 근접과 지수하락시 델타 증가. Participation Rate와 Rebate는 상호 보완적인 관계  만기 직전 Barrier 근처 Delta.0000 0.0000  상품설계시 Rebate가 클수록.0000 151  Barrier Option에 영향을 주는 요소 → Interest Rate.00 100. 복제) 6 5 델타 4  해당종목의 주가 하락시 델타만큼 해당주식을 매입(Buy Low. Gamma.5000 8 37 → Risk를 감소시켜줌. Dynamic option Replication (Delta 위주의 Greek.92 98.12 -3.0000 -1.08 86. 조기상환 비교시점 ATM 감마 최대 990 1095 780 675 465 360 255 150 -1 62 68 76 84 92 100 108 자산가격 45 0 570 1 885 2 잔존만기 Coupon이 더 커지기 때문에 만기 근접 할수록 Gamma Risk 증대 .5000 0.8. Jump 118. Volatility of Volatility. Vega의 급격한 변화 Risk발생 -2. Repo. Dividend.88 103.0000 65 잔 존 만기 델타 -0.19 180 89.5000 Autocall Autocall Structure Structure 10 9 8 7  조기상환형 ELS(6 Chance).72 115.96 95. Short Delta를 줄여줌 -1.5000 94 123 -3.15 83.76 112.80 109. Exotic option Delta Surface Barrier Barrier Options Options 1.04 92.

[실습3] Black Scholes OPM c = SN ( d 1 ) − Xe − r ( T − t ) N ( d 2 ) 만기시 주가의 현재가치 p = Xe − r ( T − t ) N ( − d 2 ) − SN ( − d 1 ) 만기시 행사가격의 현재가치 .

1. Black Scholes OPM ‘//VBA ‘//VBACode.NormSDist(d2) BlackSholes = S*Application.함수 함수BlackSholes BlackSholes생성 생성작업 작업: :String.d2 d2As AsDouble Double d1 d1==(Log(S/X)+(r+v^2/2)*T)/(v*Sqr(T)) (Log(S/X)+(r+v^2/2)*T)/(v*Sqr(T)) d2=d1-v*Sqr(T) d2=d1-v*Sqr(T) IfIfCallPutFlag CallPutFlag==“c” “c”Then Then BlackSholes = S*Application.Dim Dim명령문을 명령문을활용하여 활용하여d1과 d1과d2와 d2와같은 같은중간단계 중간단계계산실행 계산실행 4.프로시져 프로시져종료(End 종료(EndFunction) Function) .NormSDist(d2) ElseIf ElseIfCallPutFlag CallPutFlag==“p” “p”Then Then BlackSholes = X*Exp(-r*T)*Application. Double.Double등의 Double등의변수 변수선언 선언 3.NormSDist(-d1) BlackSholes = X*Exp(-r*T)*Application. String.매크로 매크로이름지정 이름지정(임의지정 (임의지정BlackSholes) BlackSholes) 2.3.5.TTAs AsDouble.NormSDist(-d2)-S*Application. Double.블랙-숄즈(1973) 블랙-숄즈(1973)공식 공식 Public PublicFunction FunctionBlackSholes(CallPutFlag BlackSholes(CallPutFlagAs AsString.9.조건문 If를 사용한 구문 구성 : If-Then-ElsIf 구문 조건문 If를 사용한 구문 구성 : If-Then-ElsIf 구문 5.vvAs AsDouble) Double) As AsDouble Double Dim Dimd1 d1As AsDouble. Double.NormSDist(-d2)-S*Application. String.NormSDist(d1)-X*Exp(-r*T)*Application.NormSDist(d1)-X*Exp(-r*T)*Application.2. Code.NormSDist(-d1) End EndIfIf End EndFunction Function VBA VBACODE에 CODE에대한 대한간단한 간단한설명 설명 1. Double.XXAs AsDouble. r rAs AsDouble.4.SSAs AsDouble. Double.

10. Double.델타(Delta) 델타(Delta): :블랙숄즈(유럽형옵션) 블랙숄즈(유럽형옵션) Public Function Delta(CallPutFlag Public Function Delta(CallPutFlagAs AsString. Code.SSAs AsDouble.XXAs AsDouble.-1)1) End EndIfIf End EndFunction Function ._r_rAs As Double.NormSDist(d1) Delta = Exp((-r) * T) * (Application. Option Greeks : Delta 옵션가치변화/기초자산 가치의변화 ∆= ∂C = N (d1 ) ∂S 옵션이 내가격이 될 가능성(확률) ∂c = e( b−r )T N (d1 ) > 0 ∂S ∂p ∆put = = e ( b − r )T [ N (d1 ) − 1] < 0 ∂S ∆call = ‘//VBA ‘//VBACode. Double.TTAs AsDouble.NormSDist(d1).NormSDist(d1) Application. String. v As Double) As Double Dim Dimd1 d1As AsDouble Double d1 = (Log(S d1 = (Log(S/ /X) X)++(r(r++vv^^22/ /2)2)* *T) T)/ /(v(v* *Sqr(T)) Sqr(T)) IfIfCallPutFlag = "c" Then CallPutFlag = "c" Then Delta Delta==Exp((-r) Exp((-r)* *T) T)* *Application.NormSDist(d1) ElseIf CallPutFlag = "p" ElseIf CallPutFlag = "p"Then Then Delta = Exp((-r) * T) * (Application. v As Double) As Double Double. Double.

.실무적으로 가장 대표적인 예.거래비용 발생(transaction cost) . 통화옵션등)에서의 변동성 수준에 따른 투기적 매매 . 즉.스트랭글 매도(short strangle) : 수익원천(time decay+ implied volatility) 변동성 매매를 하는 이유: 다음과 같이 변동성 매매의 매력적인 이유를 요약할수 있음 . 연속적인 헤징. 변동성 매매와 델타중립(Delta Neutral Trading) 변동성 매매와 델타 중립(Delta Neutral Trading) 델타란 기초자산에 대한 옵션의 가격변화를 나타낸다.실현변동성과 내재변동성 수준의 차이에 대한 스프레드 거래 -변동성 노출에 대한 헤지거래 : 헤지펀드 및 위험을 전가할 목적의 거래자 실무상 델타 헤지 트레이딩이 위험한 이유: 델타 헤징은 완만한 지수움직임을 가정하며. 방향성 위험을 갖고 있는 포지션 델타를 0으로 맞춰 트레이딩하는 것을 변동성 매매라 하며. 이러한 불완전성으로 인해 이론적인 수익보다 더 큰 손실이 발생하기도 한다.변동성은 불확실성이 증가할 때 확대되는 경향이 있음 .자산가격의 점프(jump) . 기초자산 움직임에 대해 옵션이 얼마만큼 변화하는가를 뜻한다.실제로 연속적인 헤지를 할수 없음 : 이산적인 헤지(discrete hedging) .11.확률변동성(stochastic volatility) : 헤지비율을 결정하는 미래실현변동성을 모름 . 방향성 위험(Directional risk)에 대한 지표가 델타가 된다. 이는 지수가 상승하거나 하락하는 방 향 성 에 의 해 손 익 이 발 생 하 는 것 과 는 무 관 한 포 지 션 이 되 는 동 시 에 시 간 가 치 효 과 (theta) 와 내재변동성(vega)감소에 의해 수익이 발생되는 포지션을 의미한다. 거래비용이 없다는 가정.투기적 거래: 여러 자산시장(지수. 미래변동성을 안다고 가정한다. 실제시장에서는 아래와 같이 블랙숄즈 가정과는 다른 현상이 발생하며.변동성의 평균회귀(mean reverting) 특성을 매매에 응용할 수 있음 -자산가격이 하락하는 경우 변동성이 증대되거나 유지되는 경향이 있음 변동성 매매의 유형: .

12. 델타 중립 헤징 (Delta Neutral Hedging) 옵션의 헤징 전략( 이론적 방법) • •Delta Deltaof ofOption Option • •Gamma of Gamma ofOption Option • •Theta of Option Theta of Option • •Rho Rhoof ofOption Option • •Vega Vegaof ofOption Option == Delta Deltaof ofHedge HedgePortfolio Portfolio == Gamma of Hedge Gamma of HedgePortfolio Portfolio == Theta of Hedge Portfolio Theta of Hedge Portfolio == Rho Rhoof ofHedge HedgePortfolio Portfolio == Vega Vegaof ofHedge HedgePortfolio Portfolio 옵션의 헤징 전략( 실무적 방법) • •Delta Deltaof ofOption Option == Delta Deltaof ofHedge HedgePortfolio Portfolio(주식 (주식또는 또는선물 선물이용) 이용) c.f: :장내 장내옵션 옵션이용가능 이용가능 Delta Hedging of Large Portfolio • •Delta Deltaof ofLarge LargePortfolio Portfolio == Delta Deltaof ofHedge HedgePortfolio Portfolio • •Gamma of Large Portfolio ≈ 0 Gamma of Large Portfolio ≈ 0 • •Vega Vegaof ofLarge LargePortfolio Portfolio ≈≈ 00 .f c.

델타 중립 헤징 (Delta Neutral Hedging) •Black-Scholes •Black-Scholes의 의결과에 결과에대한 대한리뷰 리뷰 ••만일 만일Black-Scholes Black-Scholes방정식을 방정식을유도할 유도할때와 때와동일한 동일한조건으로 조건으로포트폴리오의 포트폴리오의 조정이 조정이가능하다면 가능하다면(옵션 (옵션판매가 판매가––옵션 옵션이론가)의 이론가)의수익을 수익을확보할 확보할수 수있음! 있음! ••B-S B-S모형에서 모형에서사용한 사용한포트폴리오: 포트폴리오:옵션 옵션1단위 1단위++∆∆주식 주식 •Delta: •Delta:(옵션의 (옵션의가격 가격변화)/(주식의 변화)/(주식의가격변화) 가격변화) Option price Slope = ∆ B A Stock price .13.

14. Option Greeks : Gamma Γcall . Code. Double.감마(Gamma) 감마(Gamma): :블랙숄즈(유럽형옵션) 블랙숄즈(유럽형옵션) Public PublicFunction FunctionGamma(S Gamma(SAs AsDouble. Double. Double.XXAs AsDouble. 감마는 가속도의 개념 ‘//VBA ‘//VBACode. put ∂ 2 c ∂ 2 p n(d1)e ( b − r )T = 2 = = >0 ∂S ∂S 2 Sσ T 델타변화 / 기초자산 가치의 변화 델타는 속도.TTAs AsDouble.vvAs AsDouble) Double)As AsDouble Double Dim Dimd1 d1As AsDouble Double d1 d1==(Log(S (Log(S/ /X) X)++(r(r++vv^^22/ /2)2)* *T) T)/ /(v(v* *Sqr(T)) Sqr(T)) Gamma Gamma==Exp((-r) Exp((-r)* *T) T)* *ND(d1) ND(d1)/ /(S (S* *vv* *Sqr(T)) Sqr(T)) End EndFunction Function . Double.r rAs AsDouble.

옵션의 만기가 많이 남아 있는 상황에서는 감마요인보다는 베가 요인이 더 큰 영향을 미치게되며. 만기일에 근접할수록 베가요인보다 감마의 영향력이 증대하여 감마리스크의 위험관리가 중요하게 된다. 내재변동성이 크다는 것은 지수의 움직임이 크다는 것으로 옵션가격 전체 상승이나 하락이 급격히 이루어지는 것을 뜻한다. 감마 매수(long gamma) : 미래 변동성예측치 > 현재 내재변동성 (IV 저평가) 감마 매도(short gamma): 미래 변동성예측치 < 현재 내재변동성 (IV 고평가) 한편. 베가 트레이더는 내재변동성의 방향에 관점을 두는 거래자를 뜻함. 아울러. 즉. 감마 매도(short gamma)는 내재변동성이 미래 변동성 예측치에 비해 높게 형성되어 고평가된 경우. 감마 트레이더와 베가 트레이더가 관심을 가지고 보는 사항이 다르다는 것을 알수 있다. 옵션 매도포지션을 취하는 것이 유리한 것을 뜻하며. 베가는 옵션의 내재변동성(implied volatility)을 나타내며. . Gamma Trading vs Vega Trading 감마 트레이딩 VS 베가 트레이딩 (gamma vs vega trading) 감마는 옵션의 실현변동성(realized volatility)을 의미.15. 베가 매수(long vega) : 내재변동성의 추세 상승 예상 (IV 방향성 예측) 베가 매도(short vega): 내재변동성의 추세 하락 예상 (IV 방향성 예측) 정리하면. 이와 반대일 경우 감마 매수를 하게 된다. 감마 트레이더는 기초자산의 가격 움직임에 더 관심을 두고 거래하는 매매자를 뜻하며.

r rAs AsDouble. put = ∂c ∂p = Se (b − r )T n(d1) T > 0 = ∂σ ∂σ 옵션가치의 변화 / 변동성의 변화 ‘//VBA ‘//VBACode.XXAs AsDouble. Double. Double.16.베가(Vega) 베가(Vega): :블랙숄즈(유럽형옵션) 블랙숄즈(유럽형옵션) Public PublicFunction FunctionVega(S Vega(SAs AsDouble. Double. Option Greeks : Vega Vegacall .TTAs AsDouble.vvAs AsDouble) Double)As AsDouble Double Dim d1 As Double Dim d1 As Double d1 d1==(Log(S (Log(S/ /X) X)++(r(r++vv^^22/ /2)2)* *T) T)/ /(v(v* *Sqr(T)) Sqr(T)) Vega = S * Exp((-r) * T) * ND(d1) * Sqr(T) Vega = S * Exp((-r) * T) * ND(d1) * Sqr(T) End EndFunction Function . Double. Code.

NormSDist(-d1) Application.NormSDist(-d2) Application.NormSDist(-d1) ++r r* *XX* *Exp(-r Exp(-r* *T) T)* *Application.NormSDist(d1)* *vv/ /(2(2* *Sqr(T)) Sqr(T)).NormSDist(d2) ElseIf CallPutFlag = "p" ElseIf CallPutFlag = "p"Then Then Theta = -S * Exp((-r) * T) Theta = -S * Exp((-r) * T)* *Application. Double.베가(Vega) 베가(Vega): :블랙숄즈(유럽형옵션) 블랙숄즈(유럽형옵션) Public Function Theta(CallPutFlag Public Function Theta(CallPutFlagAs AsString.17.-r r* *XX* *Exp(-r Exp(-r* *T) T)* *Application.SSAs AsDouble. v As Double) As Double Dim Dimd1 d1As AsDouble.v * Sqr(T) IfIfCallPutFlag CallPutFlag=="c" "c"Then Then Theta = -S * Exp((-r) Theta = -S * Exp((-r)* *T) T)* *Application. Double.-(-r) (-r)* *SS* *Exp((-r) Exp((-r)* *T) T) * *Application.NormSDist(d1) Application.NormSDist(d2) Application.XXAs AsDouble. String.TTAs AsDouble.NormSDist(-d2) End EndIfIf End EndFunction Function .NormSDist(d1) Application. Code. v As Double) As Double As Double.NormSDist(d1) Application.NormSDist(d1) . Double.d2 d2As AsDouble Double d1 = (Log(S / X) + (r + v ^ 2 d1 = (Log(S / X) + (r + v ^ 2/ /2)2)* *T) T)/ /(v(v* *Sqr(T)) Sqr(T)) d2 = d1 v * Sqr(T) d2 = d1 . Double.NormSDist(d1)* *vv/ /(2(2* *Sqr(T)) Sqr(T))++(-r) (-r)* *SS* *Exp((-r) Exp((-r)* *T) T) * *Application. r rAs Double. Option Greeks : Theta Θ call Se (b − r )T n(d1)σ ∂c =− =− − (b − r ) Se ( b − r )T N ( d1 ) − rXe − rT N (d 2 ) ≤≥ 0 ∂T 2 T Θ put ∂p Se (b −r )T n(d1)σ =− =− + (b − r ) Se (b −r )T N (−d1 ) + rXe −rT N (−d 2 ) ≤≥ 0 ∂T 2 T ‘//VBA ‘//VBACode.

TTAs AsDouble. v As Double) As Double Double. Code.XXAs AsDouble. Option Greeks : Rho ‘//VBA ‘//VBACode.v * Sqr(T) IfIfCallPutFlag CallPutFlag=="c" "c"Then Then Rho = X * T * Exp(-r Rho = X * T * Exp(-r* *T) T)* *Application. Double.r rAs As Double.NormSDist(-d2) End If End If End EndFunction Function .d2 d2As AsDouble Double d1 = (Log(S / X) + (r + v ^ 2 d1 = (Log(S / X) + (r + v ^ 2/ /2)2)* *T) T)/ /(v(v* *Sqr(T)) Sqr(T)) d2 = d1 v * Sqr(T) d2 = d1 .NormSDist(d2) Application.NormSDist(d2) ElseIf CallPutFlag = "p" Then ElseIf CallPutFlag = "p" Then Rho Rho==-X -X* *TT* *Exp(-r Exp(-r* *T) T)* *Application. Double.로(Rho) 로(Rho): :블랙숄즈(유럽형옵션) 블랙숄즈(유럽형옵션) Public PublicFunction FunctionRho(CallPutFlag Rho(CallPutFlagAs AsString.SSAs AsDouble.NormSDist(-d2) Application. Double. String.18. v As Double) As Double Dim Dimd1 d1As AsDouble. Double.

선물가격. Check등과 연계? 통제가 쉬운 Worksheet이 되려면? 자동입력 셀과 수동입력 셀의 조화 등 복잡한 Worksheet이 되지 않게 하려면? 간단한 설계에 중점. 감마. 평균가 등 행사가격이 몇 개나 필요한가? 10개정도 적당 자신만이 원하는 요소가 있는가? 수수료. Check 사항 내용 옵션계산에 필요한 요소는? 현재일. kospi200. 프리미엄 합. 마켓포인트.행사 가격. 선물매수/도 손익계산에 필요한 요소는? 옵션가격.콜/풋. 수식의 고급화 등 .베가. 선물가격. 만기일. 배당 포지션 계산에 필요한 요소는? 옵션수량. 이자율. 적당한 현물가격계산식 등 Cell과 외부 Data의 연결되는 Cell작성 로이터.[실습4] 매매시스템 화면 만들기 자신 만의 아이디어를 이용하여 매매시스템 화면을 만들어 보세요. 선물수량. 옵션 매수/도. 델타. 현재가.쎄타.

만일. 미국형 옵션에는 사용할 수 없고. 분석적방법 트리(Tree)방법 옵션가치평가 유한차분법 몬테카를로 (FDM) 시뮬레이션 .19.사용자가 사용자가더 더세밀하게 세밀하게가격 가격계산을 계산을원한다면 원한다면수치해석 수치해석기법이 기법이적용되어야 적용되어야한다.조기행사기회를 조기행사기회를가지는 가지는미국형옵션과 미국형옵션과다른 다른옵션 옵션미국형 미국형옵션의 옵션의가치를 가치를결정하기 결정하기위해서는 위해서는 이항모형 이항모형(Binomial (Binomial) )혹은 혹은삼항모형 삼항모형(Trinomial (TrinomialTree). 한다. 수치해석(Numerical Method)의 필요성 블랙숄즈 블랙숄즈모형은 모형은폐쇄형 폐쇄형해(closed 해(closedform formsolution)라는 solution)라는이점상 이점상단순하고. 미국형 옵션에는 사용할 수 없고. 필요.유한차분법 유한차분법(FDM)과 (FDM)과같은 같은수치해석기법 수치해석기법필요. 예를들어.다루기 다루기쉽다는 쉽다는이유때문에 이유때문에 시장참가자들이 널리 사용 그러나. 가능. 만일. Tree). 유럽형 콜 옵션과 풋 옵션에만 시장참가자들이 널리 사용 그러나. 단순하고. 유럽형 콜 옵션과 풋 옵션에만 적용이 적용이가능. 예를들어.

이자율.이자율. 한다.행사가격.20. 방법이다. .기초자산가격.만기. 만기)로 함수를 전환할 수 있다. 행사가격. 즉. 없다. 변동성의 이해 : 역사적 변동성 vs 내재변동성 역사적 역사적 변동성 변동성 옵션 옵션가격의 가격의결정변수 결정변수중 중대부분의 대부분의변수는 변수는관측 관측가능하지만 가능하지만변동성만은 변동성만은관측할 관측할수가 수가없다. 즉.변동성)로 콜옵션가격=f(기초자산. 이 관계를 이용하여. 이자율. 부터. 옵션의 가격이 시장에서관측 관측 가능하다면. 만기)로 함수를 전환할 수 있다. 가능하다면.변동성=g(콜옵션가격. 변동성을 제외한 나머지 결정변수는 시장에서 관측가능 하므로 변동성을 추정해 낼수 있다.콜옵션가격=f(기초자산. 내재변동성 내재변동성 옵션가치의 옵션가치의결정변수(argument)를 결정변수(argument)를모두 모두알면 알면옵션의 옵션의가치를 가치를계산할 계산할수 수있고 있고역으로 역으로옵션가치와 옵션가치와나머지 나머지 결정변수를 알면 하나의 결정변수를 알아 낼 수 있다. 이렇게 구한 변동성이내재변동성이다. 이렇게 구한 변동성이 행사가격. 변동성=g(콜옵션가격.행사가격.만기. 내재변동성이다.기초자산가격.변동성)로부터. 변동성을 제외한 나머지 결정변수는 시장에서 관측가능 하므로 변동성을 추정해 낼수 있다. 이 관계를 이용하여.이자율.따라서 따라서변동 변동 성을 성을어떻게 어떻게결정할 결정할것인가가 것인가가옵션 옵션결정모형에서 결정모형에서중요한 중요한이슈가 이슈가되는데 되는데가장 가장보편적으로 보편적으로사용되는것이 사용되는것이 과거의 과거의데이터로 데이터로부터 부터추정해 추정해내는 내는방법이다.이렇게 이렇게구해진 구해진변동성을 변동성을역사적 역사적변동성이라 변동성이라한다. 옵션의 가격이 시장에서 결정변수를 알면 하나의 결정변수를 알아 낼 수 있다.

0. 그렇지 그렇지 않으면 않으면 xx0를 를 xx2로 로 치환 치환 단계 :: 만일 0 2 1 2 0 2 . 내재변동성 추정 : 이분법(Bisection Method) f(x) 1 번째 2 번째 3 번째 4 번째 x0 f(x) x x1 11 단계 x0)에 대하여 조건 f(x0)*f(x1) < 0 을 만족하면 단계 :: 초기구간 초기구간 [x [x0.21. xx1< 1< x0)에 대하여 조건 f(x0)*f(x1) < 0 을 만족하면 2단계를 선정 2단계를 행하고.0. 행하고.xx1]을 1]을 선정 또한 또한 오차 오차 허용한도 허용한도  을 을 입력한다 입력한다 x 0 + x1 22 단계 이분점x2 = 2 계산한다 계산한다 단계 :: 이분점 : 만일 | x x | > 근사해로 출력 33 단계  이면 이면 4단계를 4단계를 행하고 행하고 그렇지 그렇지 않으면 않으면 xx2를 단계 : 만일 | x2 2 .x0 0| >  2를 근사해로 출력 44 단계 만일 f(x f(x0)*f(x )*f(x2)) << 00 이면 이면 xx1을 을 xx2로 로 치환하고. (단.xx1]1] (단. 치환하고. 그렇지 그렇지 않으면 않으면 조건을 조건을 만족하는 만족하는 새로운 새로운 구간 구간 [x [x0.

r.T. S.X. r.T.X. r.SSAs AsDouble. vi) < Price Then BS(CallPutFlag.S.S.S. String.Price PriceAs AsDouble) Double) Dim vLow As Double.T.Epsilon EpsilonAs AsDouble Double vLow vLow==0. X.TT As AsDOUBLE. X.r. X. vi As Double Dim DimcLow cLowAs AsDouble.X. vHigh) cHigh = BS(CallPutFlag. BS(CallPutFlag.000001 ‘오차한계 ‘오차한계 cLow cLow==BS(CallPutFlag. r.r rAs AsDouble.01 ‘초기 ‘초기하한값 하한값 vHigh = 2 ‘초기 상한값 vHigh = 2 ‘초기 상한값 Epsilon = 0.X.r. S. T. T.T. vHihg) cHigh = BS(CallPutFlag.vLow) vLow) cHigh = BS(CallPutFlag.X. S.r. X. Double. BS(CallPutFlag.cHigh cHighAs AsDouble. Double. S. vHigh As Double. X. vHihg) vivi==vLow vLow++(price (price––cLow) cLow)* *(vHihg (vHihg–vLow –vLow) )/ /(cHihg (cHihg––cLow) cLow) Loop Loop Imvol Imvol==vivi End EndFunction Function .S.000001 Epsilon = 0.r. 내재변동성 추정 : 이분법(Bisection Method) Public PublicFunction Functionimvol(CallPutFlag imvol(CallPutFlagAs AsString.S.r. T.T. Double. T.X.r.T. r. BS(CallPutFlag. r. S. X. Double. vi) < Price Then vLow vLow==vivi Else Else vHihg vHihg==vivi cLow cLow==BS(CallPutFlag.T.S. vi As Double Dim vLow As Double.22.XXAs AsDouble. Double.T.vLow) vLow) cHigh = BS(CallPutFlag. vHigh As Double.vi)) vi))>>Epsilon Epsilon IfIf BS(CallPutFlag. S. vHigh) ViVi==vLow vLow++(price (price––cLow)*(vHigh-vLow) cLow)*(vHigh-vLow)/ /(cHigh (cHigh––cLow) cLow) Do DoWhile WhileAbs(priceAbs(price-BS(CallPutFlag. DOUBLE.01 0.

실행. 이 이 방법은 방법은 이분법에서와 이분법에서와 같이 같이 초기 초기 구간을 구간을 필요로 필요로 하지 하지 않는 않는 다는 다는 점과 점과 도함수를 도함수를 이용하기 이용하기 때문에 때문에 근사치에 근사치에 대한 대한 수렴속도가 수렴속도가 이분법에 이분법에 비해 비해 빠르다. . f ( x i )] ) θ x i+ 2 x i+ 1 x i X 뉴턴-랩슨 뉴턴-랩슨 방법은 방법은 수치해석적으로 수치해석적으로 근사해를 근사해를 찾는 찾는 방법중 방법중 하나임.23. 하나임. 그림에서와 그림에서와 같이 같이 초기 초기 추측값 추측값 Xi에 Xi에 해당하는 해당하는 f(Xi)의 f(Xi)의 접선 접선 g(X)를 g(X)를 이용 이용 하여 하여 g(x)=0을 g(x)=0을 만족하는 만족하는 Xi+1를 Xi+1를 찾는다.이러한 이용하며.이러한 과정은 과정은 추측값과 추측값과 접선의 접선의 해가 해가 오차 오차 허용한계에 허용한계에 들어 들어 올 올때 때 까지 까지 반복하여 반복하여 실행. 찾는다. 내재변동성 추정 : 뉴턴-랩슨(Newton Raphson Method) f(x ) f ( x i) f(x i+ 1 [x i. 이때의 이때의 해는 해는 다음 다음 접선방정식을 접선방정식을 구할때 구할때 이용하며. 빠르다.

RiskFreeRate. InitialValue.__ 0. BlackSchole(Spot.0.MaxTrial) MaxTrial) Dim InitialValue As Double Dim InitialValue As Double Dim DimTempError TempErrorAs AsDouble Double Dim TempPrice As Double Dim TempPrice As Double InitialValue InitialValue==Sqr(Abs(Log(Spot Sqr(Abs(Log(Spot/ /Strike) Strike)++__ Risk RiskFreeRate FreeRate* *Tau Tau) )*2*2/ /Tau) Tau) For ForI I== 11To ToMaxTrial MaxTrial TempPrice TempPrice==BlackScholes(Spot. InitialValue.MarketPrice.Tau.RiskFreeRate. Strike.PutCALL) PutCALL) TempError = TempPrice – MarketPrice TempError = TempPrice – MarketPrice IfIfTempError TempError<= <=Error ErrorThen Then ImpliedVolatility – InitialValue ImpliedVolatility – InitialValue Exit ExitFunction Function Else Else InitialValue InitialValue==InitialValue InitialValue––TempError TempError/ /__ BlackSchole(Spot. Tau. Strike.RiskFreeRate. MarketPrice.24.Strike.Tau.0.PutCall. Strike. Erroer.0.InitialValue.Tau. 내재변동성 추정 : 뉴턴-랩슨(Newton Raphson Method) Function FunctionImpliedVolatility(Spot. BlackScholes(Spot. Tau.Strike.InitialValue.Strike. Tau.PutCall PutCall&&“vega”) “vega”) End If End If Next NextI I ImpliedVolatility ImpliedVolatility==00 End EndFunction Function . ImpliedVolatility(Spot.RiskFreeRate. RiskFreeRate. RiskFreeRate.Erroer. PutCall.

Ross.Stephen StephenRoss. Model.Equal EqualProbability ProbabilityModel Model등 등 . 1979. Cox.25.John JohnCox. Binomial Tree를 이용한 옵션가격계산 ••1979.Mark MarkRubinstein에 Rubinstein에의해 의해도입됨 도입됨 ••Risk-Neutral Risk-NeutralValuation Valuation이용 이용 ••확률측도변화에 확률측도변화에의한 의한Real RealWorld와 World와Risk RiskNeutral NeutralWorld World대응 대응 ••미국식 미국식옵션 옵션등 등Path-Dependent한 Path-Dependent한옵션 옵션및 및Early EarlyExercise가 Exercise가있는 있는옵션 옵션가격 가격계산에 계산에유리 유리 ••Local LocalVolatility Volatility및 및Yield YieldCurve Curve적용 적용용이 용이 ••이후 이후성능 성능개선을 개선을위해 위해다양한 다양한응용 응용모델 모델등장 등장 => =>Trinomial TrinomialModel.

d < r < u – 상승시 주가 Su. Binomial Tree : 1기간 모형 • 가정 – 주식 S. 하락률 d. 단. 하락시 주가 Sd – 상승시 옵션가격 fu. 옵션 f. 무위험금리 r – 상승률 u.26. 하락시 옵션가격 fd – 1기간 투자 S0u fu S f S0d fd .

f = e-rT (Su Δ.fu • 하락시 포트폴리오 가치 : Sd Δ – fd • 초기포트폴리오 설정비 : S Δ. p = (e-rT– d) / ( u – d) 이때. p는 실제 주식의 상승확률과는 무관하며 Real World와 Risk Neutral World를 잇는 확률측도변환값. 옵션 매도: 1계약 – 국면별 포트폴리오 가치 • 상승시 포트폴리오 가치 : Su Δ.fu ) // Δ를 맨 위식에 대입 • f = S Δ (1 – u e-rT) + fu e-rT = e-rT[ p fu + (1-p)fd] 단. 0 < p < 1 이 성립하므로 확률과 유사한 특성을 갖는다 하지만. 또한 옵션 현재값(f)를 구할 때 실제 주식의 상승/하락 확률은 전혀 사용되지 않고 있음 => 위험 중립 .27. Binomial Tree : 1기간 모형 • 무위험 포트폴리오 구성 – 주식매수 : Δ 주.fu = Sd Δ – fd // 주가의 상승하락에 관계없이 가치가 같음 • Δ = (fu– fd)/(Su – Sd) // Δ는 위 식을 만족시키는 값 • S Δ.f – 위로 부터 • Su Δ.

2 u v Risk-neutral p 1.05 Timestep Discount factor 0.98 0.5 1.9995 Strike 100 One timestep before expiry Expiry 102 2 100 0. Binomial Tree : 1기간 모형 One step in the binomial model Asset Volatility 100 0.5125 Interest rate 0.024488 98 Color coding… 0 Stock Delta Option .01 0.02 0.28.

02 0.003588 98 0.756467 2.98 0.04 1 4.256017 0.5125 Interest rate 0. Binomial Tree : 다기간 모형 The tree Asset Volatility 100 0.517497 1.9995 Strike 100 a 1.1208 104.9608 0 96.96 0.1208 6.29.9592 99.514082 Stock Delta Option 97.9592 1.2 u v Risk-neutral p 1.1192 0 .574163 101.04 0 0 94.089975 102 0.489996 1.584069 100 0.0005 Color coding… Three timesteps before expiry Two timesteps before expiry One timestep before expiry Expiry 106.01 0.05 Timestep Discount factor 0.

Strike)) Next j Next n USPrice = V(0.1 V(j. 0 To NoSteps) ReDim V(0 To NoSteps.1) = Application. e) If s < e Then Payoff = e .1 V(j) = (p * V(j + 1) + (1 . NoSteps As Integer) ReDim s(0 To NoSteps. Binomial Code Function Price(Asset As Double.1) Next n For j = 0 To NoSteps V(j) = Payoff(s(j).Max((p * V(j + 1. n .s End Function .p) * V(j.d) / (u . n) + (1 . 0 To NoSteps) timestep = Expiry / NoSteps DiscountFactor = Exp(-IntRate * timestep) temp1 = Exp((IntRate + Volatility * Volatility) * timestep) temp2 = 0.1). Expiry As Double. Strike) Next j For j = 0 To NoSteps V(j. NoSteps).1) d=1/u p = (Exp(IntRate * timestep) . n) = u * s(j .p) * V(j)) _ * DiscountFactor Next j Next n Price = V(0) End Function For n = NoSteps To 1 Step -1 For j = 0 To NoSteps .1) Next j s(0.d) Function USPrice(Asset As Double.5 * (DiscountFactor + temp1) u = temp2 + Sqr(temp2 * temp2 .d) s(0) = Asset For n = 1 To NoSteps For j = n To 1 Step -1 s(j) = u * s(j . n)) _ * DiscountFactor. _ Strike As Double. _ Strike As Double. IntRate As Double. Expiry As Double.1) d=1/u p = (Exp(IntRate * timestep) . NoSteps As Integer) ReDim s(0 To NoSteps) ReDim V(0 To NoSteps) timestep = Expiry / NoSteps DiscountFactor = Exp(-IntRate * timestep) temp1 = Exp((IntRate + Volatility * Volatility) * timestep) temp2 = 0. n) = d * s(0.d) / (u .5 * (DiscountFactor + temp1) u = temp2 + Sqr(temp2 * temp2 . Payoff(s(j. 0) = Asset For n = 1 To NoSteps For j = n To 1 Step -1 s(j. Volatility As Double. NoSteps) = Payoff(s(j. n . n . 0) End Function Function Payoff(s. IntRate As Double. Volatility As Double. n . Strike) Next j For n = NoSteps To 1 Step -1 For j = 0 To NoSteps .30.1.1) Next j s(0) = d * s(0) Next n s(0.

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 사용 가능 – 이자율 등에서는 다른 분포를 사용함 .31.

1 dist = X * X + Y * Y Loop Until dist < 1 BoxMuller = X * Sqr(-2 * Log(dist) / dist) End Function .1 Y = 2 * Rnd() . MC Simulation을 이용한 옵션가격계산 Function BoxMuller() Randomize Do X = 2 * Rnd() .32.

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

상관관계가 큰 종목이나 바스켓이 포함될 경우에는 불안정할 수 있음 . Σ : correlation matrix – 연립방정식을 해를 구하기 위해 인수 Matrix를 LU 분해하는 방법 중 하나 – 양정부호 행렬에만 적용 가능 => Correlation Matrix에 적합함 – 단.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 = Σ 단.

03 0.161685 -0.41 0.45 0.13 0.28 0.134164 Product of M and M^T 0.12 0.13 0 0.06 0.001 0.061872 0.09 Matrix M 0.09 0.196086 -0.09 0.611889 0 0.09 0.193793 0.03 0.001 0.09 0.13 0.03 0.03 0.12 0.41 0. Cholesky Factorization 계산 사례 Input symmetric (positive definite) correlation matrix 0.13 0.12 -0.09 0.06 -0.03 0.67082 0.13 0.038084 0.001 -0.28 0.34 0 -0.492161 0 0 -0.09 0.014907 0.03 0.12 -0.03 0.34 0 -0.03 0.403711 0.13 0.089443 0.001 -0.06 0.044721 0.13 0 0.32 0 0 0 0 0.06 -0.32 .31103 0.581378 0 0 0 -0.34.09 0.13 0.45 0.

1) X = X . i) = X / M(i. 1 To n) For i = 1 To n For j = 1 To n a(i. Cholesky Factorization Code Function cholesky(Sigma As Object) Dim n As Integer Dim k As Integer Dim i As Integer Dim j As Integer Dim X As Double Dim a() As Double Dim M() As Double n = Sigma.Count ReDim a(1 To n. i) = Sqr(X) Else M(j.Value M(i. j) For k = 1 To (i . j) = Sigma.M(i. k) * M(j. 1 To n) ReDim M(1 To n. i) End If Next j Next i cholesky = M End Function .35.Columns. k) Next k If j = i Then M(i.Cells(i. j) = 0 Next j Next i For i = 1 To n For j = i To n X = a(i. j).

36. Performance 향상 방안 • Issue – MC Simulations의 정확성은 시행횟수가 많을수록 높다 (Sqrt(횟수)에 비례) – 시행횟수가 많을수록 계산시간이 오래 걸림 – 시행회수를 줄이면서 정확성을 높일 수 있는 방안 필요 • 방법 – Antithetic Variables – Control Variate Method .

37. Antithetic Variables • • • 원리 – 정규분포는 대칭성을 가짐 – 주가수익률은 정규분포를 함 ( 기본 가정) – 난수추출시 서로 다른 부호의 값을 동시에 추출 방법 – 난수 ε를 추출하였을 경우 – ε값도 동시에 사용함 – 이 경우 주가경로는 Drift를 축으로 하여 대칭의 형태를 보임 – 두 주가경로에 따라 평가한 값의 평균값을 사용 사례 – 실습 .

시뮬레이션에서 구한 값으로부터 유사(?)한 오차를 제거한 값으로 추정함 방법 – V1 추정값 = V1’ – V2’ + V2 – 단. closed form solution)을 알 수 있다면 시 뮬레이션에서 발생한 오차를 구할 수 있으며. 다른 상품에서도 유사한 오차가 발생한 것으로 보고. V1’: V1의 시뮬레이션해. V2: V2의 정확해 .38. Control Variate Method • • 원리 – 시뮬레이션을 이용하여. V2’: V2의 시뮬레이션해. 상관관계가 높은 두 파생상품의 가치(및 지표)를 계산 할 경우 각각에서 발생하는 오차도 높은 상관관계를 가짐 – 두 상품 중 한 상품의 정확한 값 ( 예.

End 감사합니다 .