public double volatility(double x) { switch (volatilityType_) { case VolatilityType.ShiftedLognormal: return(Utils.shiftedSabrVolatility(x, forward_, t_, params_[0].Value, params_[1].Value, params_[2].Value, params_[3].Value, shift_.Value, approximationModel_)); case VolatilityType.Normal: return(Utils.shiftedSabrNormalVolatility(x, forward_, t_, params_[0].Value, params_[1].Value, params_[2].Value, params_[3].Value, shift_.Value)); default: return(Utils.sabrVolatility(x, forward_, t_, params_[0].Value, params_[1].Value, params_[2].Value, params_[3].Value)); } }
protected override double volatilityImpl(double strike) { double vol; if (volatilityType_ == VolatilityType.ShiftedLognormal) { vol = Utils.shiftedSabrVolatility(strike, forward_, exerciseTime(), alpha_, beta_, nu_, rho_, shift_); } else { vol = Utils.shiftedSabrNormalVolatility(strike, forward_, exerciseTime(), alpha_, beta_, nu_, rho_, shift_); } return(vol); }