Panda Project


  panda(2016-03-13 10:15:15, Hit : 3033, Vote : 90
 [자료] 블랙 숄즈 옵션공식의 이해와 소스

http://www.laborparty.kr/bd_member/567147
===================================
(위 글에서 퍼옴)

이 자료는 University of Illinois, at Urbana-Champaign의 Akashi, Pearson 교수의 자료, BBC
논픽션 등을 참고하여 작성한 것임. (2004. 7)

1. 블랙숄즈 이전의 역사

블랙숄즈가 옵션평가공식에 골몰한 1960년대는 옵션에 관하여 여러 가설들이 난무하였다.
당시 지배적이었던 접근법은 옵션을 효용이론으로 평가하고자 하던 방법으로서 1970년
두 번째로 노벨상을 받은 Paul Samuelson 등이 그 중심에 있었다.
이들은 일반 상품의 많을수록 좋다(the more, the better)라는 경제재 성격을 적용하여
옵션 역시 수량이 많아질수록 효용이 증가하는 것으로 보고 옵션가치를 평가하고자 하였다.
문제는 옵션투자에서 효용이란 위험에 대한 옵션 투자자들의 효용을 말하는 것인데,
이들의 효용은 위험에 대한 태도에 달려있어 어떤 투자자는 위험을 극도로 회피하려하여
위험에 큰 가치를 두고 있고, 다른 투자자는 위험에 별로 신경쓰지 않고 높은 투자수익만을
추구하려고 함으로써 위험에 대한 태도가 투자자간에 상이하였다는 점이었다.
이것은 이들의 효용이 동일하게 증감하지 않음으로써 전통적 경제이론을 적용해 옵션가치를
수요공급으로 평가할 수 없다는 말이 되고, 또한 모든 투자자들이 동의하는 하나의 옵션가치를
계산해낼 수 없다는 말이 된다. 학계가 이러한 벽에 부딪쳐 옵션가치 평가에 애를 먹던
1968년 무렵 학교를 졸업한지 얼마 안 된 Fischer Black과 막 MIT에서 경제학박사 학위를 받고
Chicago University의 경제학과에 부임한 Myron Scholes는 이런 옵션평가에 도전하기로
결정한다. Fischer Black은 MIT에서 응용수학박사를 받았으나, 졸업후 MIT 근처에 있는
Arther D. Little이란 경영컨설팅사에서 Jack Treynor 아래에서 일함으로써 재무이론을 실무로
배우고 있었다. 학교에서 경제학이나 재무론에 관하여 단 한 과목도 수강하지 않은 그가
펀드수익률 평가방법 등을 제시한 Treynor란 걸출한 인물 아래서 재무이론의 핵심을 실무와
연계해 지도받게 된 것이다. 그는 학회에서 Scholes를 만났고, Scholes는 Black의 천재성을
보고 둘 다 옵션평가에 관심이 있었던 차 1968년에 공동연구를 하기로 결심했던 것이다.

그런데 여기서 먼저 당시 옵션은 장외에서 거래되고 있었고 1973년 Chicago Board of Trade가 개설됨으로써 장내 옵션시장이 열리려던 시점이었다. 옵션에 대한 관심이 크게 높아지던
시점인 것이다. 그런데, 이러한 옵션은 주식가격 변동의 리스크를 헤지하는 방법으로 유망하다
는 것이 학계에서 주장되었고, 따라서 옵션의 적정가치를 결정하는 것이 관건이 되고 있었다.
사실 그 이전에는 주식가격 변동 위험을 과거 주가변동의 확률을 이용해 추정하려고 하였다.
즉 과거 주가변동의 확률범위를 구해 이를 이용함으로써 미래 주가변동의 확률을 구하려
하였으나, 그 정확성이 당시 일기예보 수준만도 못해 새로운 위험관리 수단의 필요성이 크게
요구되던 시점이었고, 그 대안으로서 옵션이 제기되고 있었다. 이러한 옵션의 중요성을 제기한
사람은 Paul Samuelson인데, 이는 그가 1955년 Paris University의 도서관에서 Louis
Bachelier란 사람이 1900년에 발표한 ‘Speculation Theory'란 석사학위 논문을 발견함으로써
시작된 것이다. Bachelier는 당시 수학과 석사과정 학생으로서 그 유명한 Poincarre 아래에서
수학을 연구하고 있었다.

그는 복잡한 방정식을 통해 주식시장이 random walk을 하고 있고 이러한 주식시장의 위험을
회피하기 위한 방법으로 option이란 금융계약을 제시함으로써 option시장의 출현을 선구자적
으로 제기하였다. 그는 option 공식을 누군가가 발견한다면 주식가격 변동의 위험을 완전히
제거할 수 있다고 주장했던 것이다. 그러나, 그의 가설은 그가 죽음으로써 무려 50년 이상을
도서관에서 잠자다 세계적 학자인 Samuelson과의 우연한 만남을 통해 빛을 보게 되었다.
Samuelson은 그 책의 영어 번역을 주선했고 그 책은 당시 학계에 큰 영향을 끼쳤던 것이다.
지금도 세계Bachelier협회가 1998년 창설되어 그의 업적을 기리고 있다.


2. 옵션의 종류와 옵션공식 맛보기

옵션이란, 만기까지 주식과 같은 기초자산(underlying asset)을 보유했을 때 사전에 약정한
행사가(strike price)가 만기시점의 기초자산 가격, 예로서 만기시 주가보다 크다면 또는 작다면
그 차이의 일정한 배수를 금전으로 지급하거나 받기로 하는 계약이다. 이러한 옵션에는 두가지
유형이 있다. 먼저 콜옵션(call option)은 특정일에 특정가격에 기초자산을 살 수 있는 권리이
며, 풋옵션(put option)은 역시 특정일에 특정가격에 기초자산을 팔 수 있는 권리이다.
특정일은 expiration date 또는 maturity라고 하며, 특정가격은 행사가로서 exercise price 또는 strike price라고 한다.

그런데, 만기일 이전에 행사할 수 있느냐 없느냐를 기준으로 유럽식 옵션과 미국식옵션으로
구분한다. 앞선 설명은 유럽식 옵션(European option)을 말하는 것이며, 미국식 옵션
(American option)은 만기일(expiration date) 이전이라도 행사 가능한 옵션이다.

콜옵션을 산 경우와 판 경우, 풋옵션을 산 경우와 판 경우의 이득을 그림으로 그리면 다음과
같다. 여기서 K는 행사가를, ST는 만기시점의 기초자산 가격을 말한다.



위 그림중 콜옵션을 산 경우를 보자. 만기까지 콜옵션을 보유하고 있을 때의 이득(payoff)은
만기시 기초자산가격과 옵션 행사가와의 차이금액이다. 한편, 만기시 기초자산가격이
옵션행사가보다 작다면 이득은 0이 될 것이다. 이를 식으로 표현하면 다음과 같을 것이다.


                    여기서 ST : 만기시 기초자산 가격
                                K : 옵션 행사가

이러한 이득식을 가지는 옵션의 가치는 어떻게 평가할까? 이에 대한 답이 다음과 같은 블랙
숄즈의 옵션평가공식(정확히는 무배당형 유럽형 옵션평가공식)이다.
여기서는 배당(dividend)처럼 자산에서 나오는 현금흐름은 없는 것으로 보았다.




다음으로 이 블랙숄즈 공식의 의미를 해석해 보자.

위 도표에서 알 수 있는 것처럼 블랙-숄즈 공식의 앞부분은 배당이 없다면
위험중립하(risk-neutral)의 기초자산(S)의 가격이 행사가격(K)보다 큰 조건하의 기초자산의
현재 기대값이 된다. 뒷부분은 현재가로 할인된 행사가격에 행사가격보다 기초자산의 가격이
클 확률을 곱해준 것으로, 이상의 우항의 앞부분에서 뒷부분을 뺀 것이 옵션가치가 된다.

이게 도대체 무슨 말인가? 다시 정리해보자. 기초자산의 가격이 행사가격보다 작다면 콜옵션의
가치는 0이 될 것이므로 우리는 이 경우를 생각할 필요가 없고, 기초자산 가격이 행사가격보다
큰 경우(conditional on S>K)만을 고려하면 된다. 이러한 경우에서 기초자산의 위험중립하 에
서의 현재가치가 바로 앞부분의 의미인 것이다. 이러한 기초자산의 현재가치는 그럼 바로
옵션의 가치인가? 아니다. max(S-K,0)의 공식에서 알 수 있는 것처럼 행사가격의 현재가치를
차감한 차액이 옵션의 가치가 되지 않겠는가? 따라서 뒤에 오는 차감항목은 행사가격이 0보다
큰 경우의 행사가격(이것은 미래 가격이다)의 현재가치가 되어야 할 것이다. 따라서, 기초자산
가격이 행사가격보다 클 확률에 행사가격을 곱한 후 이를 현재가치로 할인한 후 이 값으로 앞부
분에서 구한 기초자산의 현재가치를 차감한 것이 바로 옵션의 현재가치가 되는 것이다.
말하자면, 만기시점의 콜옵션의 가치식인 max(S-K,0)에서 S와 K의 현재가치를 구해
차감함으로써 콜옵션의 현재가치를 구한 것으로 볼 수 있다.
여기서 N(d1)은 의 의미이기도 한데, 이는 기초자산 가격의 순간적 변화에 대한 콜옵션
가격의 순간적 변화율로서, 옵션가격의 기초자산가격변화에 대한 민감도를 의미한다. N(d2)는
기초자산가격이 행사가격보다 클 확률을 의미한다. 따라서, N(-d2)는 행사가격이 기초자산가격
보다 클 확률이 되며, 이들간에는 다음 식이 성립한다.

한편, 엄밀하게 보자면 위의 (1)과 같은 이득식으로부터 (2)의 블랙숄즈 옵션공식이 어떻게
도출되었을까? 이의 수학적 전개과정은 어떻게 되는가?
이 답은 난해하므로 옵션에 깔린 기초 개념을 짚어보는 것이 차라리 차후 분양권 평가와 같은
실물 옵션 가치평가를 이해하고 그 한계를 아는데 도움이 될 것이다.

3. 유럽식 파생금융상품이란 무엇인가?

· 유럽식 파생금융상품이란 발행자와 보유자인 두 당사자간 금융계약이다.
· 계약은 거래가능한 기초자산(예: 주식)의 미래 움직임에 근거하여 발행된다.
· 옵션발행자는 예정된 미래만기일에 옵션 보유자에게 “이득”금액을 지급하여야 한다.
· 이득금액은 기초자산의 만기일의 미래가치에 좌우된다.
· 이 계약은 유동적인 금융시장에서 거래될 수 있다.
· 금융파생상품은 시장에서 거래되는데 기초자산의 미래가격에 대한 반대시각을 가진 거래자들
  이 존재하기 때문이다.

4. 단순한 예 - Forward 베팅

배당이 없는 IBM s주식이 금일 주당 $100이라 하자. 1년뒤 그것이 $150이 될거라 믿는 투자자
들이 있고, 한편에서는 $80로 하락할 것이라 믿는 투자자들이 있다고 하자. 그러면 긍정적
투자자들은 정확히 1년내 만기가 도래하는 다음과 같은 금융계약을 매입하는데 주저하지
않을 것이다:
                                        
여기서 S1 은 IBM주식의 1년뒤 가치를 나타내며, F1 은 1년뒤 만기시 이득을 의미한다.
이때 여기서 두가지 결과가 가능하다:

결과-I: 긍정적 투자자의 시장에 대한 예상이 옳았다:
그러면 S1 = $150이 될 것이다. 긍정적 투자자는 다음과 같은 양의 현금흐름을 (부정적인)
상대방으로부터 받게 된다.
                                    
결과-II: 긍정적 투자자의 시장에 대한 예상이 틀렸다:
그러면 S1 = $80이 될 것이다. 긍정적 투자자는 돈을 잃게되어 다음과 같은 부의 현금흐름을
가지게 된다(즉, 부정적 투자자에게 돈을 지급한다):

                                    
부정적 투자자의 시장에 대한 전망이 옳았다면 시장은 긍정적 투자자에게 $30을 빼앗아
그에게 주는 결과가 된다.

4.1 이득 도표

긍정적 투자자의 이 금융계약에 대한 이득함수는 다음과 같다.

                                        
금일의 주가는 S0 = $100이다. 1년뒤 주가인 S1은 미지수이다. 이값은 0에서 무한대까지 어떤
값이라도 될 수 있다. 따라서 이득은 하한경계를 -$110 하고 상한경계가 +무한대가 된다.
이러한 이득함수(즉, 여기서 F1)와 미래 기초자산(여기서 S1)의 가치를 그린 것을 이득도표
라고 한다.
                        

그림에서 기울기는 1이다.

4.2 "상태(States)"

금일 $100인 IBM주가가 1년뒤 $80이 되거나 $150이 되는 가상의 금융시장을 상상해보자.
이를 경제내 IBM 주식은 두가지 미래상태만이 있다고 말한다.
여기의 파생계약은 IBM주가의 함수이므로 파생상품은 -$30과 $40의 두가지의 미래 이득상태를
가지게 된다. 이러한 상태는 다음그림과 같은 상태도표로 표시할 수 있다.




4.3 “공정(FAIR)"가치에 대해

위 파생상품의 판매자(즉, 부정적 투자자)는 계약만료시까지 잠재적 위험을 갖게 된다.
만약, IBM 주식이 "up" 상태에서 끝나면 그는 긍정적 투자자에게 $40을 지급해야 한다.  
따라서, 판매자는 판매시점에 리스크 프리미엄 내지 계약에 들어가는 가격을 받을 권리가 있다.
여기에 두가지 고려할 점이 있다.

1. 금일의 계약에 대한 “합리적인”가격은 얼마인가?
2. 왜 그 가격은 “합리적”이거나 “공정”한가?

금융경제학자들은 이러한 질문을 해결하려 도전하였고, 이것이 블랙-숄즈와 머튼이 논문을
발표하기전 근 1세기동안 던져진 문제였던 것이다.
자, 우리가 다음과 같은 이상적 시장에 살고 있다고 가정하자. 주식 거래비용이나 bid-ask
spread가 없다. 우리는 주식을 분할하여 거래할 수 있으며 이 거래는 유동성이 있다.
내가 주식을 거래함으로써 주가를 조작할 수는 없다. 이러한 시장을 “"frictionless"시장이라
한다. 만약 이러한 비마찰시장내 여기 파생상품에 임의의 가격을 부여한다면 어떤 차익거래가
이루어질 수 있는가? 판매자가 파생상품의 가격으로 금일의 IBM주식 가격을 매긴다고 하자.
이것은 공정한 가격인가? 이 질문에 대답하기 위해 투자자처럼 생각해보자.
합리적 투자자는 파생상품 1주를 판 돈으로 IBM 주식 1주를 살 수도 있을 것이다.
그럼 그 투자자(판매자)는 1주의 IBM주식과 1개의 파생상품 매도계약으로 구성된
포트폴리오를 가지게 된다.

                                                      
여기서 Π는 포트폴리오의 가치를 말한다. 투자자는 파생상품을 팔고 받은 돈으로 즉시 1주의
IBM주식을 사는데 투자하였다.
따라서 그의 금일의 포트폴리오의 가치는 0이 된다.
                                                          
투자자는 파생상품의 만기인 1년뒤까지 이 포트폴리오를 보유하면, 1년뒤 그의 가치는
                    
가 될 것이다. 이 투자자는 1원도 자기돈을 쓰지 않고 미래의 보장된 이익을 거둔 것이다!
            

놀랍지 않은가! 단지 1주의 주식을 사고 1개의 파생상품계약을 팖으로써 투자자는 어떤 미래
상태에서도 확정된 이익을 얻게 된 것이다. 균형하의 경제는 이런 화폐제조기계 또는 공짜
점심을 허용하지 않는다. 그러므로 이경우에서 IBM 1주 가격은 이 파생상품 1계약의 가격으로
공정한 가격이 아닌 것이다. 파생상품의 가격이 적정하게 매겨지지 않는 것은 경제내에서 차익
거래 기회를 주는 것이 되는 것이다.
이러한 아이디어를 일반화해보면, 다음의 모든 도표는 재정기회를 갖는 포트폴리오를 나타내게
된다.



다음의 포트폴리오는 차익거래기회가 없는 경우이다.



다음으로 생각해봐야 할 두 번째 이슈가 있다. 파생상품의 매도자는 미래 만기시점에 계약
보유자에게 지급해야 하는 잠재적 위험을 감안하여 금일 공정가격을 받는다. 판매자는 물론
만기시 자기의 생돈을 지급하길 원하지는 않을 것이다. 그러므로 다음과 같은 의문을 가지는
것은 당연하겠다.
즉, 합리적 투자자가 적절히 다각화된 포트폴리오에 대한 파생상품을 팖으로써 받게 되는 돈을
금일의 시장에 투자하는 것이 가능한가?
이때 이 파생상품의 가치는 정확히 만기시 그 파생상품의 이득과 동일하다는 것을 가정한다.
만약 이런 투자가 가능하다면 파생상품 판매자는 그의 미래 이득의 위험을 성공적으로 헤지할
수 있을 것이다. 만기시점에서 그가 할 일이라곤 그의 포트폴리오를 시장에 팔고 파생상품
보유자에게 모든 수익을 지급하는 것이 된다.

앞의 사례를 다시 보자. 파생상품 보유자의 1년뒤 이득은
                                                    

이었다. 은행이 10%의 연이자율을 매긴다고 하자. 그럼 $100을 금일 빌리면 1년뒤 $110을 갚게
된다. 금일 IBM 주식 1주의 가격이 $100 이다. 판매자는 다음과 같은 헤지 전략을 선택할
것이다.

· 은행에서 $100를 연이자율 10% 에 빌린다.
· 1주의 IBM 주식을 금일 $100 에 사고 1년간 보유한다.
· 만기시 이 주식을 팔고 $150를 받거나 $80를 받을 것이다.
· 만약 $150를 받는다면, 파생상품 보유자에게 $40, 은행에 $110을 지급한다.
· 만약 $80을 받는다면, 파생상품 보유자로부터 $30를 받은 후 은행에 $110을 지급한다.

이 거래전략에서 파생상품 판매자는 절대적으로 보유위험이 사라지게 된다. 그렇다면 그는
어디서 수익을 거둘까?  그는 실제 시장에서 거래비용으로부터, 그리고 저평가되었거나
고평가된 파생상품을 거래함으로써 차익거래의 이득을 챙기는 것이다.

4.4 “공정한”가치의 정의

각각의 파생상품들마다 독특한 포트폴리오가 있다면 금융시장을 완전(complete)하다고 한다.
시장에 차익거래 기회가 없고 이상적 시장은 완전시장이라고 가정하자. 그럼 파생상품의 균형
“공정”가치는 금일의 헤징포트폴리오의 시장가격과 동등하여야 한다. 이것을 "law of one
price"라고 하는데, 이것은 “낮은 가격에서 1개의 상품을 사서 시장이 균형에 도달할 때까지
동시적으로 높은 가격에 그것을 판다”는 의미이다. 파생상품과 헤징 포트폴리오가 모두 만기일
에는 동일한 가치를 가지게 된 위의 결과를 생각해 보라.

사례-I: 헤징 포트폴리오가 파생상품보다 더 가격이 크다:
합리적 투자자라면 헤징 포트폴리오를 매도하고 파생상품을 살 것이다. 그는 은행에 그 차액을
예금할 것이다. 만기시 파생상품의 이득을 갖고 매도계약을 청산한다. 은행의 돈은 순수
차익거래이익이 된다.

사례-II: 헤징 포트폴리오가 파생상품보다 더 가격이 작다:
합리적 투자자라면 파생상품을 매도하고 헤징 포트폴리오를 살 것이다. 그는 은행에 그 차액을
예금할 것이다. 만기시 헤징포트폴리오를 매도한 후 파생상품을 청산한다. 은행의 돈은 순수
차익거래이익이 된다. 만기시 역시 은행의 돈은 그의 차익거래이익이 된다.

앞의 예에서 부정적 투자자인 파생상품 매도자는 은행에서 차입한 후 IBM주식 한 주에 투자함
으로써 자신의 포지션을 헤지할 수 있었다. 이번에는 부정적 투자자는 헤징을 위해 매도한
파생상품의 보유자에게 어떤 금전도 부과하지 않았다. 그러므로 “공정”가치는 $0이다.
다음의 상태도표는 헤징 포트폴리오가 차익거래기회가 없음을 보여준다.

                                                


이것은 사실 특수한 예이다. 일반적으로 파생상품은 양의 값을 가진다. 여기서 우리는 금융
“파생상품”과 동일한 의미가 아닌 금융“베팅”을 예로 든 것이다. 파생상품은 항상 비음의 현금
흐름이 발행자로부터 만기시 보유자에게 지급된다. 다시 한번 말하자면 파생상품이 균형 경제
하에 공정히 평가되었다면 어떠한 차익거래기회도 존재하지 않아야 한다. 차익거래기회의
부존재 가정은 강력한 가정이다. 완전시장에서는 파생상품의 가격이 단 하나밖에 없고,
이것은 모든 차익거래기회를 배제하며 미래 payoff(이득 또는 손실)을 완전히 헤지한다.
이러한 차익거래 기회가 없는 상태하의 가치를 파생상품의 “공정”가치라 한다.
지금까지 기초자산의 시장가격이 있는 조건하에서 파생상품의 공정가치를 결정하였다.
파생상품의 가치는 기초자산의 가격에 비례하여 움직이며, 기초자산의 시장가격의 함수인
것이다. 따라서 파생상품에는 기초자산과 독립한 절대적 가치란 없는 것이그러면 엑셀로 만든 시장에 옵션가격

변동식 응용


즉 값을주고 베스트 믹스를 추론하는것입니다. 다소 어려워 보여도 상당이 간단한 방식 입니다.
즉 수학이라고 연산되는것을 생각하시고요" 거기에 경제라는 개념을 덫붙입니다. 관념론적으로 더드는 이론주의는 21세기에는 허구 입니다.

즉 엑셀값에 본인이 원하는 시장수요 데이타를 입력하시고 본인이 원하는 데이타를 뽑아 낸다고 여기면 됩니다.
Option Explicit
Public Function CND(z As Double)
  Dim a1 As Double
  Dim a2 As Double
  Dim a3 As Double
  Dim a4 As Double
  Dim a5 As Double
  
  Dim L As Double
  Dim K As Double
  
  a1 = 0.31938153
  a2 = -0.356563782
  a3 = 1.781477937
  a4 = -1.821255978
  a5 = 1.330274429
  
  L = Abs(z)
  K = 1 / (1 + 0.2316419 * L)
  CND = 1 - 1 / Sqr(2 * 3.1415926) * Exp(-L ^ 2 / 2) * _
  (a1 * K + a2 * K ^ 2 + a3 * K ^ 3 + a4 * K ^ 4 + a5 * K ^ 5)
  
  If z < 0 Then
     CND = 1 - CND
  End If
End Function
Public Function BS(CallPutFlag As String, S As Double, X As Double, T As Double, _
                  R As Double, Sig As Double)
                      
  Dim d1 As Double
  Dim d2 As Double
  
  d1 = (Log(S / X) + (R + Sig ^ 2 / 2) * T) / (Sig * Sqr(T))
  d2 = d1 - Sig * Sqr(T)
  
  If UCase(CallPutFlag) = "C" Then
     BS = S * CND(d1) - X * Exp(-R * T) * CND(d2)
  Else
     BS = X * Exp(-R * T) * CND(-d2) - S * CND(-d1)
  End If
                      
End Function
Public Function ImVol(CallPutFlag As String, S As Double, X As Double, T As Double, _
                     R As Double, Price As Double) As Double
                    
  Application.Volatile (False)
                    
  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)
  
  While Abs(Price - BS(CallPutFlag, S, X, T, R, vi)) > Epsilon
        If BS(CallPutFlag, S, X, T, R, vi) < Price Then
           vLow = vi
        Else
           vHigh = vi
        End If
        cLow = BS(CallPutFlag, S, X, T, R, vLow)
        cHigh = BS(CallPutFlag, S, X, T, R, vHigh)
        vi = vLow + (Price - cLow) * (vHigh - vLow) / (cHigh - cLow)
  Wend
  
  ImVol = vi
                    
End Function
Public Function Delta(CallPutFlag As String, S As Double, X As Double, T As Double, _
                      R As Double, B As Double, Sig As Double)
                      
  Dim d1 As Double
  d1 = (Log(S / X) + (B + Sig ^ 2 / 2) * T) / (Sig * Sqr(T))
  
  If UCase(CallPutFlag) = "C" Then
     Delta = Exp((B - R) * T) * CND(d1)
  ElseIf UCase(CallPutFlag) = "P" Then
     Delta = Exp((B - R) * T) * (CND(d1) - 1)
  End If
                      
End Function
Public Function Gamma(S As Double, X As Double, T As Double, _
                     R As Double, B As Double, Sig As Double)
  Dim d1 As Double
  Dim ND As Double
  
  d1 = (Log(S / X) + (B + Sig ^ 2 / 2) * T) / (Sig * Sqr(T))
  ND = (1 / Sqr(2 * 3.1415926)) * (1 / Exp(d1 ^ 2 / 2))
  Gamma = (ND * Exp((B - R) * T)) / (S * Sig * Sqr(T))
  
End Function
                      
Public Function Theta(CallPutFlag As String, S As Double, X As Double, T As Double, _
                      R As Double, B As Double, Sig As Double)
  Dim d1 As Double
  Dim d2 As Double
  Dim ND As Double
  
  d1 = (Log(S / X) + (B + Sig ^ 2 / 2) * T) / (Sig * Sqr(T))
  d2 = d1 - Sig * Sqr(T)
  ND = (1 / Sqr(2 * 3.1415926)) * (1 / Exp(d1 ^ 2 / 2))
  If UCase(CallPutFlag) = "C" Then
     Theta = (-1) * (S * Exp((B - R) * T) * ND * Sig) / (2 * Sqr(T)) - (B - R) * S * Exp((B - R) * T) * CND(d1) _
             - R * X * Exp(-R * T) * CND(d2)
  Else
     Theta = (-1) * (S * Exp((B - R) * T) * ND * Sig) / (2 * Sqr(T)) + (B - R) * S * Exp((B - R) * T) * CND(-d1) _
             + R * X * Exp(-R * T) * CND(-d2)
  End If
  Theta = Theta / 365
  
