BS期权定价(C++) - 小众知识

BS期权定价(C++)

2014-11-05 17:18:43 苏内容
  标签: 期权/定价/CPP
阅读:5805
#include <cmath> // mathematical C library
using namespace std;
double N(const double& z); // declare cumulative distribution function.
 
//欧式看涨期权:
double option_price_call_black_scholes(const double& S,
           const double& K,
           const double& r,
           const double& sigma,
           const double& time) // time to maturity
{
     double time_sqrt = sqrt(time);
     double d1 = (log(S/K)+r*time)/(sigma*time_sqrt)+0.5*sigma*time_sqrt;
     double d2 = d1-sigma*time_sqrt;
     return S*N(d1)-K*exp(-r*time)*N(d2);
};
 
//欧式看跌期权:
double option_price_put_black_scholes(const double& S,
           const double& K,
           const double& r,
           const double& sigma,
           const double& time) // time to maturity
{
     double time_sqrt = sqrt(time);
     double d1 = (log(S/K)+r*time)/(sigma*time_sqrt)+0.5*sigma*time_sqrt;
     double d2 = d1-sigma*time_sqrt;
     return K*exp(-r*time)*N(-d2)-S*N(-d1);
};
 
//累积概率函数(标准正态分布)
double N(const double& z) {
    if (z >  6.0) { return 1.0; }; // this guards against overflow
    if (z < -6.0) { return 0.0; };
    double b1 =  0.31938153;
    double b2 = -0.356563782;
    double b3 =  1.781477937;
    double b4 = -1.821255978;
    double b5 =  1.330274429;
    double p  =  0.2316419;
    double c2 =  0.3989423;
    double a=fabs(z);
    double t = 1.0/(1.0+a*p);
    double b = c2*exp((-z)*(z/2.0));
    double n = ((((b5*t+b4)*t+b3)*t+b2)*t+b1)*t;
    n = 1.0-b*n;
    if ( z < 0.0 ) n = 1.0 - n;
    return n;
};
扩展阅读
相关阅读
© CopyRight 2010-2021, PREDREAM.ORG, Inc.All Rights Reserved. 京ICP备13045924号-1