Ejemplo n.º 1
0
double callPriceBS(const double S, const double K, const double T, const double r, const double sigma)
{
	double t = T/ (double)252.0 ;

	return norm_cdf(d_1(S,K,T,r,sigma)) * S - norm_cdf(d_2(S,K,T,r,sigma)) * K * exp((-1 *r )* (t));

}
Ejemplo n.º 2
0
// Pricing a Lookback European Put option
double lookback_put(const double& S,
                    const double& M,  // Maximum price of asset over period
                    const double& r,
                    const double& v,
                    const double& T) {
  double a1 = a_1(S,M,r,v,T);
  double a2 = a_2(S,M,r,v,T);
  double a3 = a_3(S,M,r,v,T);
  
  double term1 = -S * norm_cdf(-a1);
  double term2 = M * exp(-r*T) * norm_cdf(-a2);
  double mult = S*v*v/(2.0*r);
  double term3 = norm_cdf(a1) - exp(-r*T) * pow((M/S),((2*r)/(v*v))) * norm_cdf(a3);

  return term1 + term2 + mult * term3;
}
Ejemplo n.º 3
0
// Pricing a Lookback European Call option
double lookback_call(const double& S,
                     const double& m,  // Minimum price of asset over period
                     const double& r,
                     const double& v,
                     const double& T) {
  double a1 = a_1(S,m,r,v,T);
  double a2 = a_2(S,m,r,v,T);
  double a3 = a_3(S,m,r,v,T);

  double term1 = S * norm_cdf(a1);
  double term2 = m * exp(-r*T) * norm_cdf(a2);
  double mult = S*v*v/(2.0*r);
  double term3 = norm_cdf(-a1) - exp(-r*T) * pow((m/S),((2*r)/(v*v))) * norm_cdf(-a3);
  
  return term1 - term2 - mult * term3;
}
Ejemplo n.º 4
0
// An approximation to the cumulative distribution function
// for the standard normal distribution
// Note: This is a recursive function
double norm_cdf(const double& x) {
    double k = 1.0/(1.0 + 0.2316419*x);
    double k_sum = k*(0.319381530 + k*(-0.356563782 + k*(1.781477937 + k*(-1.821255978 + 1.330274429*k))));

    if (x >= 0.0) {
        return (1.0 - (1.0/(pow(2*M_PI,0.5)))*exp(-0.5*x*x) * k_sum);
    } else {
        return 1.0 - norm_cdf(-x);
    }
}
Ejemplo n.º 5
0
double putPriceBS(const double S, const double K, const double T, const double r, const double sigma)
{
	double t = T/ (double)252.0 ;

	return -S* norm_cdf(-d_1( S, K, T, r, sigma))+K*exp(-r*t) * norm_cdf(-d_2(S, K, T, r, sigma));
}