Example #1
0
double BS::callFXOptionPrice() const{
    
    double cdfn1 = normalCDF(d1);
    double cdfn2 = normalCDF(d2);
    
    return S*exp(-rf*(T-t))*cdfn1 - E*exp(-rd*(T-t))*cdfn2;
}
Example #2
0
double BS::putFXOptionPrice() const{
    
    double cdfn1 = normalCDF(-d1);
    double cdfn2 = normalCDF(-d2);
    
    return E*exp(-rd*(T-t))*cdfn2 - S*exp(-rf*(T-t))*cdfn1;
}
Example #3
0
// Compute gamma cdf by a normal approximation
static double gnorm(double a, double x)
{
	double p, sx;

	if (x <= 0.0 || a <= 0.0)
		return 0.0;
	else {
		sx = sqrt(a) * 3.0 *
			(pow(x / a, 1.0 / 3.0) + 1.0 / (a * 9.0) - 1.0);
		return normalCDF(sx);
	}
}
Example #4
0
static double normalizer(const Param &a, const Param &b) {
    double p1 = a.p;
    double p2 = b.p;
    double u1 = a.u;
    double u2 = b.u;
    double s1 = a.s;
    double s2 = b.s;
    double sum = 0;
    for(int r1=-6; r1 <=6; r1++) {
        for(int r2=-6; r2 <=6; r2++) {
            double u1_n = u1+r1*2*PI;
            double u2_n = u2+r2*2*PI;
            double top = exp(-0.5*((u1_n-u2_n)*(u1_n-u2_n))/(s1*s1+s2*s2));
            double bot = sqrt(2*PI*(s1*s1+s2*s2));
            double u_new = (u1_n*s2*s2+u2_n*s1*s1)/(s2*s2+s1*s1);
            double s_new = (s1*s2)/sqrt(s1*s1+s2*s2);
            sum += (top/bot) * (normalCDF(PI,u_new,s_new)-normalCDF(-PI,u_new,s_new));
        }
    }
    return p1*p2*sum;
}
Example #5
0
/**
 * @brief Normal cumulative distribution function: In-database interface
 */
AnyType
normal_cdf::run(AnyType &args) {
    return normalCDF(args[0].getAs<double>());
}