End Function
                    
Public Function Vega(S As Double, X As Double, T As Double, _
                    R As Double, B As Double, Sig As Double)
  Dim d1 As Double
  Dim ND As Double
  
  d1 = (Log(S / X) + (B + Sig ^ 2 / 2) * T) / (Sig * Sqr(T))
  ND = (1 / Sqr(2 * 3.1415926)) * (1 / Exp(d1 ^ 2 / 2))
  
  Vega = (S * Exp((B - R) * T) * ND * Sqr(T)) / 100
  
End Function

[C 소스]
#include    <stdio.h>
#include    <math.h>
#include    <stdlib.h>
#include    <string.h>
#include    <time.h>
#include    <fcntl.h>
#include    <unistd.h>
#include    <errno.h>
#include    <values.h>
#include    <stropts.h>
#include    <sys/types.h>
#include    <sys/stat.h>
#include    <sys/ipc.h>
#include    <sys/msg.h>
#include    <sys/shm.h>
double dAbs(double num)
{
   if (num < 0.) return -1. * num ;
   else return num ;
}
/* ----------------------------------------------------------------------------
  블랙숄즈공식에 필수적으로 쓰이는 누적정규분포값을 근사치로 계산하는 함수
  ---------------------------------------------------------------------------- */
double CND(double z)
{
   double a1 ;
   double a2 ;
   double a3 ;
   double a4 ;
   double a5 ;
  
   double L ;
   double K ;
  
   double result ;
  
   a1 = 0.31938153 ;
   a2 = -0.356563782 ;
   a3 = 1.781477937 ;
   a4 = -1.821255978 ;
   a5 = 1.330274429 ;
  
   L = dAbs(z) ;
   K = 1. / (1. + 0.2316419 * L) ;
  
   result = 1. - 1. / sqrt(2. * 3.1415926) * exp(-pow(L, 2.) / 2.)
          * (a1 * K + a2 * pow(K, 2.) + a3 * pow(K, 3.) + a4 * pow(K, 4.) + a5 * pow(K, 5.)) ;
  
   if (z < 0.) result = 1. - result ;
  
   return result ;
}
/* ----------------------------------------------------------------------------
   옵션이론가 계산 - 블랙숄즈공식
  ----------------------------------------------------------------------------
   CallPutFlag : Call/Put 구분 - ex) C or P
   S : KOSPI200 현재(예상)가   - ex) 185.15
   X : 행사가격                - ex) 187.5
   T : 잔존일수                - ex) 잔존일수가 3일인 경우 3/365
   R : 무위험이자율            - ex) 금리가 4.94%일 경우 0.0494
   Sig : 변동성                - ex) 변동성이 23.02%일 경우 0.2302
  ---------------------------------------------------------------------------- */
