public static BlackScholesClosedForm create() { double r; double sig; double K; double T; double d; string type; Console.Write("Strike "); K = Convert.ToDouble(Console.ReadLine()); Console.Write("Sig "); sig = Convert.ToDouble(Console.ReadLine()); Console.Write("Rate "); r = Convert.ToDouble(Console.ReadLine()); Console.Write("Dividend "); d = Convert.ToDouble(Console.ReadLine()); Console.Write("Expiry "); T = Convert.ToDouble(Console.ReadLine()); Console.Write("Type "); type = Convert.ToString(Console.ReadLine()); BlackScholesClosedForm option = new BlackScholesClosedForm(type, T, K, d, r, sig); return(option); }
public static void Display(this BlackScholesClosedForm option, double S) { Console.WriteLine( "Display Ooption price+greeks in an Extension method"); Console.WriteLine("Price: {0}", option.Price(S)); Console.WriteLine("Delta: {0}", option.Delta(S)); Console.WriteLine("Gamma: {0}", option.Gamma(S)); //Console.WriteLine("Vega: {0}", option.Vega(S)); //Console.WriteLine("Theta: {0}", option.Theta(S)); //Console.WriteLine("Rho: {0}", option.Rho(S)); }
static void Main() { double spot = 100; double expiry = 2; double strike = 100; double volatility = 0.1; double interest = 0.02; double dividend = 0.01; string type = "CALL"; QLNet.PlainVanillaPayoff payoff = new QLNet.PlainVanillaPayoff(QLNet.Option.Type.Call, strike); QLNet.BlackScholesCalculator bscal = new QLNet.BlackScholesCalculator(payoff, spot, dividend, volatility * expiry, interest); Console.WriteLine(bscal.value()); //BlackScholesClosedForm bs = ConsoleBSOptionFactory.create(); BlackScholesClosedForm bs = new BlackScholesClosedForm(type, expiry, strike, interest, dividend, volatility); Console.WriteLine(bs.Price(spot)); double[] price = bs.Price(0, 500, 200); //for (int i = 0; i < price.Length; i++) //{ // Console.WriteLine(price[i]); //} ////Console.ReadLine(); // Finite Difference double truncation = 500; PdeBS pdeBS = new PdeBS(expiry, strike, volatility, interest, dividend, truncation, type); Mesh xMesh = new Mesh(100, 0, 500); Mesh tMesh = new Mesh(1000, 0, 2); ThetaMethod test = new ThetaMethod(pdeBS, xMesh.getMesh()); test.solve(tMesh.getMesh().ToArray(), 1); test.current(); //FDM fdm = new FDM(pdeBS); //FDMDirector fdmDirector = new FDMDirector(fdm, xMesh.getMesh(), tMesh.getMesh()); //fdmDirector.Start(); //Vector<double> result = fdmDirector.current(); //double valueResult = MathNet.Numerics.Interpolate.Linear(xMesh.getMesh(), result).Interpolate(strike); ////double[] test = new double[price.Length]; ////for (int i = 0; i < price.Length; i++) ////{ //// test[i] = price[i] - result[i]; //// Console.WriteLine(test[i]); ////} //Console.WriteLine(valueResult); //Console.ReadLine(); }
public static double[] Price(this BlackScholesClosedForm option, double low, double upper, int NSteps) { double h = (upper - low) / NSteps; double S = low; double[] price = new double[NSteps]; for (int i = 0; i < NSteps; i++) { price[i] = option.Price(S); S += h; } return(price); }