示例#1
0
        public void VegaFacts()
        {
            var t   = 1.0;
            var k   = 100;
            var f   = 100;
            var vol = 0.32;
            var rf  = 0.05;
            var cp  = OptionType.P;

            //vega closely matches numerical estimate
            var PV1     = BlackFunctions.BlackPV(f, k, rf, t, vol - 0.00005, cp);
            var PV2     = BlackFunctions.BlackPV(f, k, rf, t, vol + 0.00005, cp);
            var vegaEst = (PV2 - PV1) / 0.0001 * 0.01;
            var vega    = BlackFunctions.BlackVega(f, k, rf, t, vol);

            Assert.Equal(vegaEst, vega, 6);

            //all else the same, more time==more vega
            var vegaNear = BlackFunctions.BlackVega(f, k, rf, t, vol);
            var vegaFar  = BlackFunctions.BlackVega(f, k, rf, t * 2, vol);

            Assert.True(vegaFar > vegaNear);

            //cases for zero vega
            vega = BlackFunctions.BlackVega(f, 0, rf, t, vol);
            Assert.Equal(0, vega, 8);

            vega = BlackFunctions.BlackVega(f, 1e6, rf, t, vol);
            Assert.Equal(0, vega, 8);
        }
示例#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;
        }
示例#3
0
 public void BlackGammaVega_Facts()
 {
     Assert.Equal(0.0, BlackFunctions.BlackGamma(0.1, 1.0, 0.5, 0.0, 0.001));
     Assert.Equal(0.0, BlackFunctions.BlackVega(0.1, 1.0, 0.5, 0.0, 0.001));
 }