C++:
***************************************************************************************
class StatUtility
{
public:
double normalCalc(double d);
private:
double d;
};
*****************************************************************************************
#pragma once
#include <iostream>
#include <string>
#include <iomanip>
#include <cmath>
#include "StatUtility.h"
using namespace std;
#define PI 3.1415926535897932384626433832795028841968
double StatUtility::normalCalc(double d)
{
const double a1 = 0.319381530;
const double a2 = -0.356563782;
const double a3 = 1.781477937;
const double a4 = -1.821255978;
const double a5 = 1.330274429;
const double gamma = 0.2316419;
const double k1 = 1 / (1 + gamma * d);
const double k2 = 1 / (1 - gamma*d);
const double normalprime = (1 / (sqrt(2 * PI)))*exp(-d * d / 2);
double value = 0.0;
double h = 0.0;
if (d >= 0)
value = 1 - normalprime * (a1*k1 + a2 * pow(k1, 2) + a3 * pow(k1, 3) + a4 * pow(k1, 4) +
a5 * pow(k1, 5));
else
value = normalprime * (a1*k2 + a2 * pow(k2, 2) + a3 * pow(k2, 3) + a4 * pow(k2, 4) +
a5 * pow(k2, 5));
return value;
}
**********************************************************************************************************************
#pragma once
class BlackScholesModel
{
public:
double calcBSPutPrice(double vol, double rate, double div,
double strike, double price, double T);
private:
double vol;
double rate;
double div;
double strike;
double price;
double T;
};
******************************************************************************************
#pragma once
class BlackScholesModel
{
public:
double calcBSPutPrice(double vol, double rate, double div,
double strike, double price, double T);
private:
double vol;
double rate;
double div;
double strike;
double price;
double T;
};
**************************************************************************************************
#include "statUtility.h"
#include "normalCalc.h"
#include "put.h"
using namespace std;
StatUtility util2;
StatUtility util3;
double BlackScholesModel::calcBSPutPrice(double vol, double rate, double div,
double strike, double price, double T)
{
double prob1;
double prob2;
double putprice;
double d1, d2;
d1 = (log(price / strike) + (rate - div + (vol)*(vol) / 2)*T) / (vol*sqrt(T));
d2 = d1 - vol*sqrt(T);
prob1 = util2.normalCalc(-d1);
prob2 = util3.normalCalc(-d2);
putprice = strike * exp(-rate * T)*prob2 - price*exp(-div * T)*prob1;
return putprice;
}
***************************************************************************************************
#include "StatUtility.h"
#include "normalCalc.h"
#include "call.h"
using namespace std;
double BlackScholesModel1::calcBSCallPrice(double vol, double rate, double div,
double strike, double price, double T)
{
StatUtility util;
StatUtility util1;
double prob1;
double prob2;
double d1, d2;
double callprice;
d1 = (log(price / strike) + (rate - div + (vol)*(vol) / 2)*T) / (vol*sqrt(T));
d2 = d1 - vol*sqrt(T);
prob1 = util.normalCalc(d1);
prob2 = util1.normalCalc(d2);
callprice = price * exp(-div * T)*prob1 - strike*exp(-rate * T)*prob2;
return callprice;
}
**********************************************************************************************
#include "StatUtility.h"
#include "normalCalc.h"
#include "call.h"
using namespace std;
double BlackScholesModel1::calcBSCallPrice(double vol, double rate, double div,
double strike, double price, double T)
{
StatUtility util;
StatUtility util1;
double prob1;
double prob2;
double d1, d2;
double callprice;
d1 = (log(price / strike) + (rate - div + (vol)*(vol) / 2)*T) / (vol*sqrt(T));
d2 = d1 - vol * sqrt(T);
prob1 = util.normalCalc(d1);
prob2 = util1.normalCalc(d2);
callprice = price * exp(-div * T)*prob1 - strike * exp(-rate * T)*prob2;
return callprice;
}
**********************************************************************************************
#pragma once
class BlackScholesModel
{
public:
double calcBSCallPrice(double vol, double rate, double div,
double strike, double price, double T);
private:
double vol;
double rate;
double div;
double strike;
double price;
double T;
};
Last edited: