コード例 #1
0
        public void DigitalFacts()
        {
            var t   = 1.0;
            var f   = 100;
            var vol = 0.32;
            var rf  = 0.0;
            var cp  = OptionType.C;
            var k   = 110;

            var digiPV   = BlackFunctions.BlackDigitalPV(f, k, rf, t, vol, cp);
            var spread   = 0.0001;
            var expected = (BlackFunctions.BlackPV(f, k, rf, t, vol, cp) - BlackFunctions.BlackPV(f, k + spread, rf, t, vol, cp)) / spread;

            Assert.Equal(expected, digiPV, 6);

            var iv = BlackFunctions.BlackDigitalImpliedVol(f, k, rf, t, digiPV, cp);

            Assert.Equal(vol, iv, 6);
        }
コード例 #2
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;
        }