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()); 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()); EuropeanCallOption Option = new EuropeanCallOption(timeToMaturity, strikePrice); 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(); }