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)); }
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); }
public override double Diffusion(double t, double x) { return(_isConstantVol ? _vol : _volSurf.GetValue(t, x)); }