double BS(char CallPutFlag, double S, double X, double T, double R, double Sig)
{
   double d1 ;
   double d2 ;
  
   double result ;
  
   d1 = (log(S / X) + (R + pow(Sig, 2.) / 2.) * T) / (Sig * sqrt(T)) ;
   d2 = d1 - Sig * sqrt(T) ;
  
   if (CallPutFlag == 'C' || CallPutFlag == 'c')
       result = S * CND(d1) - X * exp(-R * T) * CND(d2) ;
   else
       result = X * exp(-R * T) * CND(-d2) - S * CND(-d1) ;
  
   return result ;
}

/* ----------------------------------------------------------------------------
   내재변동성 계산 - 블랙숄즈공식 이용
  ----------------------------------------------------------------------------
   CallPutFlag : Call/Put 구분 - ex) C or P
   S : KOSPI200 현재(예상)가   - ex) 185.15
   X : 행사가격                - ex) 187.5
   T : 잔존일수                - ex) 잔존일수가 3일인 경우 3/365
   R : 무위험이자율            - ex) 금리가 4.94%일 경우 0.0494
   Price : 옵션현재가          - ex) 2.1, 0.03, ...
  ---------------------------------------------------------------------------- */
double ImVol(char CallPutFlag, double S, double X, double T, double R, double Price)
{
   double vLow, vHigh, vi ;
   double cLow, cHigh, Epsilon ;
  
   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) ;
  
   while( dAbs(Price - BS(CallPutFlag, S, X, T, R, vi)) > Epsilon )
   {
        if (BS(CallPutFlag, S, X, T, R, vi) < Price)
           vLow = vi ;
        else
           vHigh = vi ;
        cLow = BS(CallPutFlag, S, X, T, R, vLow) ;
        cHigh = BS(CallPutFlag, S, X, T, R, vHigh) ;
        vi = vLow + (Price - cLow) * (vHigh - vLow) / (cHigh - cLow) ;
   }
  
   return vi ;
}

