티스토리 뷰
Switch/case를 이용한 European OPtion Pricing 계산기(Black-Scholes Model 이용)
remings 2008. 7. 28. 21:17// Switch/case를 이용한 European OPtion Pricing 계산기(Black-Scholes Model 이용)
// by remings(http://remings.tistory.com)
// For my C++ Educational Purpose
#include <iostream>
#include <cmath>
using namespace std;
//Cumulative Normal Distribution Code
double N(const double x)
{
const double b1 = 0.319381530;
const double b2 = -0.356563782;
const double b3 = 1.781477937;
const double b4 = -1.821255978;
const double b5 = 1.330274429;
const double p = 0.2316419;
const double c = 0.39894228;
if(x >= 0.0) {
double t = 1.0 / ( 1.0 + p * x );
return (1.0 - c * exp( -x * x / 2.0 ) * t *
( t *( t * ( t * ( t * b5 + b4 ) + b3 ) + b2 ) + b1 ));
}
else {
double t = 1.0 / ( 1.0 - p * x );
return ( c * exp( -x * x / 2.0 ) * t *
( t *( t * ( t * ( t * b5 + b4 ) + b3 ) + b2 ) + b1 ));
}
}
int main()
{
char CallPutFlag; // call, put 결정
double X,S,r,sig,T;
double eCallPrice=0, ePutPrice=0;
double d1=0, d2=0;
double Nd1c=0, Nd2c=0;
double Nd1p=0, Nd2p=0;
cout<<"어떤 옵션을 계산하고 싶으신가요?\n";
cout<<"콜옵션일 경우 'c' , 풋옵션일 경우 'p'를 입력해 주십시요=>";
cin>>CallPutFlag;
switch(CallPutFlag)
{
case 'c':
{
cout<<"콜옵션을 선택하셨군요!!"<<endl;
cout<<"아래에 인수를 넣어주세요\n";
cout<<"X : ";
cin>>X;
cout<<"S : ";
cin>>S;
cout<<"r : ";
cin>>r;
cout<<"sig : ";
cin>>sig;
cout<<"T : ";
cin>>T;
int DiffCall;
DiffCall = S-X;
if(DiffCall<=0)
{
cout<<"이 콜 옵션은 OTM 입니다\n";
break;
}
// European Call Option 의 Analytic Equation
d1 = (log(S/X)+(r-0.5*sig*sig)*T) / (sig*sqrt(T));
d2 = d1-sig*sqrt(T);
Nd1c = N(d1);
Nd2c = N(d2);
eCallPrice = S*Nd1c - X*exp(-r*T)*Nd2c;
cout<<"European Call Option Price is ";
cout<<eCallPrice<<endl;
break;
}
case 'p':
{
cout<<"풋옵션을 선택하셨군요!!"<<endl;
cout<<"아래에 인수를 넣어주세요\n";
cout<<"X : ";
cin>>X;
cout<<"S : ";
cin>>S;
cout<<"r : ";
cin>>r;
cout<<"sig : ";
cin>>sig;
cout<<"T : ";
cin>>T;
int DiffPut;
DiffPut = X-S;
if(DiffPut<=0)
{
cout<<"이 풋 옵션은 OTM 입니다\n";
break;
}
// European Put Option 의 Analytic Equation
d1 = (log(S/X)+(r-0.5*sig*sig)*T) / (sig*sqrt(T));
d2 = d1-sig*sqrt(T);
Nd1p = N(-d1);
Nd2p = N(-d2);
ePutPrice = X*exp(-r*T)*Nd2p - S*Nd1p;
cout<<"European Put Option Price is ";
cout<<ePutPrice<<endl;
break;
}
return 0;
}
}
'Language > C' 카테고리의 다른 글
이차원 동적 배열 설정 (0) | 2009.01.04 |
---|---|
VS2005 에서 VS2008 로 넘어갈때의 팁 (0) | 2008.09.01 |
Financial Numerical Recipes in C ++. (0) | 2008.08.12 |
Exotic option valuation (0) | 2008.08.12 |
[while] 중첩 while을 이용한 구구단 (0) | 2008.07.28 |
- Total
- Today
- Yesterday
- 포트폴리오
- finance
- JPY
- 금융공학
- recession
- 꿀떡이
- 가을
- random gereragtor
- 리보중단
- Volatility Ratio
- 세식구
- VBA
- computational finance
- CHF
- 회고2023
- Risk Free Rate
- market convention
- 금융수학
- 어렵다크레딧
- XAG
- Fallback rate
- 유동성최악
- SOFR
- Linear Gaussian Model
- 와인
- mathematical finance
- financial
- RfR
- LG
- 크레딧투자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |