public void calculate() { IOptionFactory fac = getFactory(); Option myOption = fac.create(); Console.Write("Give the underlying price: "); double S = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Price: {0}", myOption.Price(S)); }
public void calculate() { // 1. Choose how the data in the option will be created IOptionFactory fac = getFactory(); // 2. Create the option Option myOption = fac.create(); // 4. Display the result Console.WriteLine("Price: {0}", myOption.Price()); }
public void calculate() { // 1. Choose how the data in the option will be created IOptionFactory fac = getFactory(); // 2. Create the option, factory of options Option myOption = fac.create(); // 3. Get the price Console.Write("Give the underlying price: "); double S = Convert.ToDouble(Console.ReadLine()); // 4. Display the result Console.WriteLine("Price: {0}", myOption.Price(S)); }
/* public static double EarlyImpl(double P, double S) * { * * double K = 10.0; * * if (P > K - S) * { * return P; * } * return K - S; * }*/ // This could be made into a member function of Option public static void Main() { // Phase I: Create and initialise the option IOptionFactory fac = getFactory(); int N = 200; Console.Write("Number of time steps: "); N = Convert.ToInt32(Console.ReadLine()); double S; Console.Write("Underlying price: "); S = Convert.ToDouble(Console.ReadLine()); Option opt = fac.create(); double k = opt.T / N; // Create basic lattice double discounting = Math.Exp(-opt.r * k); // Phase II: Create the binomial method and forward induction BinomialLatticeStrategy binParams = getStrategy(opt.sig, opt.r, k, S, opt.K, N); // Factory BinomialMethod bn = new BinomialMethod(discounting, binParams, N); bn.modifyLattice(S); // Phase III: Backward Induction and compute option price Vector <double> RHS = new Vector <double>(bn.BasePyramidVector()); if (binParams.bType == BinomialType.Additive) { RHS[RHS.MinIndex] = S * Math.Exp(N * binParams.downValue()); for (int j = RHS.MinIndex + 1; j <= RHS.MaxIndex; j++) { RHS[j] = RHS[j - 1] * Math.Exp(binParams.upValue() - binParams.downValue()); } } Vector <double> Pay = opt.PayoffVector(RHS); double pr = bn.getPrice(Pay); Console.WriteLine("European {0}", pr); // Binomial method with early exercise BinomialMethod bnEarly = new BinomialMethod(discounting, binParams, N, opt.EarlyImpl); bnEarly.modifyLattice(S); Vector <double> RHS2 = new Vector <double>(bnEarly.BasePyramidVector()); Vector <double> Pay2 = opt.PayoffVector(RHS2); double pr2 = bnEarly.getPrice(Pay2); Console.WriteLine("American {0}", pr2); // Display in Excel; first create array of asset mesh points int startIndex = 0; Vector <double> xarr = new Vector <double>(N + 1, startIndex); xarr[xarr.MinIndex] = 0.0; for (int j = xarr.MinIndex + 1; j <= xarr.MaxIndex; j++) { xarr[j] = xarr[j - 1] + k; } // Display lattice in Excel ExcelMechanisms exl = new ExcelMechanisms(); try { // public void printLatticeInExcel(Lattice<double> lattice, Vector<double> xarr, string SheetName) string sheetName = "Lattice"; exl.printLatticeInExcel(bnEarly.getLattice(), xarr, sheetName); } catch (Exception e) { Console.WriteLine(e); } }