double Delta(char CallPutFlag, double S, double X, double T, double R, double B, double Sig)
{
   double d1 ;
   double result ;
  
   d1 = (log(S / X) + (B + pow(Sig, 2.) / 2.) * T) / (Sig * sqrt(T)) ;
  
   if (CallPutFlag == 'C' || CallPutFlag == 'c')
       result = exp((B - R) * T) * CND(d1) ;
   else
       result = exp((B - R) * T) * (CND(d1) - 1.) ;
  
   return result ;
}

double Gamma(double S, double X, double T, double R, double B, double Sig)
{
   double d1 ;
   double ND ;
   double result ;
  
   d1 = (log(S / X) + (B + pow(Sig, 2.) / 2.) * T) / (Sig * sqrt(T)) ;
   ND = (1. / sqrt(2. * 3.1415926)) * (1. / exp(pow(d1, 2.) / 2.)) ;
   result = (ND * exp((B - R) * T)) / (S * Sig * sqrt(T)) ;
  
   return result ;
}
double Theta(char CallPutFlag, double S, double X, double T, double R, double B, double Sig)
{
   double d1 ;
   double d2 ;
   double ND ;
   double result ;
  
   d1 = (log(S / X) + (B + pow(Sig, 2.) / 2.) * T) / (Sig * sqrt(T)) ;
   d2 = d1 - Sig * sqrt(T) ;
   ND = (1. / sqrt(2. * 3.1415926)) * (1. / exp(pow(d1, 2.) / 2.)) ;
  
   if (CallPutFlag == 'C' || CallPutFlag == 'c')
       result = (-1.) * (S * exp((B - R) * T) * ND * Sig) / (2. * sqrt(T)) - (B - R) * S * exp((B - R) * T) * CND(d1)
              - R * X * exp(-R * T) * CND(d2) ;
   else
       result = (-1.) * (S * exp((B - R) * T) * ND * Sig) / (2. * sqrt(T)) + (B - R) * S * exp((B - R) * T) * CND(-d1)
              + R * X * exp(-R * T) * CND(-d2) ;
  
   return (result / 365.) ;
}                      
double Vega(double S, double X, double T, double R, double B, double Sig)
{
   double d1 ;
   double ND ;
   double result ;
  
   d1 = (log(S / X) + (B + pow(Sig, 2.) / 2.) * T) / (Sig * sqrt(T)) ;
   ND = (1. / sqrt(2. * 3.1415926)) * (1. / exp(pow(d1, 2.) / 2.)) ;
  
   result = (S * exp((B - R) * T) * ND * sqrt(T)) / 100. ;
  
   return result ;
}


