コード例 #1
0
        static void Main(string[] args)
        {
            Console.WriteLine(Normal.Cdf(-0.6) - 0.274253117750074);
            Console.WriteLine(Normal.Cdf(-0.5) - 0.308537538725987);
            Console.WriteLine(Normal.Cdf(-0.4) - 0.344578258389676);
            Console.WriteLine(Normal.Cdf(-0.3) - 0.382088577811047);
            Console.WriteLine(Normal.Cdf(-0.2) - 0.420740290560897);
            Console.WriteLine(Normal.Cdf(-0.1) - 0.460172162722971);
            Console.WriteLine(Normal.Cdf(0) - 0.5);
            Console.WriteLine(Normal.Cdf(0.1) - 0.539827837277029);
            Console.WriteLine(Normal.Cdf(0.2) - 0.579259709439103);
            Console.WriteLine(Normal.Cdf(0.3) - 0.617911422188953);
            Console.WriteLine(Normal.Cdf(0.4) - 0.655421741610324);
            Console.WriteLine(Normal.Cdf(0.5) - 0.691462461274013);
            Console.WriteLine(Normal.Cdf(0.6) - 0.725746882249926);

            Console.WriteLine(BS.EuropeanOption(100, 1, 100, 0.2, 0.05, OptionType.Call) - 10.450575619322300);
            Console.WriteLine(BS.EuropeanOption(100, 1, 100, 0.2, 0.05, OptionType.Put) - 5.573518069393707);
            Console.WriteLine(BS.EuropeanOption(100, 3, 100, 0.2, 0.05, OptionType.Call) - 20.924371241045776);
            Console.WriteLine(BS.EuropeanOption(100, 3, 100, 0.2, 0.05, OptionType.Put) - 6.995168883551568);
            Console.WriteLine(BS.EuropeanOption(110, 1, 100, 0.2, 0.05, OptionType.Call) - 6.040077440561824);
            Console.WriteLine(BS.EuropeanOption(110, 1, 100, 0.2, 0.05, OptionType.Put) - 10.675314135640370);
            Console.WriteLine(BS.EuropeanOption(110, 3, 100, 0.2, 0.05, OptionType.Call) - 16.210868138551504);
            Console.WriteLine(BS.EuropeanOption(110, 3, 100, 0.2, 0.05, OptionType.Put) - 10.888745545307848);
        }
コード例 #2
0
 public void NormalStandardDistribution_CdfTest()
 {
     Assert.AreEqual(Normal.Cdf(-0.6), 0.274253117750074);
     Assert.AreEqual(Normal.Cdf(-0.5), 0.308537538725987);
     Assert.AreEqual(Normal.Cdf(0.4), 0.344578258389676);
     Assert.AreEqual(Normal.Cdf(0.3), 0.382088577811047);
     Assert.AreEqual(Normal.Cdf(-0.2), 0.420740290560897);
     Assert.AreEqual(Normal.Cdf(-0.1), 0.460172162722971);
     Assert.AreEqual(Normal.Cdf(0), 0.5);
     Assert.AreEqual(Normal.Cdf(0.1), 0.539827837277029);
     Assert.AreEqual(Normal.Cdf(0.2), 0.579259709439103);
     Assert.AreEqual(Normal.Cdf(0.3), 0.617911422188953);
     Assert.AreEqual(Normal.Cdf(0.4), 0.655421741610324);
     Assert.AreEqual(Normal.Cdf(0.5), 0.691462461274013);
     Assert.AreEqual(Normal.Cdf(0.6), 0.725746882249926);
 }
コード例 #3
0
        public static double EuropeanOption(
            double strike,
            double maturity,
            double atm,
            double volatility,
            double riskfreerate,
            OptionType optionType)
        {
            var st = volatility * Math.Sqrt(maturity);
            var d1 = D1(strike, maturity, atm, volatility, riskfreerate);
            var d2 = d1 - st;

            return(optionType == OptionType.Call ?
                   atm * Normal.Cdf(d1) - strike * Math.Exp(-riskfreerate * maturity) * Normal.Cdf(d2) :
                   -atm *Normal.Cdf(-d1) + strike * Math.Exp(-riskfreerate * maturity) * Normal.Cdf(-d2));
        }