Пример #1
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;
}
Пример #2
0
Scalar bilinear_form(int n, double *wt, Func<Real> *u, Func<Real> *v, Geom<Real> *e, ExtData<Scalar> *ext)
{
  Scalar result = 0;
  for (int i=0; i < n; i++) {
    double x = e->x[i];
    double y = e->y[i];
    result += (a_11(x, y)*u->dx[i]*v->dx[i] +
               a_12(x, y)*u->dy[i]*v->dx[i] +
               a_21(x, y)*u->dx[i]*v->dy[i] +
               a_22(x, y)*u->dy[i]*v->dy[i] +
               a_1(x, y)*u->dx[i]*v->val[i] +
               a_2(x, y)*u->dy[i]*v->val[i] +
               a_0(x, y)*u->val[i]*v->val[i]) * wt[i];
  }
  return result;
}
Пример #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;
}
Пример #4
0
double CustomWeakFormGeneral::MatrixFormVolGeneral::value(int n, double *wt, Func<double> *u_ext[], Func<double> *u, 
                                                          Func<double> *v, Geom<double> *e, Func<double> **ext) const 
{
  double result = 0;
  for (int i=0; i < n; i++) {
    double x = e->x[i];
    double y = e->y[i];
    result += (a_11(x, y) * u->dx[i] * v->dx[i] +
               a_12(x, y) * u->dy[i] * v->dx[i] +
               a_21(x, y) * u->dx[i] * v->dy[i] +
               a_22(x, y) * u->dy[i] * v->dy[i] +
               a_1(x, y) * u->dx[i] * v->val[i] +
               a_2(x, y) * u->dy[i] * v->val[i] +
               a_0(x, y) * u->val[i] * v->val[i]) * wt[i];
  }
  return result;
}