public double CDF(DateTime expiry, double fwd, double strike) { var t = TimeBasis.CalculateYearFraction(OriginDate, expiry); var vol = GetVolForAbsoluteStrike(strike, expiry, fwd); var nu = vol * Sqrt(t); (var d1, var d2) = BlackFunctions.D1d2(fwd, strike, t, vol); var vega = BlackFunctions.BlackVega(fwd, strike, 0.0, t, vol) / 0.01; var digi = BlackFunctions.BlackDigitalPV(fwd, strike, 0.0, t, vol, OptionType.P); var dvdk = Dvdk(strike, expiry, fwd); return(digi + vega * dvdk); //var dk = fwd * 1e-10; //var volU = GetVolForAbsoluteStrike(strike + dk, expiry, fwd); //var volD = GetVolForAbsoluteStrike(strike - dk, expiry, fwd); //var pU = BlackFunctions.BlackPV(fwd, strike + dk, 0.0, t, volU, OptionType.P); //var pD = BlackFunctions.BlackPV(fwd, strike - dk, 0.0, t, volD, OptionType.P); //var dPdK = (pU - pD) / (2.0 * dk); //return dPdK; }