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

            //zero barrier knock-in down is worthless
            var PV = BlackFunctions.BarrierOptionPV(f, k, rf, t, vol, cp, b, BarrierType.KI, BarrierSide.Down);

            Assert.Equal(0.0, PV, 10);

            //zero barrier knock-in up is worth vanilla
            var vanillaPV = BlackFunctions.BlackPV(f, k, rf, t, vol, cp);

            PV = BlackFunctions.BarrierOptionPV(f, k, rf, t, vol, cp, b, BarrierType.KI, BarrierSide.Up);
            Assert.Equal(vanillaPV, PV, 10);

            //ki forward is worth same as fwd
            b = 100;
            k = 110;
            var PVc   = BlackFunctions.BarrierOptionPV(f, k, rf, t, vol, OptionType.C, b, BarrierType.KI, BarrierSide.Down);
            var PVp   = BlackFunctions.BarrierOptionPV(f, k, rf, t, vol, OptionType.P, b, BarrierType.KI, BarrierSide.Down);
            var df    = Exp(-rf * t);
            var fwdPV = (f - k) * df;

            Assert.Equal(fwdPV, PVc - PVp, 10);
        }