public static double pricingVol(IVolSurface volSurf, Date exerciseDate, IOption option, double spot)
 {
     return(option.IsMoneynessOption ?
            //moneyness option , strike i.e. 120% of initialSpot
            volSurf.GetValue(exerciseDate, option.Strike * option.InitialSpotPrice, spot):
            volSurf.GetValue(exerciseDate, option.Strike, spot));
 }
Example #2
0
        public override double Drift(double t, double x, double dt)
        {
            var sigma  = Diffusion(t, x);
            var sigmaX = _isConstantVol ? _fxVol : _fxVolSurf.GetValue(t, 0.0);

            return(_isConstantRate
                                ? (_r - _q - _correlation * sigma * sigmaX - 0.5 * sigma * sigma)
                                : _spotRateCurve.GetInstantaneousForwardRate(t)
                   - _dividendCurve.GetInstantaneousForwardRate(t)
                   - _correlation * sigma * sigmaX
                   - 0.5 * sigma * sigma);
        }
Example #3
0
 public override double Diffusion(double t, double x)
 {
     return(_isConstantVol ? _vol : _volSurf.GetValue(t, x));
 }