즉 소스를 보시면 좀 이해가 되실듯 개념을 보시면 어렵게 느겨 지시겟지만 간단이 여기면 됩니다. 시장에 안정화를 위해서 어느 한지점에 곡선에 완만한 기울기를 구한다고 여기면 됩니다. 시장경제를  
지금 이루는것은 관념적인 하이에커 케인즈가 아닌 수학적인 해석에 수치적인 접근이 현제는 있을분임을 이해하시고 나중에라도 접근해 보세요" 본인에 플라스 마이너스 자산에대해서도 한눈에 알수 있습니다. 이것이 세계를 현제에 시장을 돌고 돌게 된답니다. 주식시장을가도 컴퓨터를 보아도 EC거래를 보아도 모든게
블랙숄즈 모형으로 되어 있음을 알게 되실것입니다.

즉 블랙숄즈를 이해 못하는자. 경제를  말하는것은 21세기에는 사기꿈에 해당되겠죠" 거기에 시물라시옹
이론ㅁ을 덫분인다면 21세기 시장 경제가 네트워크로 어떻게 돌아가는지 그리고 그게 나 개인과 엄청나게 연관되고 카드를 계산하던 신용카드를 계산하던  과일을 사던 맞물려 있음을 아게 되실것입니다.
시장은 생활 입니다.




[관심자료] 배당과 가치평가, 정규분포의 표준화, 배당모형,PER PBR ROE, 밸류에이션
[관심자료] 텔레그램

Copyright 1999-2023 Zeroboard / skin by zero
  copyright ⓒ 2005 ZIP365.COM All rights reserved