Exemple #1
0
        static void Main(string[] args)
        {
            //input needed information from keyboard
            Console.WriteLine("Input spot price of underlying asset:");
            double spotPrice = Convert.ToDouble(Console.ReadLine());
            int    oType;

            do
            {
                Console.WriteLine("Input European option type (0 for call, 1 for put):");
                oType = Convert.ToInt32(Console.ReadLine());
            }while (oType != 0 & oType != 1);
            OptionType optionType = (oType == 0 ? OptionType.Call : OptionType.Put);

            Console.WriteLine("Input option strike price:");
            double strikePrice = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Input time to maturity of this option:");
            double timeToMaturity = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Input drift parameter for brownian motion:");
            double Mu = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Input volatility parameter for brownian motion:");
            double sigma = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Input number of scenarios generated by MC simulation:");
            int numOfScenarios = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Input number of time steps for Euler discretization:");
            int timeSteps = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Input whether to use antithetic variance reduction technique " +
                              "(true for yes,false for no): ");
            bool                  antithetic = Convert.ToBoolean(Console.ReadLine());
            EuropeanOption        Option     = new EuropeanOption(timeToMaturity, strikePrice, optionType);
            EulerSchemeForBSModel Euler      = new EulerSchemeForBSModel();
            StochasticAssetPrice  Asset      = new StochasticAssetPrice(Mu, sigma, spotPrice);

            if (antithetic)
            {
                double[] s1 = Option.PricingByMCSim(Asset, Euler, numOfScenarios, timeSteps,
                                                    true);
                Console.WriteLine("Option price estimated by Monte Carlo Simulation and " +
                                  "antithetic variance reduction is:\n {0:#0.00} \n Standard error is:\n {1:#0.000} ",
                                  s1[0], s1[1]);
            }
            else
            {
                double[] s2 = Option.PricingByMCSim(Asset, Euler, numOfScenarios, timeSteps, false);
                Console.WriteLine("Option price estimated by Monte Carlo Simulation is:\n {0:#0.00} \n" +
                                  "Standard error is:\n {1:#0.000} ", s2[0], s2[1]);
            }
            Console.ReadLine();
        }
 static void Main(string[] args)
 {
     //input needed information from keyboard
     Console.WriteLine("Input spot price of underlying asset:");
     double spotPrice = Convert.ToDouble(Console.ReadLine());
     int oType;
     do
     {
         Console.WriteLine("Input European option type (0 for call, 1 for put):");
         oType = Convert.ToInt32(Console.ReadLine());
     }
     while (oType != 0 & oType != 1);
     OptionType optionType = (oType == 0 ? OptionType.Call : OptionType.Put);
     Console.WriteLine("Input option strike price:");
     double strikePrice = Convert.ToDouble(Console.ReadLine());
     Console.WriteLine("Input time to maturity of this option:");
     double timeToMaturity = Convert.ToDouble(Console.ReadLine());
     Console.WriteLine("Input drift parameter for brownian motion:");
     double Mu = Convert.ToDouble(Console.ReadLine());
     Console.WriteLine("Input volatility parameter for brownian motion:");
     double sigma = Convert.ToDouble(Console.ReadLine());
     Console.WriteLine("Input number of scenarios generated by MC simulation:");
     int numOfScenarios = Convert.ToInt32(Console.ReadLine());
     Console.WriteLine("Input number of time steps for Euler discretization:");
     int timeSteps = Convert.ToInt32(Console.ReadLine());
     Console.WriteLine("Input whether to use antithetic variance reduction technique " +
         "(true for yes,false for no): ");
     bool antithetic = Convert.ToBoolean(Console.ReadLine());
     Console.WriteLine("Input whether to visualize price path (true for yes,false for no): ");
     bool visualizationFlag = Convert.ToBoolean(Console.ReadLine());
     EuropeanOption Option = new EuropeanOption(timeToMaturity, strikePrice, optionType);
     EulerSchemeForBSModel Euler = new EulerSchemeForBSModel();
     StochasticAssetPrice Asset = new StochasticAssetPrice(Mu, sigma, spotPrice);
     if (antithetic)
     {
         Form1 s1form = new Form1("MC Simulation with Antithetic Variance Reduction");
         double[] s1 = Option.PricingByMCSim(Asset, Euler, numOfScenarios, timeSteps,
             true, visualizationFlag, s1form);
         Console.WriteLine("Option price estimated by Monte Carlo Simulation and " +
             "antithetic variance reduction is:\n {0:#0.00} \n Standard error is:\n {1:#0.000} ",
             s1[0], s1[1]);
         if (visualizationFlag)
         {
             // display the graph
             Application.Run(s1form.Display());
         }
     }
     else
     {
         Form1 s2form = new Form1("MC Simulation without Antithetic Variance Reduction");
         double[] s2 = Option.PricingByMCSim(Asset, Euler, numOfScenarios, timeSteps, false,
             visualizationFlag, s2form);
         Console.WriteLine("Option price estimated by Monte Carlo Simulation is:\n {0:#0.00} \n" +
             "Standard error is:\n {1:#0.000} ", s2[0], s2[1]);
         if (visualizationFlag)
         {
             // display the graph
             Application.Run(s2form.Display());
         }
     }
     Console.ReadLine();
 }
        static void Main(string[] args)
        {
            //input needed information from keyboard
            Console.WriteLine("Input spot price of underlying asset:");
            double spotPrice = Convert.ToDouble(Console.ReadLine());
            while (spotPrice < 0)
            {
                Console.WriteLine("price must be positive, re-enter valide price:");
                spotPrice = Convert.ToDouble(Console.ReadLine());
            }
            int oType;
            do
            {
                Console.WriteLine("Input European option type (0 for call, 1 for put):");
                oType = Convert.ToInt32(Console.ReadLine());
            }
            while (oType != 0 & oType != 1);
            OptionType optionType = (oType == 0 ? OptionType.Call : OptionType.Put);
            Console.WriteLine("Input option strike price:");
            double strikePrice = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Input time to maturity of this option:");
            double timeToMaturity = Convert.ToDouble(Console.ReadLine());
            while (timeToMaturity < 0)
            {
                Console.WriteLine("time to maturity must be non-negative, re-enter valide value:");
                timeToMaturity = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Input drift parameter for brownian motion:");
            double Mu = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Input volatility parameter for brownian motion:");
            double sigma = Convert.ToDouble(Console.ReadLine());
            while (sigma < 0)
            {
                Console.WriteLine("volatility parameter must be non-negative, re-enter valide value:");
                sigma = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Input number of scenarios generated by MC simulation:");
            int numOfScenarios = Convert.ToInt32(Console.ReadLine());
            while (numOfScenarios < 1)
            {
                Console.WriteLine("this number must be positive, re-enter valide value:");
                numOfScenarios = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("Input number of time steps for discretization:");
            int timeSteps = Convert.ToInt32(Console.ReadLine());
            while (timeSteps < 1)
            {
                Console.WriteLine("this number must be positive, re-enter valide value:");
                timeSteps = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("Input whether to use antithetic variance reduction technique " +
                "(true for yes,false for no): ");
            bool antithetic = Convert.ToBoolean(Console.ReadLine());
            Console.WriteLine("Input whether to visualize price path (true for yes,false for no): ");
            bool visualizationFlag = Convert.ToBoolean(Console.ReadLine());
            int discretizationScheme;
            do
            {
                Console.WriteLine("Input discretization scheme (0 for Euler, 1 for Milstein, 2 for log price scheme):");
                discretizationScheme = Convert.ToInt32(Console.ReadLine());
            }
            while (discretizationScheme < 0 | discretizationScheme > 2);
            EuropeanOption Option = new EuropeanOption(timeToMaturity, strikePrice, optionType);
            IDiscretizationScheme scheme;
            if (discretizationScheme == 0)
            { scheme = (IDiscretizationScheme)(new EulerSchemeForBSModel()); }
            else if (discretizationScheme == 1)
            { scheme = (IDiscretizationScheme)(new MilsteinSchemeForBSModel()); }
            else
            { scheme = (IDiscretizationScheme)(new LogPriceSchemeForBSModel()); }
            StochasticAssetPrice Asset = new StochasticAssetPrice(Mu, sigma, spotPrice);

            Form1 s1form = new Form1("MC Simulation");
            double[] s1 = Option.PricingByMCSim(Asset, scheme, numOfScenarios, timeSteps,
                antithetic, visualizationFlag, s1form);
            if (antithetic)
            {
                Console.WriteLine("Option price estimated by Monte Carlo Simulation and " +
                    "antithetic variance reduction is:\n {0:#0.00} \n Standard error is:\n {1:#0.000} ",
                    s1[0], s1[1]);
            }
            else
            {
                Console.WriteLine("Option price estimated by Monte Carlo Simulation is:\n {0:#0.00} \n" +
                    "Standard error is:\n {1:#0.000} ", s1[0], s1[1]);
            }
            if (visualizationFlag)
            {
                // display the graph
                Application.Run(s1form.Display());
            }
            Console.ReadLine();
        }
Exemple #4
0
        static void Main(string[] args)
        {
            //input needed information from keyboard
            Console.WriteLine("Input spot price of underlying asset:");
            double spotPrice = Convert.ToDouble(Console.ReadLine());

            while (spotPrice < 0)
            {
                Console.WriteLine("price must be positive, re-enter valide price:");
                spotPrice = Convert.ToDouble(Console.ReadLine());
            }
            int oType;

            do
            {
                Console.WriteLine("Input European option type (0 for call, 1 for put):");
                oType = Convert.ToInt32(Console.ReadLine());
            }while (oType != 0 & oType != 1);
            OptionType optionType = (oType == 0 ? OptionType.Call : OptionType.Put);

            Console.WriteLine("Input option strike price:");
            double strikePrice = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Input time to maturity of this option:");
            double timeToMaturity = Convert.ToDouble(Console.ReadLine());

            while (timeToMaturity < 0)
            {
                Console.WriteLine("time to maturity must be non-negative, re-enter valide value:");
                timeToMaturity = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Input drift parameter for brownian motion:");
            double Mu = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Input volatility parameter for brownian motion:");
            double sigma = Convert.ToDouble(Console.ReadLine());

            while (sigma < 0)
            {
                Console.WriteLine("volatility parameter must be non-negative, re-enter valide value:");
                sigma = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Input number of scenarios generated by MC simulation:");
            int numOfScenarios = Convert.ToInt32(Console.ReadLine());

            while (numOfScenarios < 1)
            {
                Console.WriteLine("this number must be positive, re-enter valide value:");
                numOfScenarios = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("Input number of time steps for discretization:");
            int timeSteps = Convert.ToInt32(Console.ReadLine());

            while (timeSteps < 1)
            {
                Console.WriteLine("this number must be positive, re-enter valide value:");
                timeSteps = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("Input whether to use antithetic variance reduction technique " +
                              "(true for yes,false for no): ");
            bool antithetic = Convert.ToBoolean(Console.ReadLine());

            Console.WriteLine("Input whether to visualize price path (true for yes,false for no): ");
            bool visualizationFlag = Convert.ToBoolean(Console.ReadLine());
            int  discretizationScheme;

            do
            {
                Console.WriteLine("Input discretization scheme (0 for Euler, 1 for Milstein, 2 for log price scheme):");
                discretizationScheme = Convert.ToInt32(Console.ReadLine());
            }while (discretizationScheme < 0 | discretizationScheme > 2);
            EuropeanOption        Option = new EuropeanOption(timeToMaturity, strikePrice, optionType);
            IDiscretizationScheme scheme;

            if (discretizationScheme == 0)
            {
                scheme = (IDiscretizationScheme)(new EulerSchemeForBSModel());
            }
            else if (discretizationScheme == 1)
            {
                scheme = (IDiscretizationScheme)(new MilsteinSchemeForBSModel());
            }
            else
            {
                scheme = (IDiscretizationScheme)(new LogPriceSchemeForBSModel());
            }
            StochasticAssetPrice Asset = new StochasticAssetPrice(Mu, sigma, spotPrice);

            Form1 s1form = new Form1("MC Simulation");

            double[] s1 = Option.PricingByMCSim(Asset, scheme, numOfScenarios, timeSteps,
                                                antithetic, visualizationFlag, s1form);
            if (antithetic)
            {
                Console.WriteLine("Option price estimated by Monte Carlo Simulation and " +
                                  "antithetic variance reduction is:\n {0:#0.00} \n Standard error is:\n {1:#0.000} ",
                                  s1[0], s1[1]);
            }
            else
            {
                Console.WriteLine("Option price estimated by Monte Carlo Simulation is:\n {0:#0.00} \n" +
                                  "Standard error is:\n {1:#0.000} ", s1[0], s1[1]);
            }
            if (visualizationFlag)
            {
                // display the graph
                Application.Run(s1form.Display());
            }
            Console.ReadLine();
        }