Exemplo n.º 1
0
        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;
        }